Web

redirect와 forward

똥태 2021. 11. 15. 00:23

리다이렉트 (redircet)

서버가 클라이언트에게 어떤 url로 이동하라는 요청을 보내는 것

 

HTTP 리다이렉트는 HTTP 프로토콜로 정해진 규칙이다.

서버는 클라이언트에게 HTTP 상태코드 3xx (3으로 시작되는)로 응답하는데 이때 헤더 내 Location 값에 이동할 URL을 추가한다. 클라이언트는 리다이렉션 응답을 받게되면 헤더에 포함된 URL로 재요청을 보내게된다. 이때 브라우저의 주소창은 새URL로 바뀐다.

 

리다이렉트를 하면 기존에 생성된 request, response객체는 유지되지 않고 새로운 객체가 만들어진다. 즉 기존에 사용하던 값을 사용할 수 없게된다.

 

사용법

redirect01.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//response.sendRedirect("https://www.google.com/");

	response.sendRedirect("redirect02.jsp");
%>

 

 

HttpServletResponse 클래스의 sendRedirect() 메소드를 사용한다.

 

실행결과

redirect01.jsp를 서버에 요청한후 302코드를 받고 로케이션 헤더부분의 redirect02.jsp 로 리다이렉트되며 url이 변경된것을 확인할 수 있다.

 

 

동작 설명 이미지

 

 

 


 

 

 

포워드(forward)

WAS의 서블릿이나 JSP가 클라이언트 요청을 받은 후 요청을 처리하다가 추가적인 처리 등을 위해 같은 웹 어플리케이션 내 다른 서블릿이나 JSP에게 처리를 위임하는 것

 

서블릿은 로직을 구현하기엔 편하지만 HTML을 작성하기엔 불편하다.

JSP는 로직을 구현하는 것은 불편하지만 HTML을 작성하기엔 편하다.

따라서 서블릿과 JSP를 적절히 사용하기 위해 forward를 사용한다. 서블릿에서 서비스 로직을 작성한 후 화면에 출력될 필요한 값들을 request 객체에 담아 jsp 에게 forward하는 것이다.

 

@WebServlet("/logic")
public class LogicServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public LogicServlet() {
        super();
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int v1 = (int)(Math.random()*100) + 1;
		int v2 = (int)(Math.random()*100) + 1;
		int result = v1+v2;
		
		request.setAttribute("v1", v1);
		request.setAttribute("v2", v2);
		request.setAttribute("result", result);
		
		RequestDispatcher requestDispatcher = request.getRequestDispatcher("/result.jsp");
		requestDispatcher.forward(request, response);
	}

}

 

'Web' 카테고리의 다른 글

폼 데이터 입력 후 한글 깨짐 현상  (0) 2021.12.15
폼 데이터 입력 후 한글 깨짐 현상  (0) 2021.12.09
JSP 문법  (0) 2021.11.13
JSP 라이프싸이클  (0) 2021.11.13
Servlet  (0) 2021.11.10