WAS의 서블릿이나 JSP가 요청을 받은 후 그 요청을 처리하다가, 추가적인 처리를 같은 웹 어플리케이션안에 포함된 다른 서블릿이나 JSP에게 위임하는 경우가 있습니다.

    이렇게 위임하는 것을 포워드(forward)라고 합니다.

    이번 시간엔 이러한 포워드에 대해서 좀 더 자세히 알아보도록 하겠습니다.

     

    redirect 와 혼동하지말자 

    redirect는 클라이언트가 서블릿(서버)에 요청하면 서블릿은 처리를 하고 다시 클라이언트에게 새로운 요청할 곳을 알려주면서 이걸로 다시 요청하라고 주는것이 redirect

    forward는 url이 바뀌지 않는다는 차이점이 있다.

     

    redirect

     

    forward란?

    1. 웹 브라우저에서 Servlet1에게 요청을 보냄
    2. Servlet1은 요청을 처리한 후, 그 결과를 HttpServletRequest에 저장
    3. Servlet1은 결과가 저장된 HttpServletRequest와 응답을 위한 HttpServletResponse를 같은 웹 어플리케이션 안에 있는 Servlet2에게 전송(forward)
    4. Servlet2는 Servlet1으로 부터 받은 HttpServletRequest와 HttpServletResponse를 이용하여 요청을 처리한 후 웹 브라우저에게 결과를 전송

     

    Forward 실습

     

    - 다음의 2개의 서블릿을 작성 : FrontServlet, NextServlet

    -http://localhost:8080/firstweb/front 

    위의 url이 호출되면 FrontServlet이 실행됨

    FrontServlet에서는 랜덤한 주사위 값을 구하고, 그 값을 NextServlet에게 forward

    NextServlet에서는 FrontServlet으로 부터 전달받은 주사위 값만큼 "hello"를 출력

     

    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;
    
    /**
     * Servlet implementation class FrontServlet
     */
    @WebServlet("/front")
    public class FrontServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public FrontServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
         */
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                
                int diceValue = (int)(Math.random() * 6) + 1; 
                request.setAttribute("dice", diceValue);
                
                RequestDispatcher requestDispatehcer = request.getRequestDispatcher("/next");
                requestDispatehcer.forward(request, response);
        }
    
    }

    request.setAttribute("dice", dicavValue); // "이름" , 저장할값

    RequestDispatcher requestDispatchar = request.getRequestDispatcher("/next"); //인자값 어디로 이동할거야?
    requestDispatchar.forward(request, response); //처음 요청할떄 받아왔던  request reponse 객체를 반드시 넘겨줘

     

    NextSevlet.java 실행할때 넘겨줄 servlet

    
    
    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;
    
    /**
     * Servlet implementation class NextServlet
     */
    @WebServlet("/next")
    public class NextServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public NextServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
    	/**
    	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
    	 */
    	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);
    	        for(int i = 0; i < dice; i++) {
    	            out.print("<br>hello");
    	        }
    	        out.println("</body>");
    	        out.println("</html>");
    	}
    
    }

    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);

      for(int i = 0; i < dice; i++) {

          out.print("<br>hello");

      }

      out.println("</body>");

      out.println("</html>");

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading