이전 까지는 각각 하나의 jsp로 servlet을 주고 받는 형식으로 늘 servelt을 새로 만들어주었다.
너무 번잡해지고 MVC 모델 패턴을 하는데 있어 효율적이지 않아 앞으로는 Servlet 하나로만 작업하기 위해 방법을 알아보았다.
먼저 생성하는 방법은 똑같지만, 통상적으로 서블릿 네임은 Controller 라고 한다.
Controller.java ( 서블릿)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | 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; // * : 에스테리스크 -> 전체(all) // .do로 끝나는 요청 다받겠다. @WebServlet("*.do") public class Controller extends HttpServlet { private static final long serialVersionUID = 1L; public Controller() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request, response); // request 매개변수는 요청과 관련된 데이터를 들고온다. // response는 응답에 대한 모든 변수가 들어있다. } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doProcess(request, response); } // doProcess는 request, response 매개변수가 없기 때문에 위의 doPost, doGet에 있는 모든 매개변수를 복사 붙여넣기. public void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ //한글 요청 request.setCharacterEncoding("UTF-8"); response.setContentType("text/html; charset=UTF-8"); //어떤 페이지에서 요청이 왔는지 확인 String requestURI = request.getRequestURI(); String contextPath = request.getContextPath(); String command = requestURI.substring(contextPath.length()); System.out.println("command = " + command); //command가 어디서 왔는지 정보를 알고있다. //응답 페이지 (보여줘야 할 페이지) String page = ""; // first.jsp에서 들어왔을 떄 if(command.equals("/firstToSecond.do")) { //할거한다 page = "second.jsp"; } // second.jsp에서 서블릿 실행됐을 때 if(command.equals("/secondToThird.do")) { //할거한다 page = "third.jsp"; } //getRequestDispatcher( ) 에 원래 " "열로 jsp파일을 직접치는데, if에서 변수를 지정해줘 넣는다. RequestDispatcher dispatcher = request.getRequestDispatcher(page); dispatcher.forward(request, response); } } | cs |
14줄의 @WebServlet("*.do") 가 매우 중요한 부분이다.
JSP에서 form이나 a 태그를 이용해 넘겨준 .do를 이용한 모든 요청을 받겠다는 뜻이다.
36번째 줄의 doProcess 메소드를 새로 생성해주었고, doGet과 doPost에는 doProcess 메소드를 받아왔다.
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
doProcess 메소드 시작부분에 먼저 위 코드를 삽입하여 한글이 깨지지 않도록 인코딩 타입을 설정해주었다.
RequestDispatcher dispatcher = request.getRequestDispatcher(page);
dispatcher.forward(request, response);
그리고 맨 아랫 줄에는 서블릿 데이터를 다시 jsp에 넘겨줄 request.getRequestDispatcher(page); 를 설정해주었다.
이때, page는 String page = ""; 에서 받아올 값을 대체한다.
first.jsp
1 2 3 4 5 6 7 8 9 10 11 12 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <a href="firstToSecond.do">첫번째 페이지</a> </body> </html> | cs |
첫번째 페이지이다. body 태그 밑에 a태그 href이 "firstToSecond.do" 로 감싸져있다.
즉, Servlet 파일의 doProcess 메소드 안에 있는 53번째 줄, if(command.equals("/firstToSecond.do")) 가 실행된다.
이후 page 값을 "second.jsp" 로 바꿔주면서 아래 있는 RequestDispatcher 에 있는 page로 인해 페이지 이동한다.
second.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 두번째 페이지 입니다. <a href="secondToThird.do"> 세번째 페이지로 이동</a> </body> </html> | cs |
첫번째 페이지에서와 같은 형태로, if(command.equals("/secondToThird.do")) 로 이동해 다시 세번째 페이지로 이동시킨다.
third.jsp
1 2 3 4 5 6 7 8 9 10 11 12 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 세번째 페이지 입니다. </body> </html> | cs |
MVC 패턴을 이용해 본격적으로 화면 구상을 하기전 Servlet의 doProcess에 대해서 알아보았다.
굉장히 간단하고, 쉬워서 웹 개발하며 관리하기에도 유용할것 같다.
'✨ Back-end > Servlet' 카테고리의 다른 글
[Servlet / JSP] 게시판 만들기 -2 (글 수정U, 글 삭제D) CRUD (0) | 2023.02.18 |
---|---|
[Servlet / JSP] 게시판 만들기 -1 (글 쓰기R, 글 등록C) CRUD (0) | 2023.02.18 |
[Servlet] JSP, Servlet, Class 사용하여 이름, 나이, 성적 간단히 출력 (0) | 2023.02.14 |
[Servlet] 회원가입 폼 Sevlet 여러개로 JSP 왔다갔다하기 (0) | 2023.02.14 |
[Servlet] 프로젝트 중 톰캣(tomcat) 버전 변경하는 방법 (0) | 2023.02.14 |
댓글