sendRedirect("포워드할 서블릿 또는 JSP");
response.addHeader("Refresh",경과시간(초);url=요청할 서블릿 또는 JSP"); //경과시간 마다 url로 새로 고침
location.href='요청할 서블릿 또는 JSP';
RequestDispatcher dis = request.getRequestDispatcher("포워드할 서블릿 또는 JSP"); //경로를 매개변수로 받아 현재 요청과 관련된 객체를 가져옴
dis.forward(request,response); //request를 다른 서블릿이나 JSP 페이지로 전달하고, 해당 페이지가 response를 생성하도록 하는 작업 수행(요청을 다른 페이지로 포워딩)
@WebServlet("/first")
public class FirstServlet extends HttpServlet { //redirect 기능을 구현한 서블릿
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
response.sendRedirect("second");
}
}
@WebServlet("/second") //첫 번째 서블릿에서 요청을 받아 실행하는 두 번째 서블릿
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("sendRedirect를 이용한 redirect 실습입니다.");
out.println("</body></html>");
}
}
브라우저에서 http://localhost:8080/~/first로 요청하면 ~/second로 재요청되며 url도 바뀌는 것을 볼 수 있다.
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
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");
}
}
@WebServlet("/second") //브라우저에서 재요청하면 브라우저로 메세지를 출력하는 서블릿
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("sendRedirect를 이용한 redirect 실습입니다.");
out.println("</body></html>");
}
}
브라우저에서 http://localhost:8080/~/first로 요청하면 ~/second로 재요청되며 url도 바뀌는 것을 볼 수 있다.
@WebServlet("/first")
public class FirstServlet extends HttpServlet { //서블릿에서 JS 코드를 출력해 서블릿 second로 재요청
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/html;charset=utf-8");
out.print("location.href='second';");
out.print("</script>");
}
}
@WebServlet("/second")
public class SecondServlet extends HttpServlet { //브라우저에서 재요청하면 브라우저로 메세지 출력
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("sendRedirect를 이용한 redirect 실습입니다.");
out.println("</body></html>");
}
}
브라우저에서 http://localhost:8080/~/first로 요청하면 ~/second로 재요청되며 url도 바뀌는 것을 볼 수 있다.
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter(); //get방식으로 이름/값 쌍으로 데이터를 다른 서블릿으로 전달
response.sendRedirect("second?name=lee");
}
}
@WebServlet("/second")
public class SecondServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name"); //name으로 이전 서블릿에서 전달된 lee를 받음
out.print("<html><body>");
out.println("이름:" + name);
out.println("</body></html>");
}
}
GET방식을 이용해 redirect 되는 서블릿 second로 이름이 전달되는 것을 알 수 있음.
localhost:~/second?name=lee
참고로 refresh, location도 GET 방식을 통해 다른 서블릿으로 데이터를 전달할 수 있음.
@WebServlet("/first5")
public class FirstSetvlet5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatch = request.getRequestDispatcher("second5"); //second5로 전달
dispatch.forward(request, response); //request 객체를 response로 보냄
}
}
@WebServlet("/second5")
public class SecondServlet5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("dispatch를 이용한 forward 실습입니다.");
out.println("</body></html>");
}
}
브라우저에서 http://localhost:8080/~/first로 요청하면 웹 브라우저 주소 창의 URL이 변경되지 않고 그대로 있는 것을 알 수 있음(서블릿의 포워드가 서버에서 수행되었기 때문)
@WebServlet("/first5")
public class FirstSetvlet5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
RequestDispatcher dispatch = request.getRequestDispatcher("second5?name=lee");
dispatch.forward(request, response);
}
}
@WebServlet("/second5")
public class SecondServlet5 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name"); //사용자가 입력한 name 파라미터 값을 가져오는 것
out.println("<html><body>");
out.println("이름:" + name);
out.println("<br>");
out.println("dispatch를 이용한 forward 실습입니다.");
out.println("</body></html>");
}
}
여전히 웹 브라우저의 URL 값은 변경되지 않는 것을 알 수 있다.