티스토리 뷰

 

 

📌 개요

클라이언트의 요청을 받은 서블릿에서 다른 컴포넌트( 서블릿, 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);
	}

}​
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함