Servlet
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 “서블릿”이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
자바 서블릿은 자바 EE 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.
비슷한 키술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소트프사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
Servlet 동작 흐름

Servlet API

Servlet 배포 (Deployment Descriptor)
web.xml
<servlet>
과 <servlet-mapping>
한 쌍
<load-on-startup></load-on-startup>
- 웹 어플리케이션이 시작될 때 서블릿이 즉시 실행
- 서블릿이 시작되는 순서 지정
<url-pattern>
- URL 경로 : ‘/’로 시작하는 /*
- 확장자 매칭: ‘.’로 시작하는 .확장자
- default servlet: /
- 정확한 경로와 이름 매칭: /basic
- 경로와 확장자를 함께하는 매칭은 지원 안함 : /basic/*.do
<servlet>
<description>My First Servelt</description>
<display-name>HelloServelt</display-name>
<servlet-name>helloServelt</servlet-name>
<servlet-class>com.ssafy.basic.HelloServelt</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
<url-pattern>*.ssafy</url-pattern>
</servlet-mapping>
@WebServlet
- servlet 3.0부터 web.xml 대신 Annotation을 사용하여 설정
- 한개의 URL 설정 : urlPatterns = “/hello” 또는 value = “/hello” 또는 @WebServlet(”/hello”)
- 여러 개의 URL 설정 : urlPatterns = {”/hello”, “*.ssafy”}
@WebServlet(
name = "helloServlet",
urlPartterns = {"/hello", "*.ssafy"},
loadOnStartup = 1
)
public class HelloServlet extends HttpServlet {
}
Servlet Life-Cycle
- Servlet class는 javaSE에서의 class와는 다르게 main method가 없다. 즉 객체의 생성부터 사용(method call)의 주체가 사용자가 아닌 Servlet Container에게 있다.
- Client가 요청(request)을 하게 되면 Servlet Container는 Servlet 객체를 생성(한번만)하고, 초기화(한번만) 하며 요청에 대한 처리(요청시마다 반복)를 하게 된다. 또한 Servlet 객체가 필요 없게 되면 제거하는 일까지 Container가 담당하게 된다.
method | description |
---|
init() | 서블릿이 메모리에 로드될 때 한번 호출. 코드 수정으로 인해 다시 로드 되면 다시 호출. |
doGet() | GET방식으로 data전송 시 호출. |
doPost() | POST방식으로 data전송 시 호출. |
service() | 모든 요청은 service()를 통해서 doXXX() 메소드로 이동. |
destroy() | 서블릿이 메모리에서 해제되면 호출. 코드가 수정되면 호출. |

Servlet Parameter
Parameter 전송 방식
| GET | POST |
---|
특징 | 전송되는 데이터가 URL뒤에 Query String으로 전달. 입력 값이 적은 경우나 데이터가 노출이 되도 문제가 없을 경우 사용. | URL과 별도로 전송. HTTP header 뒤 body에 입력 스트림 데이터로 전달. |
장점 | 간단한 데이터를 빠르게 전송. form tag뿐만 아니라 직접 URL에 입력하여 전송 가능. | 데이터의 제한이 없다. 최소한의 보안 유지 효과를 볼 수 있다. |
단점 | 데이터 양에 제한이 있다. (location bar(URL + parameters)를 통해 전송할 수 있는 데이터의 사이즈는 2kb(2048 byte)로 제한된다. | 전달 데이터의 양이 같을 경우 GET방식보다 느리다.(전송 패킷을 body에 데이터를 구성해야 하므로) |
URL
URL? QueryString? Parameter?
![업로드중..]()