서블릿
- 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스
- 다양한 클라이언트 요청에 의해서 동적인 콘텐츠(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 |