교육과정 기록/💻back-end

[7.12] 서블릿 시작

춘식이왔엉 2022. 7. 12. 22:28

서블릿

- 웹 컨테이너에 의해서 관리되며, 다양한 클라이언트 요청에 의해서 동적인 콘텐츠로 응답 가능한

자바 기반의 웹 컴포넌트이다.

*특징

- 자바기반의 웹 컴포넌트로서 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

 

결과