주난v 개발 성장기

웹 어플리케이션 아키텍쳐(Head First Servlet & JSP) 본문

개발 성장기/Servlet

웹 어플리케이션 아키텍쳐(Head First Servlet & JSP)

주난v 2019. 11. 16. 20:06

학습목표

서블릿의 생명주기, 목적에 대한 설명이 가능하다.

새로운 도구 Container 등장!

서블릿은 '그'의 도움이 필요하다.

1. 요청이 들어오면 누군가 서블릿을 초기화해서, 요청을 처리할 새로운 스레드를 만들어야한다.
2. HttpServletRequest, HttpServletResponse를 생성하여 넘겨준다.
3. 서블릿의 doPost() or doGet()을 호출
4. 서블릿 생성, 소멸에 대한 자원 관리

 

컨테이너 (ex. Tomcat)

* Apache (웹 서버)가 사용자로부터 서블릿에 대한 요청을 받으면, 컨테이너에게 이 요청을 넘긴다.

 

컨테이너의 혜택

1. 커뮤니케이션 지원
* 웹 서버와 서블릿이 통신할 수 있는 API 제공
2. 생명주기 관리
* 서블릿의 탄생과 죽음(가비지 컬렉션 진행)을 모두 관리
* 서블릿 클래스 로딩 > 인스턴스 화 > 초기화 메소드 호출
3. 멀티 스레딩 지원
* 요청이 들어올 때 마다 새로운 스레드 생성
* 다중 요청 생성 및 운영에 대해서 전적으로 해줌
4. 보안 관리
5. JSP 지원

 

Tip) 스레드 작업이 끝나면, 컨테이너는 Response 객체를 HttpResponse로 전환하여
클라이언트에게 내려보내고, Request, Response를 소멸시킨다.

 

xml에 URL Servlet Mapping

컨테이너는 URL을 가지고 서블릿(url-pattern)을 찾는다.
모든 서블릿은 HttpServlet을 상속받는다.

<servlet>
    <servlet-name>Internal name1</servlet-name>
    <servlet-class>foo.servlet1</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>Internal name1</servlet-name>
    <url-pattern>/public</url-pattern>
</servlet-mapping>

서블릿 단점

코드가 너무 지저분해짐..JSP 도입(좀 더 객체지향으로..코드와 화면을 분리) ==> MVC
MVC의 핵심은 비즈니스 로직과 화면의 분리

정리

  1. Request, Response 객체 생성, 소멸 : Container

  2. Service() 메소드 호출 : Container

  3. 요청을 처리하기 위한 새로운 스레드 생성 : Container

  4. Response 객체를 HttpResponse로 전환 : Container

  5. Http를 이해하고 있어야 한다. : 웹 서버

  6. Response객체에 HTML을 내려보낸다 : Servlet

  7. Response에 대한 참조가 있다. : Container, Servlet