리다이렉트 (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 |