[JSP] Controller의 완성

    Controller의 완성

     

    목차

       

       

        Controller

       MVC 패턴 중, Controller에 해당됩니다.

      JSP에서의 처리를 Java가 대신해주며, 이를 Servlet이라고 부릅니다.

      그리고 각 Service에 맞게 나뉘어 작업을 관리한다고 하여 Controller라는 명칭이 붙었습니다.

       

      [Web/JSP] - [JSP] Servlet이란?

       

       지난 시간에는 JSP에서 Java의 호출에 대해 다뤘습니다.

      이번 시간에는 Java에서의 호출에서 JSP의 호출을 다루도록 하겠습니다.

       

       

       

        Servlet에서 Jsp 호출 방법

       

      1. RequestDispatcher 방식

      servlet
      Servlet에서 jsp로 호출하는 대표적인 방법

      Servlet에서 JSP로 이동 방식은 대표적인 방법입니다.

      jsp에서 forward 방식으로 불리우며, 가장 많이 쓰이는 방법입니다.

       

       

      2. Redirect 방식

      redirect
      Servlet에서 jsp를 호출하는 방법

      두 번째는 Redirect 방식입니다. 이는 두 번째로 가장 많이 쓰이는 방법입니다.

      이 둘의 차이점은 아래에서 계속 진행하겠습니다.

       

       

        JSP 불러오기

      servlet jsp 불러오기
      jsp는 WebContent를 기준으로 설정한다.
      main.do를 불렀을 때 ,test.jsp가 호출되는 것을 확인할 수 있다.

       

      jsp의 호출은 보통 WebContent 폴더를 기준으로 잡습니다.

      만약 폴더를 생성하여 넣으셨다면 경로의 문제가 생길 수 있습니다.

       

      그러므로 항상 URL을 살피면서 작업 진행을 하시는 것을 추천드립니다.

       

       

       

        Redirect와 Forward

      이제 이 Redirect와 Forward의 차이에 대해 설명드리도록 하겠습니다.

      둘의 차이는 request에 결정이 납니다.

      servlet
      test.jsp의 코드입니다.

      test.jsp는 위와 같이 간단한 코드로 작성되어 있습니다.

      request.getAttribute와 request.getParameter를 받도록 하였습니다.

       

       

       

       

      1. forward 호출

      redirect
      request.Parameter와 request.getAttribute 2개의 request 방식으로 호출 진행 방식입니다.
      forward의 결과 입니다.

      결과는 1번과 2번 모두 출력되는 것을 확인 할 수 있습니다.

       

      2.Redirect 호출

      dispatcher
      request.Parameter와 request.getAttribute 2개의 request 방식으로 호출 진행 방식입니다.

      redirect 방식은 request.getAttribute를 호출할 수 없는 것을 확인할 수 있습니다.

       

       

       

        Redirect 사용하는 이유

       여기서, 그렇다면 왜 Forward만 사용하지 않고 Redirect를 사용하는 이유를 알아보도록 하겠습니다.

       

      controller
      main.do를 이용할 경우, com.do가 실행된다.

      Controller에서 View (JSP)가 아닌, Controller의 재호출하기 위한 용도입니다.

       

      이 재활용 방식은 forward도 가능합니다.

      다만, 구분하기 쉬운 용도와 Spring에서의 활용이 있다보니 redirect 방식을 사용하기도 합니다.

       

       

       

        마무리

       이로써, Controller에 대해 모두 설명을 마쳤습니다.

      종종 redirect와 forward 방식에 대해 의문을 갖는 분들이 종종 계셔서 이 기회에 포스팅을 하게 되었습니다.

      forward와 redirect의 구분은 여러분들의 몫이며, 반드시 설명서처럼 사용할 필요는 없습니다.

       

       

       

      ▼ 관련 글

      [이전글] - [JSP] Servlet이란?

      [Web/JSP] - [JSP] 절대경로와 상대경로


       

      ▼  코드 보기

      package mollang;
      
      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("*.do")
      public class Mollang extends HttpServlet {
             
      	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      		System.out.println("반응");
      		
      		String uri = request.getRequestURI();
      		String context = request.getContextPath();
      		String command = uri.substring(context.length());
      		
      		System.out.println("1 : "+uri);
      		System.out.println("2 : "+context);
      		System.out.println("3 : "+command);
      		
      		
      		String result = null;
      		Boolean forward = false;
      		
      		if(command.equals("/main.do"))
      		{
      			System.out.println("/main 반응");
      			
      			result = "/servl/com.do";
      			forward = true;
      		} else if(command.equals("/com.do"))
      		{
      			System.out.println("com 반응");
      			result = "/test.jsp";
      			forward = false;
      		}
      		
      		request.setAttribute("test", "Love.");
      		if(forward)
      		{
      			response.sendRedirect(result);
      			
      		} else
      		{
      			RequestDispatcher dispatcher = request.getRequestDispatcher(result);
      			dispatcher.forward(request, response);
      		}
      		
      	}
      	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      		
      	}
      
      }
      
      반응형

      'Web > JSP' 카테고리의 다른 글

      [Jsp] web.xml으로 한글 인코딩하기  (0) 2021.06.03
      [JSP] userAgent  (0) 2021.05.24
      [JSP] Servlet이란?  (0) 2021.05.17
      [JSP] 절대경로와 상대경로  (0) 2021.05.14
      [JSP] WEB.XML은 무엇일까?  (0) 2021.05.13

      댓글

      Designed by JB FACTORY