Purple Bobblehead Bunny

Backend/JSP SERVLET

[Servlet] 서블릿 이해

준영어린이 2022. 7. 4. 16:21

 

서블릿

  • 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
  • 다양한 클라이언트 요청에 의해서 동적인 콘텐츠(content)로 응답 가능한 자바 기반의 웹 컴포넌트
  • 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 작업한 후 웹 브라우저에 결과 전송
  • 서버에서 실행이 되기 때문에 보안과 관련된 기능도 안전하게 작업 가능

서블릿 웹 컴포넌트 특징

  • 자바 기반의 웹 컴포넌트로서 java 확장자를 가짐
  • 클라이언트의 요청에 의해 동적으로 실행(다양한 클라이언트 요구 사항을 처리 가능)
  • 클라이언트는 브라우저를 이용한 URL 지정을 통해 서블릿에 요청 가능
  • 서블릿의 응답 결과는 일반적으로 HTML 형식으로 서비스(자바 코드를 이용해 클라이언트에 HTML 코드로 전송하는 추가 작업 필요)
  • MVC 패턴을 적용해 웹 어플리케이션을 개발한다면, 서블릿이 아닌 JSP에서 HTML 코드를 작성
  • 서블릿은 반드시 웹 컨테이너에 의해 관리되며, 자바 스레드로 동작되기 떄문에 효율적으로 사용 가능
  • MVC 패턴의 Controller 역할로서 서블릿이 사용

 


 

Servlet Life Cycle(서블릿 생명 주기)

 

  • init() - 단 한번만 호출이 된다.
    • 웹 컨테이너에 의해서 서블릿 인스턴스가 처음 생성될 때, 단 한번 ㅊ호출
    • 서블릿에서 필요한 초기화 작업 시 주로 사용
  • service() - init() 메서드가 service() 메서드를 호출한다.
    • 사용자의 요청에 따라 스레드 단위로 실행되는 메서드(여러번 실행)
    • 각각 service() 메서드를 통해서 doGet(), doPost() 메서드가 호출이 된다,
    • 파라미터인 HttopServletRequest와 HttpServletResponse를 통해 사용자의 요청을 처리
    • 클라이언트가 원하는 동적인 처리 작업 시 필요
  • destroy() - 서블릿이 종료 요청이 오면 한 번만 호출되는 메서드
    • 서블릿이 종료되면서 정리할 작업이 있으면 destroy() 메서드를 오버라이딩(재정의) 해서 구현을 한다.

 


Servlet 응답 처리

  • 클라이언트에서 서블릿으로 요청을 하면 서블릿은 처리한 결과를 html 형식으로 응답 처리
  • 실제로 MVC패턴을 적용한 웹 어플리케이션 개발에서는 jsp에서 응답 처리를 담당
  • 서블릿에서 응답 처리와 관련된 API는 'HttpServletResponse'

 

  • response.setContentType("text/html; charset=EUC-KR")
    • 클라이언트인 웹 브라우저에게 처리할 데이터의 MIME 타입을 알려주는 메서드
    • 기본은 일반 텍스트를 의미하는 'text/plain'
    • 실습에서는 html 형식의 전송이므로 'text/html'로 지정
    • 한글 처리를 위해 'charset=EUC-KR'을 추가 지정
  • response.getWriter()
    • 서블릿 및 JSP를 이용한 응답 처리는 기본적으로 자바 I/O 기술 이용
    • 자바 출력을 위한 OutputStream 또는 Writer 클래스 사용
    • 서블릿에서는 getWriter() 메서드를 이용한 PrintWriter와 getOutputStrea() 메서드를 이용한 ServletOutputStream 클래스 사용
    • 문자 데이터를 처리하기 위해 PrintWriter 이용
    • 바이너리(binary)데이터를 위해서 ServletOutputStream 클래스 사용

 


Mapping

  • 서블릿의 @WebServlet("/URL") 어노테이션을 사용한 매핑
    • 서블릿 매핑명만 지정하는 방식                                                                                                                                   @WebServlet("/맵핑명")                                                                                                                                                  public class MyServlet extends HttpServlet{...}                                                                                                       
    • 추가 속성을 이용하는 방식
      • 서블릿 별명과 urlPatterns 속성을 사용하여 여러 개의 맵핑명을 지정할 수 있는 방식                                         @WebServlet(name="서블릿 별명", urlPatterns={"/맵핑명","/맵핑명"} )                                                                 public class MyServlet extends HttpServlet{...}                                                                                                       
      • 여러 개의 맵핑명을 지정할 수 있는 다른 방식은 value 속성을 사용                                                                   @WebServlet(name="서블릿별명", value={ "/맵핑명","/맵핑명2"} )                                                                       public class MyServlet extends HttpServlet{...}
  • web.xml을 통한 매핑
    • WEB-INF 폴더 안의 web.xml 파일에 <servlet> 태그와 <servlet-mapping> 태그를 사용하여 설정
    • 여러 개의 서블릿 등록이 가능하며 주의할 점
      • url-pattern 값에는 임의의 값으로 지정 가능하지만, 반드시 '/'를 사용
      • <servlet> 태그의 <servlet-name> 값과 <servlet-mapping> 태그의 <servlet-name> 값도 임의의 값으로 지정 가능하지만, 반드시 일치해야 함

 

'Backend > JSP SERVLET' 카테고리의 다른 글

[JSP] webapp, WEB-INF  (0) 2022.07.27
[Servlet] doGet, doPost  (0) 2022.07.04
[JSP] JDBC  (0) 2022.07.02
[Servlet]MVC Pattern  (0) 2022.07.01
[JSP] 쿠키, Cookie  (0) 2022.06.30