서블릿 정보 등록
1. web.xml 을 사용한 서블릿 등록
web.xml 파일에 <servlet>태그와 <servlet-mapping> 태그를 사용하여 서블릿 클래스와 URL 패턴을 매칭해줄 수 있음
<web-app>
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/servlet</url-pattern>
</servlet-mapping>
</web-app>
▲ MyServlet 클래스를 /servlet URL 패턴에 매핑한 예시
2. 어노테이션을 사용한 서블릿 등록
Java Servlet 3.0 부터 어노테이션 기반으로 서블릿 정보 등록이 가능해짐
@WebServlet("/servlet")
▲ 어노테이션 사용 예시
서블릿 페이지 이동
Redirect 리다이렉트
클라이언트에게 특정 URL로 재요청하도록 지시하는 방식
서버는 클라이언트 요청을 받아 처리한 후 상태코드를 302 또는 301 등으로 설정하고
Location 헤더에 새로운 URL을 담아 응답함
이후 클라이언트는 이 응답을 받고 새 URL로 재요청을 보냄
response.sendRedirect("/newUrl");
- 두 번의 요청/응답을 거침
- 원래 요청 정보가 유지되지 않음
- 주소창 URL이 변경됨
- GET 메서드만 사용 가능
Forward 포워드
서버 내부에서 페이지 이동을 처리하는 방식
서버가 클라이언트의 요청을 받고 해당 요청과 응답 객체를 다른 서블릿, JSP 등에 전달(Forward)함
해당 서블릿 제이에스피 등을 이어받아 처리 결과를 생성하여 클라이언트에게 응답함
RequestDispatcher dispatcher = request.getRequestDispatcher("newUrl");
dispatcher.forward(request, response);
- 한번의 요청/응답을 거침
- 원래 요청 정보가 유지됨
- 주소창 URL이 변경되지 않음
서블릿 정보 공유
주로 세가지 범위에서 이루어짐
요청(리퀘스트) 세션(세션) 어플리케이션(어플리케이션)
1. Request Scope 요청 범위
한번의 HTTP 요청을 처리하는 동안 유지되는 정보
request.setAttribute("myAttribute", "Hello");
String myAttribute = (String) request.getAttibute("myAttribute");
2. Session Scope 세션 범위
클라이언트가 웹 사이트에 접속한 후 부터 브라우저를 닫거나 로그아웃 하기 전까지 유지되는 정보
HttpSession session = request.getSession();
session.setAttribute("user", user);
User user = (User) session.getAttibute("user");
3. Application Scope 어플리케이션 범위
어플리케이션이 시작되고 종료되기 전까지 유지되며 모든 사용자가 공유하는 정보
ServletContext application = getSevletContext();
application.setAttribute("appData", data);
Object data = application.getAttibute("appData");
요청 범위 | 한 번의 HTTP 요청/응답 사이클 동안에만 필요한 임시 데이터 저장 |
세션 범위 | 한 클라이언트의 요청에 유지되어야 하는 데이터 저장 |
어플리케이션 범위 | 어플리케이션 전체에서 공유되어야 하는 데이터 저장 |
'BackEnd > Servlet' 카테고리의 다른 글
DAO · DTO · Entity (+ ect) (0) | 2023.10.06 |
---|---|
MVC 패턴 · Dispatcher (0) | 2023.10.05 |
[Servlet] JSP 02 (0) | 2023.10.05 |
[Servlet] JSP 01 (0) | 2023.10.04 |
[Servlet] 01 (0) | 2023.09.27 |