1. Servlet
사용자의 어느 요청을 처리하여 응답을 하는 MVC모델.
자바는 서블릿을 활용하여 클라이언트의 요청을 응답을 한다.
클라이언트 요청에 따라 서블릿 컨테이너는 service() 메서드를 호출하고, service() 메서드는 요청이 GET인지 POST인지 구분하여 각각 doGet(), doPost() 메서드를 호출한다.
1) GET 방식
서버에 있는 정보를 가져오려고 설계된 방법으로, 서버에는 최대 240Byte까지 데이터를 전달할 수 있다.
URL이 노출되기 때문에 보안에 문제가 생길 수 있다.
2) POST 방식
서보로 정보를 올리려고 설계된 방법으로, 서버에 전달할 수 있는 데이터 크기에 제한이 없다.
URL에는 매개변수가 표시되지 않는다.
이 서블릿 클래스는 자바 내에서 HttpServlet 클래스를 통해 구현이 된다.
오늘은 HttpServlet 클래스에 대해 알아보려 한다!
2. HttpServlet 클래스 이해하기
HttpServlet 클래스에서 사용자 요청을 처리하는 doGet/doPost 메서드는 모두 HttpServletRequest와 HttpServletResponse 객체를 매개변수로 가지고 있다.
또한 HttpServletRequest와 HttpServletResponse 객체는 서블릿과 클라이언트 사이를 연결해주는 중요한 객체들이다.
에를 들어 우리가 어느 페이지를 호출했다.
이 페이지를 열어달라는 나의 응답에 프로그램이 위의 주소를 불러온 것이다.
그런데 내가 초록창에 검색을 해본 뒤 url 주소를 가져와보면 아래와 같다.
위의 url 주소는 어느 페이지의 주소가 아니라 search.naver 라는 명령어를 통해서 페이지를 불러온 것이다.
이렇게 명령어를 통해서 사용자의 응답을 처리하는 것이 MVC 패턴의 주요한 흐름이고 이것을 가능케하는 것이 HttpServlet을 활용한 컨트롤러의 생성이다.
우리는 이제 MVC 패턴 2를 사용하여 사용자의 요청에 따라 컨트롤러를 생성해 모델을 통해 비지니스 로직을 처리한 뒤 뷰를 선택하여 뷰를 보여주는 응답을 하는 것이다.
이것을 도와주는 클래스가 바로 DispatcherServlet 클래스이다(스프링에서 사용된다).
이제 HttpServlet 클래스를 사용하여 컨트롤러를 만들어보자.
3. HttpServlet 클래스 사용해보기
HttpServlet 클래스를 사용해보자!
먼저 Class 파일을 하나 생성해준다.
그리고 가장 먼저 해야 할 일!
바로 HttpServlet을 부모로 상속(extends)해주는 것이다.
이러면 이 클래스는 HttpServlet의 기능을 사용하는 컨트롤러의 역할을 수행하게 된다.
우린 이 컨트롤러를 사용해 wel.do 라는 명령어로 위의 사진과 동일한 페이지를 열게 할 것이다.
아마도 url은 http://localhost:9090/basic05_mvc/wel.do이 나올 것이다.
1) 명령어 등록시키기
그렇다면 이 명령어를 인식시키기 위해선 명령어를 등록시켜야 할 것이다.
어디에 등록을 시켜야 하냐면 web.xml에 등록해야한다.
(스프링 프레임워크에서는 이 과정도 간소화되어있다)
이 등록 코드는 크게 두 가지로 나눠져 있다.
<servlet>과 <servlet-mapping>.
servlet에서는 실행될 컨트롤러가 담겨있는 클래스를 담는다.
servlet-mapping에서는 명령어를 등록해준다.
그리고 각각의 이름을 동일하게 지정하여 짝꿍처럼 함께 기능하게 해준다.
<servlet>
<servlet-name>kim</servlet-name>
<servlet-class>net.control.Welcome</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>kim</servlet-name>
<url-pattern>/wel.do</url-pattern>
</servlet-mapping>
2) 클래스에서 컨트롤러 구현하기
이제 클래스로 넘어오자.
클래스에서 가장 먼저 해야할 일은 HttpServlet의 매서드인 doGet() 과 doPost()를 오버라이드 하는 것이다.
여기서 HttpServletRequest req, HttpServletResponse resp에 주목해보자.
사용자가 요청한 값은 HttpServletRequest req가 갖고 있다.
그리고 사용자에게 응답할 값은 HttpServletResponse resp가 갖게 된다.
req는 모델 1 방식의 내부객체 requset와 동일하고 resp는 모델 1 방식의 내부객체 response와 동일하다
가장 처음에서도 설명했듯 사용자의 요청은 get 또는 post 방식으로 요청이 된다.
그것을 doGet()과 doPost() 메서드가 처리해주는 것으로 이해하면 된다.
그래서 이 두 함수를 꼭 오버라이딩 해야지 컨트롤러로서 기능할 수 있게 된다.
이제 컨트롤러 기능을 만들어보자.
try 문 안에서 만들 예정이다.
① HTML 문서 구조로 응답시키기
resp.setContentType("text/html; charset=UTF-8");
② 요청한 사용자에게 응답하기 위한 출력 객체 만들기
PrintWriter out = resp.getWriter();
③ out 객체에 HTML 문서를 담기
out.print(" <!DOCTYPE html> ");
out.print(" <html> ");
out.print(" <head> ");
out.print(" <meta charset='UTF-8'> ");
out.print(" <title>환영합니다</title> ");
out.print(" </head> ");
out.print(" <body> ");
out.print(" <strong>대한민국</strong> ");
out.print(" <hr> ");
out.print(" <span style='color: red;'>오필승코리아</span> ");
out.print(" <hr> ");
out.print(" <table border='1'> ");
out.print(" <tr> ");
out.print(" <th>이름</th> ");
out.print(" <td>무궁화</td> ");
out.print(" </tr> ");
out.print(" </table> ");
out.print(" </body> ");
out.print(" </html> ");
이렇게 하고 보니.. 뷰단의 구성이 어마어마하게 불편하다.
그렇다고 JSP 방식으로만 페이지를 구성하려고 하다보니 백단을 스크립트릿으로 코드를 짜다가 스파게티 코드들이 어마무시하게 생기게 된다.
그래서 이 둘을 적절히 활용하기도 하고, 스프링 프레임워크를 통해 더 간단하게 구현을 하는 것이다.
자, 아무튼 코딩은 끝났다.
이제 명령어를 사용하여서 페이지를 띄워보자!!
'⁂ JSP > : 기본 익히기' 카테고리의 다른 글
[JSP] #12-3 MVC의 디자인 패턴 (0) | 2022.10.27 |
---|---|
[JSP] #12-2 Sevlet의 생명주기(LifeCycle) (0) | 2022.10.27 |
[JSP] #11-5 JSTL 제어문 (0) | 2022.10.26 |
[JSP] #11-4 JSTL(JSP Standard Tag Library, JSP전용태그) (0) | 2022.10.26 |
[JSP] #11-3 EL(Expression Language) - 내장 객체 (0) | 2022.10.26 |