📌 개요
클라이언트의 요청을 받은 서블릿에서 다른 컴포넌트( 서블릿, JSP, html)로 요청을 위임할 수 있는 방법이다.
직접 요청 받은 서블릿에서 모든 작업을 처리하지 않고 위임한 컴포넌트에서도 특정 작업을 처리하여 모듈화가 가능하다.
📌 위임방법 2가지
1️⃣ HttpServletRequest 객체를 이용한 forward 방법.
맨 처음 요청 받은 서블릿에서 생성된 HttpServletRequest 객체를 재사용하여 위임 하는 방법으로
포워드(forward)라고 부른다.
하나의 HttpServletRequest 를 사용하기 때문에 forward 되었을 때 URL이 변경이 안된다.
RequestDistatcher dis = request.getRequestDispatcher(target);
dis.forward(request, response);
2️⃣ HttpServletResponse 객체를 이용한 redirect 방법
포워드 방법과는 다르게 맨 처음 요청 받은 서블릿에서 생성된 HttpServletRequest 객체가 아닌 새로운 HttpServletRequest 객체를 생성하여 위임하는 방법으로 리다이렉트(redirect)라고 부른다.
서로 다른 HttpServletRequest 객체를 사용하기 때문에 redirect 되었을 때 URL이 변경된다.
response.sendRedirect(target);
✅ 포워드는 response를 다 가져올 수 있다.
✅ redirect는 request Scope값이 null을 반환한다.
📝 실습1 - 포워드
MainServlet
package com.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 요청 서블릿 @WebServlet("/main") public class MainServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MainServlet"); // 요청위임1 - 포워드(forward) request.getRequestDispatcher("response").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ResponseServlet
package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 응답 서블릿 @WebServlet("/response") public class ResponseServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("ResponseServlet"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.print("<html><head>"); out.print("<meta charset=\"UTF-8\">"); out.print("<title>Insert title here</title>"); out.print("</head>"); out.print("<body>"); out.print("<h1>ResponseServlet</h1>"); out.print("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
📝 실습2 - 리다이렉트
Main2Servlet
package com.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 요청 서블릿 @WebServlet("/main2") public class Main2Servlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("MainServlet"); // 요청위임2 - 리다이렉트(redirect) response.sendRedirect("response"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
ResponseServlet
package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // 응답 서블릿 @WebServlet("/response") public class ResponseServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("ResponseServlet"); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); out.print("<html><head>"); out.print("<meta charset=\"UTF-8\">"); out.print("<title>Insert title here</title>"); out.print("</head>"); out.print("<body>"); out.print("<h1>ResponseServlet</h1>"); out.print("</body></html>"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
'Programming Language > SERVLET' 카테고리의 다른 글
서블릿 (servlet) -세션 관리 (session vs cookie) (0) | 2023.08.16 |
---|---|
서블릿 (servlet) - 파일 업로드 (0) | 2023.08.16 |
서블릿 (servlet) - DB연동 (실습2 수정,삭제) (0) | 2023.08.11 |
서블릿 (servlet) - DB연동 (실습1 등록) (0) | 2023.08.11 |
서블릿 (servlet) - DB연동 (0) | 2023.08.11 |