본문 바로가기

개발/Java

[JAVA - WEB] 서블릿 포워드(forward)

728x90
반응형
포워드 기능

 

포워드란 하나의 서블릿에서 다른 서블릿이나 JSP 와 연동하는 방법입니다.
쇼핑몰을 예를 들면 상품관리 서블릿과 조회된 상품을 화면에 표시하는 JSP 는 각각 따로 존재합니다. 
따라서 사용자가 상품 조회를 요청하면 상품 관리 서블릿은 데이터베이스에서 상품 정보를 조회한 후 다시 JSP 에게 전달하여 상품 정보를 표시하는 것이죠.

 

기능을 요약하면 다음과 같습니다.

- 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 합니다.
- 요청에 포함된 정보를 다른 서블릿이나 JSP 와 공유할 수 있습니다.
- 요청에 대한 정보를 포함시켜 다른 서블릿에 전달할 수 있습니다.
- 모델2(MVC) 개발 시 서블릿에서 JSP 로 데이터를 전달하는데 사용됩니다.

 

 

 

포워드 방법

 

redirect 
- HttpServletResponse 객체의 sendRedirect() 메서드 사용
- response.sendRedirect("Target Servlet or JSP");

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
					throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	response.sendRedirect("second");
}

 

 

Refresh
- HttpServletResponse 객체의 addHeader() 사용
- response.addHeader("Refresh", "경과시간(sec);url = Target Servlet or JSP");

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
					throws ServletException,  IOException{
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	response.addHeader("Refresh","1;url=second");
}

 

 

location
- 자바스크립트 location 객체의 href 사용
- location.href = 'Target Servlet or JSP';

 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
					throws  ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("<script type='text/javascript'>");
	out.print("location.href='second';");
	out.print("</script>");
}

 

redirect, Refresh, location 방식은 웹 브라우저를 거쳐 다른 서블릿이나 JSP 에게 요청합니다.
Get 방식의 데이터를 전달하는 방법은 Target 뒤에 물음표(?) 후 key=value 형식으로 함께 작성해서 전달합니다.
요청을 받는 Target 에서는 request.getParameter("key") 로 받아서 처리하면 됩니다.

 

response.sendRedirect("second?name=kim");

 

 

 

dispatch 를 이용한 포워드

 

dispatch 를 이용한 포워딩 과정이 앞의 방식과 다른 점은 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행된다는 것입니다.
따라서 웹 브라우저의 주소창의 URL 이 변경되지 않으므로 클라이언트 측에서는 포워드 진행여부를 알 수 없습니다.

 

- RequestDispatcher 클래스의 forward() 사용
- RequestDispatcher dis = request.getRequestDispatcher("Target Servlet or JSP");

 

protected void doGet(HttpServletRequest request, HttpServletResponse response)  
					throws  ServletException, IOException { 
	request.setCharacterEncoding("utf-8");
	response.setContentType("text/html;charset=utf-8");
	RequestDispatcher dispatch = request.getRequestDispatcher("second");  
	dispatch.forward(request, response);
}

 

Get 방식의 데이터 전달 방법은 앞의 포워드 방법과 동일합니다.

 

여기까지 임미다.

 

728x90