728x90
클라이언트의 요청을 받은 서블릿에서 다른 컴포넌트(서블릿, JSP, html)로 요청을 위임할 수 있다. 직접 요청 받은 서블릿에서 모든 작업을 처리하지 않고 위임한 컴포넌트에서 특정 작업을 처리하여 모듈화가 가능하다.
위임 방식
HttpServletRequest
객체를 이용한 forward 방법HttpServletResponse
객체를 이용한 redirect 방법
포워드 방식 (forward)
맨 처음 요청 받은 서블릿에서 생성된 HttpServletRequest
객체를 재사용하여 위임하는 방법으로 포워드(forward)라고 한다. 하나의 HttpServeltRequest 객체를 사용하기 때문에 request가 확장되어 포워드가 되었을 때 URL 변경이 안된다.
request.getRequestDispatcher("target").forward(request, response);
RequestDispatcher
클래스는 요청 받은 요청객체(request)를 위임하는 컴포넌트에 동일하게 전달하는 역할을 한다.
테스트
package com.servlet;
/* 요청처리 서블릿 */
@WebServlet("/main")
public class MainServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 속성 설정
request.setAttribute("username", "홍길동");
request.setAttribute("useraddress", "서울");
// 포워드 (forward)
request.getRequestDispatcher("response").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
package com.servlet;
/* 응답처리 서블릿 */
@WebServlet("/response")
public class ResponseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = (String) request.getAttribute("username");
String useraddress = (String) request.getAttribute("useraddress");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("<html><body>");
out.print("<body>");
out.print("이름 : " + username + "<br>");
out.print("주소 : " + useraddress + "<br>");
out.print("</body></html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
리다이렉트 방식 (Redirect)
포워드 방식과는 다르게 맨 처음 요청 받은 서블릿에서 생성된 HttpServletRequest객체가 아닌 새로운 HttpServletRequest객체를 생성하여 위임하는 방식으로 리다이렉트(redirect)라고 한다. 서로 다른 HttpServletRequest 객체를 사용하기 때문에 리다이렉트 되었을 때, 응답 컴포넌트로 URL이 변경된다.
response.sendRedirect("target");
테스트
package com.servlet;
/* 요청처리 서블릿 */
@WebServlet("/main2")
public class MainServlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 속성 설정
request.setAttribute("username", "홍길동");
request.setAttribute("useraddress", "서울");
// 리다이렉트(redirect)
response.sendRedirect("response");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
리다이렉트(redirect)방식은 주로 메인 홈페이지로 이동할 때 주로 사용한다.
728x90
'WebServer > JSP&Servlet' 카테고리의 다른 글
[JSP&Servlet] 쿠키 관리 (Cookie) (0) | 2023.08.17 |
---|---|
[JSP&Servlet] 세션 관리 (Session) (0) | 2023.08.17 |
[Servlet] 서블릿과 DB 연동 (MyBatis 활용) (0) | 2023.08.15 |
[Servlet] Filter API (0) | 2023.08.10 |
[Servlet] 서블릿 스코프 (Scope) (0) | 2023.08.10 |