서블릿 기초 정리1
서블릿 작성
javax.servlet.Servlet 인터페이스를 통해 구현
서블릿 컨테이너가 서블릿에 호출할 메서드를 정의한 것이 Servlet 인터페이스
- 서블릿의 생명주기 관련 메서드
init(): 서블릿 컨테이너가 서블릿을 생성한 후 초기화 작업을 수행하기 위해 호출 -> 클라이언트 요청 처리 전 준비 작업 작성service(): 클라이언트가 요청할 때 마다 호출되는 메서드 -> 서블릿이 해야 할 일 작성destroy(): 서블릿 컨테이너가 종료되거나 웹 앱이 멈출 때, 또는 해당 서블릿을 비 활성화 시킬 때 호출 -> 확보한 자원을 해제하거나 데이터를 저장하는 등 마무리 작업 작성
- 기타 메서드
getServletConfig(): 서블릿 설정 정보를 다루는ServletConfig객체 반환 -> 서블릿 이름과 초기 매개변수 값, 환경정보getServletInfo(): 문자열을 반환 -> 서블릿을 작성한 사람에 대한 정보나 서블릿 버번, 권리 등
서블릿 배치 정보 작성
DD파일web.xml에 서블릿 배치 정보를 작성한다.
Note: web.xml파일은 웹 애플리케이션을 구성하는 웹 컴포넌트에 대한 구성 및 배치 정보를 제공하며, 웹 애플리케이션의 배포서술사(Deployment Descriptor;DD) 역할을 하는 XML 형식의 파일
<servlet>태그를 사용하여 서블릿 별명과 서블릿 클래스명을 설정
<!-- 서블릿 등록 -->
<servlet>
<servlet-name>Hello</servlet-name> <!-- Alias -->
<servlet-class>HelloWorld</servlet-class> <!-- Class_Name -->
</servlet>
<servlet-mapping>태그를 사용하여 서블릿과 URL을 매핑
<!-- 서블릿 URL 연결 -->
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
서블릿 구동 절차
- 클라이언트 요청이 들어오면 서블릿 컨테이너는 서블릿을 찾음
- 서블릿이 없다면, 서블릿 클래스를 로딩하고 인스턴스를 준비 후 생성자를 호출. 그리고 서블릿 초기화 메서드인
init()를 호출 - 클라이언트 요청을 처리하는
service()호출. service()에서 만든 결과를 HTTP 프로토콜에 맞추어 클라이언트에 응답- 서블릿 컨테이너를 종료하거나, 웹 애플리케이션을 종료 한다면, 서블릿 컨테이너는 종료되기 전에 생성된 모든 서블릿에 대해
destroy()호출
Welcome File
디렉토리의 기본 웹 페이지
DD파일web.xml의 <welcom-file-list> 태그를 사용하여 설정
이 태그의 하위 태그인 <welcome-file>에 웰컴 파일의 이름을 적어 넣어서 등록
웰컴 파일이 여러 개인 경우, <welcom-file-list>태그에 선언된 순서대로 찾음
GenericServlet
서블릿 클래스가 필요로 하는 init(), destroy(), getServletConfig(), getServletInfo()를 미리 구현하여 상속
서블릿을 만들 때 GenericServlet을 상속받는다면 service()만 구현하면 됨
public class ExampleServlet extends GenericServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
...
}
}
service()의 매개변수 중에서 ServletRequest객체는 클라이언트의 요청 정보를 다룰 때 사용
그 중 getParameter()는 GET이나 POST 요청으로 들어온 매개변수 값을 꺼낼 때 사용
request.getParameter("a");
ServletResponse 객체는 응답과 관련된 기능 제공
setContentType()으로 출력할 데이터의 인코딩 형식과 문자 집합을 지정.
response.setContentType("text/plain");
// 출력할 데이터가 텍스트이고 별도의 메타정보가 없음
setCharacterEncoding()은 출력할 데이터의 문자 집합을 지정.
기본값은 ISO-8859-1
response.setCharacterEncoding("UTF-8");
// 데이터를 출력할 때 유니코드 값을 `UTF-8` 형식으로 변환
getWriter()는 출력 스트림 객체를 반환. 이미지나 동영상과 같은 바이너리 데이터를 출력할 때는 getOutputStream()을 사용
PrintWriter writer = response.getWriter();
// `getWriter()`를 호출하기 전에 `setContentType()`나 `setCharacterEncoding()`을 먼저 호출
Servlet3.0 사양부터 @WebServlet 애노테이션을 사용하여 서블릿 배치 정보 작성 가능
서블릿의 URL 정보를 @WebServlet의 괄호 안에 기술
@WebServlet("/url")
댓글남기기