서블릿이란?
JSP가 나오기 이전에 선마이크로시스템즈에서 동적인 웹페이지 콘텐츠를 생성하는 기술로 제공되었다. 그래서 항상 JSP(2.3)보다는 서블릿(4.0)의 버전이 높다. 서블릿도 앞장에서 배운 JSP와 마찬가지로 웹페이지에서 호출을 하여 실행결과를 브라우저를 통해서 제공한다. 그러나 서블릿은 자바의 많은 장점들을 사용할 수는 있지만 HTML, CSS, 자바스크립트 그리고 웹디자인과 연동하기에는 많은 단점이 있어 Sun에서 JSP를 새롭게 만들어 제공하게 되었다.
그러나 이러한 문제점이 있는 서블릿이 없어지지 않고 계속적으로 존재할 수 있는 이유는 크게 두가지가 있다. 첫 번째는 JSP에는 없는 서버 측 프로그램의 기능이 있다는 점과 두 번째는 대기업에서 사용하는 프레임워크의 기초 기술로 사용된다는 점이다. 그리고 서블릿과 비슷하지만 다른 점이 있는 애플릿은 클라이언트 브라우저에서 호출이 되면 클래스 파일이 클라이언트 PC로 다운로드되어 실행되는 클라이언트 측 프로그램이고 서블릿은 브라우저에서 호출이 되면 WAS(Tomcat)에서 웹페이지를 동적으로 생성하여 결과를 전송해 주는 프로그램이다.
이클립스로 서블릿 만들기
1. ch08 패키지 생성 후 안에 Servlet 생성
2. Class name 입력 후 Next 클릭

3. URL mapping 더블클릭 후 다음과 같이 입력값 변경 후 Next 클릭

4. 다음과 같이 옵션 선택 후 Finish 클릭

ExampleServlet01.java
package ch08;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@WebServlet("/ch08/ExampleServet01")
public class ExampleServet01 extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
//html 시작
out.println("<html>");
out.println("<body>");
out.println("<h1>이클립스로 서블릿 만들기</h1>");
out.println("</body>");
out.println("</html>");
//html 끝
}
}
출력 결과

서블릿의 주요 클래스
HttpServlet
서블릿을 만들기 위해 반드시 상속해야 할 필수 클래스이다. 존재 목적 자체가 서블릿을 만들기 위해서 제공되는 클래스.
HttpServlet 상속 구조도
Servlet(인터페이스) - GenericServlet(추상클래스) - HttpServlet
이러한 상속 구조도 때문에 Servlet, GenericServlet 그리고 HttpServlet에서 제공되는 많은 메서드를 사용할 수 있다.
HttpServlet에서 제공되는 주요 메서드
| 메서드 | 설명 |
| void init() | 서블릿의 객체가 생성 될 때 호출되는 메서드 |
| void destroy() | 서블릿의 객체가 메모리에서 사라질 때 호출되는 메서드 |
| void service(request, response) | 서블릿의 요청이 있을 때 호출되는 메서드 |
| void doGet(request, response) | html에서 form의 메서드가 get일 때 호출되는 메서드 |
| coid doPost(request, response) | html에서 form의 메서드가 post일 때 호출되는 메서드 |
HttpServletRequest
클라이언트가 데이터를 입력하거나 또는 클라이언트의 정보에 대한 요청 값을 가지고 있는 클래스.
HttpServletRequest에서 제공되는 주요 메서드
| 메서드 | 설명 |
| String getParameter(name) | name에 할당된 값을 반환하며 지정된 파라미터 값이 없으면 null 값을 반환 |
| String[] getParameterValues(name) | name의 모든 값을 String 배열로 반환 |
| Enumeration getParameterNames() | 요청에 사용된 모든 파라미터 이름을 java.util.Enumeration 타입으로 반환 |
| void setCharacterEncoding(env) | post 방식으로 요청된 문자열의 character encoding을 설정 |
HttpServletResponse
클라이언트가 요청한 정보를 처리하고 다시 응답하기 위한 정보를 담고 있는 클래스.
HttpServletResponse에서 제공되는 주요 메서드
| 메서드 | 설명 |
| void setHeader(name, value) | 응답에 포함될 Header 설정 |
| void setContentType(type) | 출력되는 페이지의 contentType을 설정 |
| String getCharacterEncoding() | 응답 페이지의 문자 인코딩 Type을 반환 |
| void sendRedirect(url) | 지정된 URL로 요청을 재전송 |
HttpSession
클라이언트가 세션 정보를 저장하고 세션 기능을 유지하기 위해서 제공되는 클래스.
HttpSession에서 제공되는 주요 메서드
| 메서드 | 설명 |
| String getId() | 해당 세션의 세션ID를 반환 |
| long getCreationTime() | 세션의 생성된 시간을 반환 |
| long getLastAccessedTime() | 클라이언트 요청이 마지막으로 시도된 시간을 반환 |
| void setMaxInactiveInterval(time) | 세션을 유지할 시간을 초단위로 설정 |
| int getMaxinactiveInterval() | setMaxInactiveInterval(time)로 지정된 값을 반환 |
| boolean isNew() | 클라이언트 세션 ID를 할당하지 않은 경우 true 값을 반환 |
| void invalidate() | 해당 세션을 종료 |
서블릿의 라이프 사이클
서블릿은 클라이언트가 브라우저에서 서블리승로 요청을 하면 해당 서블릿은 언제 객체가 만들어지고 언제 기존에 객체를 재활용하고 언제 종료가 되는지 따른 라이프 사이클이 존재한다.
- init() : 서블릿이 처음으로 요청 되어 객체가 생성될 때 호출되는 메서드
- service() : 클라이언트가 요청이 있을 때마다 호출되는 메서드
- destroy() : 서블릿 서비스의 종료 및 재시작 그리고 서블릿 코드가 수정이 될 때 호출되는 메서드
- doGet() : 클라이언트 요청할 때 form의 method가 get 방식일 때 호출되는 메서드
- doPost() : 클라이언트 요청 할 때 form의 method가 post 방식일 때 호출되는 메서드
클라이언트 서블릿 요청 > init(최초 한번 호출) > service, doGet, doPost(반복적 호출) > destroy(마지막 한번 호출)
ExampleServlet02.java
package ch08;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletConfig;
@WebServlet("/ch08/ExampleServlet02")
public class ExampleServlet02 extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init 호출");
}
@Override
public void destroy() {
System.out.println("destroy 호출");
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("service 호출");
}
}
브라우저 실행시 결과
브라우저에는 아무런 출력 내용 없음
이클립스 콘솔 출력 결과
서블릿 예제 실행
init 호출
service 호출
브라우저 새로고침
service 호출 // 새로고침할 때마다 출력
이클립스 톰캣 서버 종료
destroy 호출
'Web Programming > JSP' 카테고리의 다른 글
| [JSP] 서블릿에서 세션 사용하기 (0) | 2024.10.07 |
|---|---|
| [JSP] 서블릿의 요청 방식 (0) | 2024.10.07 |
| [JSP] 에러 처리 (0) | 2024.10.04 |
| [JSP] 예외 내부 객체 (0) | 2024.10.04 |
| [JSP] 서블릿 관련 내부 객체 (0) | 2024.10.04 |