{{위키데이터 속성 추적}}
{{다른 뜻 넘어옴|서블릿||서블렛}}
[[파일:JSPLife.png|섬네일|400px|JSP 파일의 수명.]]
'''자바 서블릿'''(Java Servlet)은 [[자바 (프로그래밍 언어)|자바]]를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, [[JSP]]가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.

자바 서블릿은 [[자바 EE]] 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.

비슷한 기술로는 [[펄]] 등을 이용한 [[공용 게이트웨이 인터페이스|CGI]], PHP를 [[아파치 웹 서버]] 프로세스에서 동작하게 하는 mod_php, [[마이크로소프트]]사의 IIS에서 동작하는 [[액티브 서버 페이지|ASP]] 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.

== 버전의 역사 ==
자바 서블릿 API는 1996년 5월 [[자바원]] 콘퍼런스에서 처음 공식 발표되었다.<ref>{{뉴스 인용 |last1=Freedman |first1=Matt |date=1996-06-26 |df=mdy |title=JavaOne conference report |url=https://www.javaworld.com/article/2077172/java-se/javaone-conference-report.html |website=[[JavaWorld]] |확인날짜=2018-07-27 |보존url=https://web.archive.org/web/20180726071907/https://www.javaworld.com/article/2077172/java-se/javaone-conference-report.html |보존날짜=2018-07-26 |url-status=dead }}</ref><ref>{{콘퍼런스 인용 |last1=Diwanji |first1=Pavani |last2=Connelly |first2=Dave |last3=Wagle |first3=Prasad |date=1996-05-29 |df=mdy |chapter=Java Server and Servlets |title=Servers and Server Extensions |conference=[[JavaOne]] 1996 |url=http://java.sun.com:80/javaone/javaone96/pres/ServExt.pdf |archiveurl=https://web.archive.org/web/20000816161328/http://java.sun.com/javaone/javaone96/pres/ServExt.pdf |archivedate=2000-08-16 |access-date=2020-08-20 }}</ref> 콘퍼런스 발표 이후 약 2개월 째 되던 날, 자바소프트 웹사이트에 최초 공개 구현체가 만들어졌다. 이것은 최초 알파 버전의 자바 웹 서버(Java Web Server, JWS. 코드명 ''Jeeves'')<ref>{{뉴스 인용 |last1=Chang |first1=Phil Inje |date=1997-07-01 |df=mdy |title=Interview: The Java Web Server team gives you the skinny |url=https://www.javaworld.com/article/2076980/interview--the-java-web-server-team-gives-you-the-skinny.html |website=[[JavaWorld]] |accessdate=2018-07-25 |보존url=https://web.archive.org/web/20180726071912/https://www.javaworld.com/article/2076980/interview--the-java-web-server-team-gives-you-the-skinny.html |보존날짜=2018-07-26 |url-status=dead }}</ref>였으며 1997년 6월 5일 최종 제품화되었다.<ref>{{뉴스 인용 |last1=Chang |first1=Phil Inje |date=1997-06-01 |df=mdy |title=Java Web Server ships! |url=https://www.javaworld.com/article/2076965/java-web-server-ships-.html |website=[[JavaWorld]] |accessdate=2018-07-25 |보존url=https://web.archive.org/web/20180726071909/https://www.javaworld.com/article/2076965/java-web-server-ships-.html |보존날짜=2018-07-26 |url-status=dead }}</ref>

서블릿1 사양은 Pavni Diwanji가<ref>{{웹 인용|title=Pavni Diwanji|url=https://www.fosi.org/people/pavni-diwanji/|website=Family Online Safety Institute|accessdate=12 November 2016|보존url=https://web.archive.org/web/20180726071809/https://www.fosi.org/people/pavni-diwanji/|보존날짜=2018-07-26|url-status=dead}}</ref> [[썬 마이크로시스템즈]]에서 일하는 동안 개발한 것으로, 버전 1.0은 1997년 6월 완성되었다. 버전 2.2를 기점으로 이 사양은 [[자바 커뮤니티 프로세스]]를 통해 개발되었다.

{| class="wikitable"
|+ 자바 서블릿 API 역사
! 서블릿 API 버전 !! 발표 !! 자바 플랫폼!! 중요한 변화
|-
| 서블릿 4.0 ||[https://jcp.org/en/jsr/detail?id=369 2017년 9월]|| JavaEE 8 || [[HTTP/2]]
|-
| 서블릿 3.1 || [http://jcp.org/en/jsr/detail?id=340 2013년 5월] ||  JavaEE 7 || 비차단 방식의 I/O, HTTP 프로토콜 업그레이드 구조
|-
| 서블릿 3.0 || [https://web.archive.org/web/20110806105927/http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html 2009년 1월] ||  JavaEE 6, JavaSE 6 || [[JSR]] 315,  Ajax 대응 비동기 지원, 어노테이션에 의한 개발편의성, web.xml 없는 개발 및 배포
|-
| 서블릿 2.5 || [https://web.archive.org/web/20080609055213/http://www.javaworld.com/javaworld/jw-01-2006/jw-0102-servlet.html 2005년 9월] ||  JavaEE 5 ,  J2SE 5.0 || [[JSR]] 154, Requires J2SE 5.0, supports annotations
|-
| 서블릿 2.4 || [https://web.archive.org/web/20080609055812/http://www.javaworld.com/jw-03-2003/jw-0328-servlet.html 2003년 11월]|| J2EE 1.4, J2SE 1.3|| [[JSR]] 154, web.xml uses XML Schema
|-
| 서블릿 2.3 || [https://web.archive.org/web/20080516235155/http://www.javaworld.com/jw-01-2001/jw-0126-servletapi.html 2001년 8월]|| J2EE 1.3, J2SE 1.2 || Addition of <code>Filter</code>s
|-
| 서블릿 2.2 || [https://web.archive.org/web/20080611155209/http://www.javaworld.com/jw-10-1999/jw-10-servletapi.html 1999년 8월]|| J2EE 1.2, J2SE 1.2 || Becomes part of J2EE, introduced independent web applications in .war files
|-
| 서블릿 2.1 || [https://web.archive.org/web/20080611083008/http://www.javaworld.com/jw-12-1998/jw-12-servletapi.html 1998년 11월]  ||  미규정 || First official specification, added <code>RequestDispatcher</code>, <code>ServletContext</code>
|- 
| 서블릿 2.0 || ||  JDK 1.1 || Part of Java Servlet Development Kit 2.0
|- 
| 서블릿 1.0 ||1997년 6월||        ||            
|}

== 아파치 톰캣 호환정보 ==
* {{언어링크|en}} [http://java.sun.com/products/jsp/tomcat/ Apache Tomcat]
* {{언어링크|en}} Tomcat is a free, open-source implementation of Java Servlet and JavaServer Pages technologies developed under the Jakarta project at the Apache Software Foundation. Sun adapts and integrates the Tomcat code base into the J2EE Reference Implementation. Tomcat is available for commercial use under the ASF license from the Apache web site in both binary and source versions.
* 4.X Release Build : Tomcat 4 is an implementation of the Java Servlet 2.3 specification.
* 3.3 Release Build : Tomcat 3.3 is an implementation of the Java Servlet 2.2 specification.
* {{언어링크|en}} [https://web.archive.org/web/20080517114843/http://jakarta.apache.org/downloads/binindex.html Tomcat is available at the Jakarta binary downloads page.]
* Tomcat 3 supports the Servlet 2.2 and JSP 1.1 specifications with minimum Java Version 1.1.
* Tomcat 4 supports the Servlet 2.3 and JSP 1.2 specifications with minimum Java Version 1.3.
* Tomcat 5 supports the Servlet 2.4 and JSP 2.0 specifications with minimum Java Version 1.4.
* Tomcat 6 supports the Servlet 2.5 and JSP 2.1 specifications with minimum Java Version 1.5.
* Tomcat 7 supports the Servlet 3.0 and JSP 2.2 specifications with minimum Java Version 1.6.

== 예제 ==
<syntaxhighlight lang="java">
import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletLifeCycleExample extends HttpServlet {

    private int count;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        getServletContext().log("init() called");
        count = 0;
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        getServletContext().log("service() called");
        count++;
        response.getWriter().write("Incrementing the count: count = " + count);
    }

    @Override
    public void destroy() {
        getServletContext().log("destroy() called");
    }

}
</syntaxhighlight>

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [https://web.archive.org/web/20100107143001/http://java.sun.com/products/servlet/download.html 자바 서블릿 다운로드 페이지]
* {{언어링크|en}} [https://web.archive.org/web/20080623193512/http://jcp.org/aboutJava/communityprocess/mrel/jsr154/index.html JSR-000154 JavaTM Servlet 2.5 Specification]

{{웹 인터페이스}}

{{전거 통제}}

[[분류:자바 플랫폼, 엔터프라이즈 에디션]]
[[분류:자바 플랫폼]]
[[분류:자바 사양 요청]]