[7.12] 서블릿 시작
서블릿
- 웹 컨테이너에 의해서 관리되며, 다양한 클라이언트 요청에 의해서 동적인 콘텐츠로 응답 가능한
자바 기반의 웹 컴포넌트이다.
*특징
- 자바기반의 웹 컴포넌트로서 java 확장자를 갖는다.
- 클라이언트의 요청에 의해서 동적으로 실행된다. 따라서 다양한 클라이언트 요구사항을 처리 가능
- 클라이언트는 브라우저를 이용한 URL 지정을 통해 서블릿에 요청이 가능
- 서블릿의 응답결과는 일반적으로 HTML 형식으로 서비스됨. 따라서 자바 코드를 이용해서 클라이언트에 HTML 코드로 전송하는 추가 작업이 필요하다. 하지만, MVC 패턴을 적용하여 웹 어플리케이션을 개발한다면 서블릿이 아닌 JSP에서 HTML 코드를 작성하게 된다.
- 서블릿은 반드시 웹 컨테이너에 의해서 관리되며, 자바 스레드로 동작되기 때문에 효율적 사용이 가능
- MVC 패턴의 Controller 역할로서 서블릿이 사용됨
* 실습 - HelloServlet 작성
먼저, 프로젝트 설정부터 시작한다.
* Maven 기반의 웹어플리케이션 개발을 위한 프로젝트의 설정파일들
(1) pom.xml - Apache Maven Configuration
- (**대전제**) 이 파일의 단 한자라도 수정하면, 반드시 Maven Update
Project를 수행
(2) web.xml - Deployment Descriptor by Web Application Spec.
- (**대전제**) 이 파일이 수정되면, WAS를 restart 해야함
더불어서, Maven Update Project 겸해서 수행 (**)
(3) log4j2.xml - Configuration of log4j2
for DataSource, Spring Framework, JUnit Test framework,
Driver Spy, JDBC, and so forth ....
- 이미 잘 만들어진 다른 프로젝트의 파일을 가져다 쓰면 됨
- 프로젝트 설정 완료 후 패키지와 클래스 생성
- 서블릿 정보를 배치 지시자(web.xml)에 설정
배치 지시자란?
- 웹 어플리케이션의 설정 정보를 가진 xml 파일로서 WEB-INF 폴더에 저장됨. 웹 컨테이너는 배치 지시자 파일을 통해서 서블릿명과 서블릿 맵핑명, 초기 파라미터 및 필터 기능과 관련된 정보를 파악할 수 있다.
- 클라이언트가 브라우저에서 서블릿을 요청하는 URL 값을 다른 값으로 맵핑
- 초기 복잡한 URL 형식(보안에도 취약)에서 URL Mappings을 사용하는 방식으로 보완되었음
/URL 맵핑명으로 지정
- 서블릿에서 구현해야되는 메서드를 설정
기본 메소드로 doGet , doPost가 체크되어 있는데 언체크하고 service 체크
init, destroy, service 이 세가지는 서블릿 객체의 LifeCycle 메서드이다.
( do~는 전송방식이다. '브라우저에서 request를 보내면 이러한 방식으로 처리하겠다. '라는 의미 )
service 메서드는 무슨 방식으로 요청을 보내오든 무조건 호출된다. 그러므로 실습에서 service 메서드를 사용한다.
< 코드 설명 >
* 매개변수가 있으면 컨테이너가 어떤 매개변수를 넣어야할지 모름.
서블릿에서는 매개변수가 없는 기본 생성자 사용
public HelloServlet() {
super();
}
--> lombok 어노테이션 @NoArgsConstructor로 대체해서 작성하였음.
* 서블릿을 작성하기 위해서 반드시 HttpServlet 클래스를 상속 받는다.
HttpServlet -> 추상 클래스
Serializable 인터페이스를 implements 하고있으므로,
반드시 serialVersionUID 값을 받아야한다.
* @WebServlet("/Hello")
Servlet 2.5에서는 web.xml 파일에 URL 맵핑 정보를 지정했으나, Servlet 3.x에서는 어노테이션을 이용하여 URL 맵핑 정보를 지정할 수 있다.
* @Override
service 메소드를 오버라이딩 한다.
* try-catch 블럭을 사용하여, 예외처리를 해준다.
* 자원객체를 닫아주기 위해, @Cleanup 어노테이션을 사용했다.
서버 실행 & Run
결과