티스토리 뷰
redirect
- 서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청하는 것.
- 웹브라우저 -> 서버 -> 302코드, location값 -> 웹브라우저 -> location값으로 재요청 -> 웹브라우저
- 브라우저의 주소창은 새 URL로 바뀐다.
예) 게시글 작성 버튼 클릭시 서버에 글 작성 요청 후 글 목록으로 이동하는 경우
소스코드
redirect01.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%
response.sendRedirect("redirect02.jsp");
%>
redirect02.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
redirect된 페이지 입니다.
</body>
</html>
결과
forward
- 웹브라우저에서 Servlet1에게 요청
- Servlet1은 요청을 처리한 후, 그 결과를 HttpServletRequest에 저장
- Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(forward)
- Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 웹브라우저에게 결과를 전송(URL이 바뀌지 않는다.)
예) WAS의 Servlet이나 JSP가 요청을 받은 후 그 요청을 처리하다가, 추가적인 처리를 같은 웹 어플리케이션에 포함된 다른 Servlet이나 JSP에게 위임하는 경우 forward를 사용함.
소스코드
FrontServlet.java
package examples;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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("/front")
public class FrontServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FrontServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int diceValue = (int)(Math.random() * 6) + 1;
request.setAttribute("dice", diceValue);
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/next");
requestDispatcher.forward(request, response);
}
}
NextServlet.java
package examples;
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("/next")
public class NextServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public NextServlet() {
super();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
int dice = (Integer)request.getAttribute("dice");
out.println("dice : " + dice + "<br>");
for(int i = 0; i < dice; i++) {
out.print("hello<br>");
}
out.println("</body>");
out.println("</html>");
}
}
결과
servlet과 jsp 연동
- servlet은 자바 소스를 사용하기에 적합하다.
- jsp는 HTML을 사용하기에 적합하다.
- forward를 이용해서 각각의 장점을 이용할 수 있다.
LogicServlet.java
package examples;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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("/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 rd = request.getRequestDispatcher("/result.jsp");
rd.forward(request, response);
}
}
result.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
int v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%=v1 %> + <%=v2 %> = <%=result %>
</body>
</html>
결과
참조
https://www.boostcourse.org/web316/lecture/19878
https://www.boostcourse.org/web316/lecture/16705
https://www.boostcourse.org/web316/lecture/16706
'Language > Java' 카테고리의 다른 글
JDBC 설정 (0) | 2020.12.21 |
---|---|
Maven 환경설정 (0) | 2020.12.21 |
JSP(JavaServer Pages) (0) | 2020.12.17 |
Servlet 생명주기 (0) | 2020.12.09 |
접근제어자(Access Modifiers) (0) | 2020.12.09 |
댓글