본문 바로가기
  • 일하면서 배운 내용 끄적이는 블로그
JSP

Redirect & Forward

by dhl7799 2024. 2. 22.

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

서버는 클라이언트로부터 요청을 받은 후, 클라이언트에게 특정 url로 이동 요청 가능, 이게 리다이렉트

서버는 클라이언트에게 응답으로 상태코드 302와 함께 이동할 url 정보를 location header에 담아 송신,

클라이언트는 받은 상태값이 302면 location header값으로 재요청

이때 브라우저의 주소창은 전송받은 url로 바뀜

서블릿이나 jsp는 redirect하기 위해 HttpServletResponse가 가지고 있는 sendRedirect()메소드를 사용

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

 

포워드는 한 서블릿이 웹 브라우저에게 받은 요청을 처리한 후, 결과를 HttpServletRequest에 저장하고

결과를 저장한 HttpServletRequest와 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 다른 서블릿에게 전송하는데 이걸 포워드(forward)라고 한다

포워드를 받은 서블릿은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리하고 웹 브라우저에게 결과를 전송한다 

 

 

 

리다이렉트는 요청이 둘, 반면 포워드는 요청은 한개다. 따라서 포워드는 요청-응답 객체가 그대로 유지된다.

 

포워드는 값 저장을 위해 서블릿 1, 서블릿2가 동시에 접근 가능한 객체가 필요함, 따라서 HttpServletRequest에 저장

 

 

Servlet 1에서 Servlet 2 호출 방법

request 객체에 setAttrubute로 필요한 값을 담은 다음 RequestDispatcher 이용

int diceValue = (int)(Math.random()*6) + 1;
request.setAttribute("dice", diceValue);
        
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next");
requestDispatcher.forward(request, response);

 

여기서 /next는 Servlet 2의 url

 

Servlet 2에서는 getAttribute로 request 객체의 값을 받아 사용하면 끝

int dice = (Integer)request.getAttribute("dice");

 

 

Servlet 끼리 뿐만 아니라 Servlet - JSP도 forward 방식으로 진행된다

RequestDispatcher requestDispatcher = request.getRequestDispatcher("/result.jsp");
requestDispatcher.forward(request, response);

 

jsp 파일 위치값을 넣어주고 forward

 

<body>
EL표기법으로 출력합니다.<br>
${v1} + ${v2} = ${result} <br><br>

스클립틀릿과 표현식을 이용해 출력합니다.<br>
<%
    int v1 = (int)request.getAttribute("v1");
    int v2 = (int)request.getAttribute("v2");
    int result = (int)request.getAttribute("result");
%>

<%=v1%> + <%=v2 %> = <%=result %>
</body>

 

마찬가지로 getAttribute 해서 값 받아 출력

'JSP' 카테고리의 다른 글

EL & JSTL  (0) 2024.02.23
Scope  (0) 2024.02.23
JSP  (0) 2024.02.22