728x90
HTTP의 특징 중 하나가 바로 상태정보를 저장하지 않는 (stateless) 라는건데, 데이터를 저장하기 위해 사용 목적에 따라 4개의 저장소로 나눌 수 있습니다.
👉 서버에서 사용하는 4개의 저장소
- 페이지 컨텍스트 저장소 (PageContext Storage): 페이지 컨텍스트 저장소는 JSP(JavaServer Pages)에서 사용되는 저장소입니다. 각 JSP 페이지의 실행에 대한 정보를 저장하고 공유하는 데 사용됩니다.
페이지 컨텍스트는 JSP 페이지가 실행되는 동안에만 유효하며, 유효범위 또한 JSP 내부 시작부터 끝까지이고 페이지 간의 데이터 공유에 활용됩니다. - 애플리케이션 저장소 (Application Storage) : 애플리케이션 저장소는 서버 애플리케이션의 전역적인 범위에서 데이터를 저장하는 저장소입니다. 서버가 실행되고 있는 동안 유지되며,
모든 클라이언트 간에 공유됩니다. 애플리케이션 저장소는 ServletContext 객체를 통해 접근하고, 주로 애플리케이션의 설정 정보, 공통 데이터, 캐시 등을 저장하는 데 사용됩니다. 유효범위는 Servlet Context 전체입니다. - 세션 저장소 (Session Storage) : 세션 저장소는 서버와 클라이언트 간에 상태 정보를 유지하기 위해 사용되는 저장소입니다. 각 클라이언트의 세션에 대한 데이터를 저장하고,
클라이언트와의 연결이 유지되는 동안 데이터를 유지(편리성👍)합니다. 세션 저장소는 HttpSession 객체를 통해 접근하고, 로그인 정보, 장바구니 정보, 사용자 설정 등을 저장하는 데 사용됩니다.
각 클라이언트마다 개별적으로 가지고 있는 저장소이기 때문에 메모리 부담이 큰 특징이 있습니다. - 요청 저장소 (Request Storage): 요청 저장소는 클라이언트의 각 요청에 대한 데이터를 저장하는 저장소입니다. 각 요청이 처리되는 동안에만 유효하며, 해당 요청에 대한 응답이 완료되면 데이터는 삭제됩니다.
요청 저장소는 HttpServletRequest 객체를 통해 접근하고, 해당 요청에 대한 파라미터, 헤더, 쿠키 등의 정보를 저장하는 데 사용됩니다. 데이터를 저장하고 전달하는데 가장 적절하고, 메모리 부담이 적습니다.
👉 URL 패턴
URL 패턴은 웹 애플리케이션에서 요청된 URL을 처리하기 위해 사용되는 패턴입니다. URL 패턴은 일반적으로 웹 애플리케이션의 라우팅 및 요청 처리를 제어하기 위해 사용됩니다.
@WebServlet을 사용하여 URL에 맵핑할 때 사용하합니다. Servlet은 기본적으로 laze init으로 늦은 초기화입니다. URL 맵핑에는 패턴의 종류가 4가지가 있으며, 아래에 나열된 순서대로 우선순위가 정해집니다.
- Exact Mapping (정확한 매핑) : 정확한 매핑은 URL 패턴과 서블릿 또는 핸들러 메서드의 경로가 정확히 일치해야 매핑이 이루어집니다. 예를 들어, URL 패턴이 "/hello"인 경우 "/hello" 요청과만 정확히 매핑됩니다. 다른 경로의 요청은 매핑되지 않습니다.
- Path Mapping (경로 매핑) : 경로 매핑은 URL 패턴에 와일드카드를 사용하여 여러 경로를 매핑할 수 있습니다. "" 와일드카드는 한 수준의 디렉토리 경로를 대체합니다. 예를 들어, URL 패턴이 "/users/"인 경우 "/users/abc", "/users/123", "/users/profile" 등 모든 "/users" 경로 하위의 요청과 매핑됩니다.
- Extension Mapping (확장자 매핑) : 확장자 매핑은 URL 패턴에 파일 확장자를 사용하여 특정 종류의 파일 요청을 매핑할 수 있습니다. 예를 들어, URL 패턴이 "*.html"인 경우 "/index.html", "/about.html", "/contact.html" 등의 HTML 파일 요청과 매핑됩니다. 일반적으로 정적 리소스(HTML, CSS, 이미지 등)를 처리할 때 사용됩니다.
- Default Mapping (기본 매핑) : 기본 매핑은 모든 요청에 대해 매핑되는 특별한 유형의 매핑입니다. 기본 매핑은 다른 모든 매핑이 실패한 경우 실행됩니다. 예를 들어, URL 패턴이 "/"인 경우 웹 애플리케이션의 루트에 대한 모든 요청과 매핑됩니다.
✍️ EL (Expression Language)
EL(Expression Language)은 JSP(JavaServer Pages)와 같은 웹 애플리케이션에서 데이터를 동적으로 표현하기 위해 사용되는 스크립팅 언어입니다. EL은 JSP 페이지에서 Java 코드를 작성하지 않고도 편리하게 데이터에 접근하고 조작할 수 있는 간결하고 강력한 표현 방식을 제공합니다.
- 변수 접근: EL을 사용하여 JSP 페이지에서 변수에 쉽게 접근할 수 있습니다. **${} 표기법을 사용**하여 변수 이름을 감싸고, 해당 변수의 값을 동적으로 출력할 수 있습니다.
- 프로퍼티 접근: EL을 사용하여 JavaBeans 객체의 프로퍼티에 접근할 수 있습니다. .(도트) 연산자를 사용하여 객체의 프로퍼티에 접근하고 값을 가져오거나 설정할 수 있습니다.
- 컬렉션 접근: EL을 사용하여 배열이나 List, Map 등의 컬렉션 객체에 접근할 수 있습니다. 인덱스나 키를 사용하여 컬렉션의 요소에 접근하고 값을 가져올 수 있습니다.
- 연산: EL은 산술 연산, 논리 연산, 비교 연산 등 다양한 연산을 지원합니다. 변수나 프로퍼티에 대한 연산을 수행하여 계산된 값을 가져올 수 있습니다.
- 조건문과 반복문: EL은 if-else 문이나 foreach 문과 같은 조건문과 반복문을 지원합니다. 데이터의 조건에 따라 특정 블록을 실행하거나 반복할 수 있습니다.
Person person = new Person();
request.setAttribute("person", person);
request.setAttribute("name", "가나다");
request.setAttribute("list", new java.util.ArrayList());
person.getCar().getColor()=<%=person.getCar().getColor()%> <br>
person.getCar().getColor()=${person.getCar().getColor()} <br>
person.getCar().getColor()=${person.car.color} <br>
name=<%=request.getAttribute("name")%> <br>
name=${requestScope.name} <br>
name=${name} <br>
id=<%=request.getParameter("id")%> <br>
id=${pageContext.request.getParameter("id")} <br>
✍️ JSTL(JavaServer Pages Standard Tag Library)
JSTL(JavaServer Pages Standard Tag Library)은 JSP(JavaServer Pages)에서 자주 사용되는 태그들의 모음인 라이브러리입니다. JSTL은 JSP 페이지에서 보다 간편하고 효율적인 코드 작성을 위해 개발되었습니다.
- 제어 흐름 태그(Control Flow Tags): 조건문(if, choose), 반복문(forEach, forTokens), 분기문(switch) 등을 사용하여 동적인 제어 흐름을 구현할 수 있습니다.
- 데이터 처리 태그(Data Processing Tags): 변수 설정(set), 변수 출력(out), URL 생성 및 리다이렉트(redirect), 파라미터 전달(param) 등을 처리하는 태그들을 제공합니다.
- 데이터베이스 액세스 태그(Database Access Tags): JSTL을 사용하여 데이터베이스에 접근하고 데이터를 조회, 추가, 수정, 삭제할 수 있는 태그들을 제공합니다.
- 형식화 태그(Formatting Tags): 숫자, 날짜, 시간 등을 형식화하는 태그들을 제공하여 데이터를 보다 쉽게 형식화할 수 있습니다.
728x90
반응형
'[ BACKEND] > Spring' 카테고리의 다른 글
[SPRING] ORM 그리고 JPA (0) | 2023.08.05 |
---|---|
[SPRING] Servlet / JSP / MVC (0) | 2023.08.04 |
[SPRING] Servlet / HTTP Request , Response (0) | 2023.08.02 |
[SPRING] Web Application (0) | 2023.07.31 |
[SPRING] 싱글톤 방식의 주의점 💥 (0) | 2023.07.25 |