자카르타 서블릿
Jakarta Servlet![]() |
원저작자 | 파브니 디완지 |
---|---|
개발자 | 이클립스 재단 |
초기 릴리즈 | 1996년 | , 전(
안정된 릴리스 | 5.0 / 2020년9월 , 전( |
저장소 | |
기입처 | 자바 |
플랫폼 | 자카르타 EE 9 |
크기 | 2.56 MB |
유형 | 웹 API용 소프트웨어 구성 요소 |
면허증. | 이클립스 퍼블릭 라이선스 |
웹 사이트 | jakarta |

Jakarta Servlet(이전 Java Servlet)은 서버의 기능을 확장하는 Java 소프트웨어 구성요소입니다.서블릿은 다양한 유형의 요청에 응답할 수 있지만 일반적으로 웹 서버에서 웹 애플리케이션을 호스팅하기 위한 웹 컨테이너를 구현하므로 서버 측 서블릿 웹 API로 인정됩니다.이러한 웹 서블릿은 PHP 및 ASP와 같은 다른 동적 웹 컨텐츠 기술에 대한 Java의 대응책입니다.네트워크
서론
자카르타 서블릿은 요청에 응답하는 Java 클래스를 구현하기 위한 표준인 자카르타 서블릿 [1]API를 준수하는 Java 클래스를 자카르타 EE에 처리하거나 저장합니다.서블릿은 원칙적으로 모든 클라이언트-서버 프로토콜을 통해 통신할 수 있지만 HTTP와 함께 가장 많이 사용됩니다.따라서 "servlet"은 종종 "HTTP servlet"[2]의 약어로 사용됩니다.따라서 소프트웨어 개발자는 서블릿을 사용하여 Java 플랫폼을 사용하여 웹 서버에 동적 콘텐츠를 추가할 수 있습니다.생성된 콘텐츠는 일반적으로 HTML이지만 XML 및 더 일반적으로 JSON 등의 다른 데이터일 수 있습니다.서블릿은 HTTP 쿠키 또는 URL 매핑을 사용하여 많은 서버 트랜잭션에서 세션 변수 상태를 유지할 수 있습니다.
Jakarta Servlet API는 어느 정도 웹 서비스를 위한 두 가지 표준 Java 기술로 대체되었습니다.
- 자카르타 RESTful Web Services(JAX-RS 2.0)는 AJAX, JSON 및 REST 서비스에 유용합니다.
- SOAP Web Services 에 도움이 되는 JAX-WS(Jakarta XML Web Services)를 참조해 주세요.
서블릿을 배포하고 실행하려면 웹 컨테이너를 사용해야 합니다.웹 컨테이너(서블릿 컨테이너라고도 함)는 기본적으로 서블릿과 상호 작용하는 웹 서버의 구성요소입니다.웹 컨테이너는 서블릿의 라이프 사이클을 관리하고 URL을 특정 서블릿에 매핑하며 URL 요청자가 올바른 액세스 권한을 가지고 있는지 확인합니다.
Java 패키지 계층에 포함된 Servlet APIjavax.servlet
는 웹 컨테이너와 [2]서블릿의 예상되는 상호작용을 정의합니다.
A Servlet
는 요구를 수신하고 해당 요구에 따라 응답을 생성하는 객체입니다.기본 서블릿 패키지는 서블릿 요청 및 응답을 나타내는 Java 개체와 서블릿의 구성 매개 변수 및 실행 환경을 반영하는 개체를 정의합니다.패키지javax.servlet.http
는 범용 서블릿 요소의 HTTP 고유의 서브클래스를 정의합니다.여기에는 웹 서버와 클라이언트 간의 여러 요구와 응답을 추적하는 세션 관리 오브젝트가 포함됩니다.서블릿은 WAR 파일로 웹 애플리케이션으로 패키지될 수 있습니다.
서블릿은 자카르타 서버 페이지 컴파일러에 의해 자카르타 서버 페이지(JSP)에서 자동으로 생성될 수 있습니다.서블릿과 JSP의 차이점은 보통 서블릿은 Java 코드에 HTML을 내장하고 JSP는 HTML에 Java 코드를 내장한다는 것입니다.서블릿을 직접 사용하여 HTML을 생성하는 경우는 드물지만 자카르타 EE(JSF)의 상위 레벨 MVC 웹 프레임워크는 여전히 하위 레벨 기술을 명시적으로 사용하고 있습니다.l 을 통한 요구/응답 처리FacesServlet
다소 오래된 사용법은 모델 뷰 컨트롤러의 플레이버인 '모델2'라고 불리는 패턴으로 서블릿을 JSP와 조합하여 사용하는 것입니다.
Servlet의 현재 버전은 5.0입니다.[3]
역사
Java Servlet API는 1996년 [4][5]5월 첫 JavaOne 컨퍼런스에서 처음 공개되었습니다.컨퍼런스의 발표로부터 약 2개월 후에, 최초의 공개 실장은 JavaSoft Web 사이트에서 이용할 수 있게 되었습니다.이것은 Java Web Server(JWS, 코드명 Jeeves)[6]의 첫 번째 알파로,[7] 최종적으로 1997년 6월 5일에 제품으로 출하될 예정입니다.
Sun의 베테랑이자 GlassFish의 리더인 Jim Driscoll은 java.net의 블로그에서 서블릿 [8]테크놀로지의 역사를 자세히 설명하고 있습니다.James Gosling은 Java 초기에 서블릿을 처음 생각했지만 Sun이 JWS를 [9][10][11]출하한 1996년 12월에야 제품이 되었다.이것은 현재의 자카르타 EE가 사양으로 만들어지기 전의 것입니다.
Servlet1 사양은 Pavni Diwanji가[12][13] Sun Microsystems에서 근무할 때 작성했으며 버전 1.0은 1997년 6월에 완성되었습니다.버전 2.2 이후, 이 사양은 Java Community Process에서 개발되었습니다.
Servlet API 버전 | 방출된 | 사양 | 플랫폼 | 중요한 변경 사항 |
---|---|---|---|---|
자카르타 서블릿 6.0 | 2021년 10월 15일 | 6.0 | 자카르타 EE 10 | 사용되지 않는 기능 제거 및 요청된 기능 향상 구현 |
자카르타 서블릿 5.0 | 2020년 10월 9일 | 5.0 | 자카르타 EE 9 | API가 패키지에서 이동됨javax.servlet 로.jakarta.servlet |
자카르타 서블릿 4.0.3 | 2019년 9월 10일 | 4.0 | 자카르타 EE 8 | 'Java' 상표에서 명칭 변경 |
자바 서블릿 4.0 | 9월 2017년 | JSR 369 | 자바 EE 8 | HTTP/2 |
자바 서블릿 3.1 | 도 될까 2013년 | JSR 340 | JavaEE7 | Non-blocking/O, HTTP프로토콜 업그레이드 메커니즘(WebSocket)[14]. |
자바 서블릿 3.0 | 2009년 12월 | JSR 315 | JavaEE6JavaSE6. | Pluggability, 발전이 Async 명세, 보안, 파일 Uploading. |
자바 서블릿 2.5 | 2005년 9월 | JSR 154 | Java EE 5, Java SE 5 | Java SE 5 필요, 주석 지원 |
Java Servlet 2.4 | 2003년 11월 | JSR 154 | J2EE 1.4, J2SE 1.3 | web.xml은 XML 스키마를 사용합니다. |
Java Servlet 2.3 | 2001년 8월 | JSR 53 | J2EE 1.3, J2SE 1.2 | 추가Filter |
Java Servlet 2.2 | 1999년 8월 | JSR 902, JSR 903 | J2EE 1.2, J2SE 1.2 | J2EE의 일부가 되어 .war 파일에 독립된 웹 어플리케이션이 도입됩니다. |
Java Servlet 2.1 | 1998년 11월 | 2.1a | 미지정 | 첫 번째 공식 사양 추가RequestDispatcher ,ServletContext |
Java Servlet 2.0 | 1997년 12월 | — | JDK 1.1 | 1998년 4월 Java Servlet 개발 키트 2.0 일부[15] |
Java Servlet 1.0 | 1996년 12월 | — | 1997년 6월 Java Servlet Development Kit(JSDK) 1.0 일부[9] |
서블릿의 라이프 사이클
서블릿의 라이프 사이클에는 세 가지 방법이 있습니다.이것들은init()
,service()
,그리고.destroy()
모든 서블릿에 의해 구현되며 서버에 의해 특정 시간에 호출됩니다.
- 서블릿 라이프 사이클의 초기화 단계에서 웹 컨테이너는 인터페이스를 구현하는 오브젝트를 전달하고 메서드를 호출함으로써 서블릿 인스턴스를 초기화합니다.이 설정 오브젝트를 통해 서블릿은 웹 응용 프로그램에서 이름 값 초기화 파라미터에 액세스할 수 있습니다.
- 초기화 후 서블릿인스턴스는 클라이언트 요구를 처리할 수 있습니다.각 요청은 자체 개별 스레드로 처리됩니다.웹 컨테이너는
service()
servlet 메서드를 지정합니다.그service()
method는 요청의 종류를 결정하고 요청을 처리하기 위해 적절한 방법으로 발송합니다.서블릿 개발자는 이러한 메서드에 대한 구현을 제공해야 합니다.서블릿에 의해 구현되지 않은 메서드에 대한 요구가 이루어지면 부모 클래스의 메서드가 호출되어 일반적으로 요청자에게 오류가 반환됩니다. - 마지막으로 웹 컨테이너는
destroy()
servlet을 아웃오브 서비스로 하는 메서드.그destroy()
메서드, 예를 들어init()
는, 서블릿의 라이프 사이클에 1 회만 호출됩니다.
이러한 방법의 일반적인 사용자 시나리오를 다음에 나타냅니다.
- 사용자가 URL 방문을 요청했다고 가정합니다.
- 그런 다음 브라우저는 이 URL에 대한 HTTP 요청을 생성합니다.
- 이 요청은 적절한 서버로 전송됩니다.
- HTTP 요청은 웹 서버에 의해 수신되어 서블릿컨테이너로 전송됩니다.
- 컨테이너는 이 요청을 특정 서블릿에 매핑합니다.
- 서블릿은 동적으로 검색되어 컨테이너의 주소 공간에 로드됩니다.
- 컨테이너에 의해
init()
servlet 메서드.- 이 메서드는 서블릿이 메모리에 처음 로드되었을 때만 호출됩니다.
- 초기화 파라미터를 서블릿에 전달하여 서블릿이 스스로 설정되도록 할 수 있습니다.
- 컨테이너에 의해
service()
servlet 메서드.- 이 메서드는 HTTP 요청을 처리하기 위해 호출됩니다.
- 서블릿은 HTTP 요청에서 제공된 데이터를 읽을 수 있습니다.
- 서블릿은 클라이언트의 HTTP 응답을 공식화할 수도 있습니다.
- 서블릿은 컨테이너의 주소 공간에 남아 클라이언트로부터 받은 다른 HTTP 요청을 처리하는 데 사용할 수 있습니다.
- 그
service()
메서드는 각 HTTP 요구에 대해 호출됩니다.
- 그
- 컨테이너는 어느 시점에서 서블릿을 메모리에서 언로드하기로 결정할 수 있습니다.
- 이 결정을 내리는 알고리즘은 각 컨테이너에 고유합니다.
- 컨테이너가 서블릿을 호출합니다.
destroy()
서블릿에 할당된 파일 핸들 등의 리소스를 포기하는 방법. 중요한 데이터는 영구 저장소에 저장할 수 있습니다. - 그러면 서블릿과 해당 개체에 할당된 메모리가 가비지 수집될 수 있습니다.
예
다음 예제에서는 서블릿의 출력 횟수를 보여 줍니다.service()
메서드가 호출되었습니다.
주의:HttpServlet
의 하위 클래스입니다.GenericServlet
, 의 실장Servlet
인터페이스입니다.
그service()
의 방법HttpServlet
클래스는 메서드에 요구를 디스패치합니다.doGet()
,doPost()
,doPut()
,doDelete()
HTTP 요구에 따라서, 등입니다.다음 예에서는service()
는 덮어쓰며 어떤 HTTP 요구 방식을 서비스하는지 구별하지 않습니다.
수입품 java.io 를 참조해 주세요.IOException(IOException); 수입품 jakarta.servlet.서블릿 구성; 수입품 jakarta.servlet.Servlet Exception(서블릿 예외); 수입품 jakarta.servlet.sublic.sublic.dHttp Servlet; 수입품 jakarta.servlet.sublic.sublic.dHttp Servlet Request(HttpServletRequest; 수입품 jakarta.servlet.sublic.sublic.dHttp Servlet Response; 일반의 학급 Servlet Life Cycle의 예 확장 Http Servlet { 사적인 정수 공유 카운터; @오버라이드 일반의 무효 초기화(최종 서블릿 구성 설정) 던지다 Servlet Exception(서블릿 예외) { 잘 하는 군요.초기화(설정); get Servlet Context().로그.("init() 호출됨"); 공유 카운터 = 0; } @오버라이드 보호되고 있다 무효 서비스(최종 Http Servlet Request(HttpServletRequest 부탁한다, 최종 Http Servlet Response 대답) 던지다 Servlet Exception(서블릿 예외), IOException(IOException) { get Servlet Context().로그.("service() 호출됨"); 인트 local Counter(local counter); 동기화된 (공유 카운터) { 공유 카운터++; local Counter(local counter) = 공유 카운터; } 대답.getWriter().쓰다("카운트를 "로 증가 + local Counter(local counter)); // 로컬 변수 액세스 } @오버라이드 일반의 무효 파괴하다() { get Servlet Context().로그.("called() 호출"); } }
컨테이너 서버
Servlet 기술 사양은 많은 제품에 구현되어 있습니다.웹 컨테이너 페이지에서 구현 목록을 참조하십시오.
SIP 서블릿 용기와 같은 다른 유형의 서블릿 컨테이너도 있습니다(예: SailFin).
레퍼런스
- ^ "Servlet (Java(TM) EE 7 Specification APIs)". oracle.com. Retrieved 2018-07-25.
- ^ a b "Servlet Essentials - Chapter 1". novocode.com. Archived from the original on 2017-12-18.
- ^ "Jakarta Servlet 5.0 the Eclipse Foundation".
- ^ Freedman, Matt (June 26, 1996). "JavaOne conference report". JavaWorld.
- ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (May 29, 1996). "Java Server and Servlets" (PDF). Servers and Server Extensions. JavaOne 1996. Archived (PDF) from the original on 2000-08-16. Retrieved 2020-02-01.
- ^ Chang, Phil Inje (July 1, 1997). "Interview: The Java Web Server team gives you the skinny". JavaWorld. Retrieved 2018-07-25.
- ^ Chang, Phil Inje (June 1, 1997). "Java Web Server ships!". JavaWorld. Retrieved 2018-07-25.
- ^ "Servlet History community.oracle.com". Weblogs.java.net. 2005-12-10. Retrieved 2013-06-14.
- ^ a b Hunter, Jason (March 2000). "Servlet Timeline". Beyond Java Servlet Programming. O'Reilly Conference on Java. O'Reilly Media.
- ^ "Java Web Server". Javasoft. Sun Microsystems. Archived from the original on 1998-01-11. Retrieved 2020-02-01.
- ^ "Java Web Server(tm)". Sun Microsystems. Archived from the original on 2002-02-06. Retrieved 2020-02-01.
- ^ "Pavni Diwanji". Family Online Safety Institute. Retrieved 12 November 2016.
- ^ 미국 특허 5928323, Gosling, James A;Diwanji, Pavni & Connelly, David W, "서버측 소프트웨어 객체를 사용하여 동적으로 정보를 생성하는 장치 및 방법", 1999-07-27 발행, 1999-07-27 발행, Sun Microsystems에 할당
- ^ "What's new in Servlet 3.1 ? - Java EE 7 moving forward (Arun Gupta, Miles to go ...)". oracle.com. Retrieved 22 November 2016.
- ^ Crawford, William; Hunter, Jason (November 1998). "Preface". Java Servlet Programming (1st ed.). O'Reilly Media. p. ix–x. ISBN 978-1-56592-391-1.
We cover Version 2.0 of the Servlet API, which was introduced as part of the Java Web Server 1.1 in December 1997 and clarified by the release of the Java Servlet Development Kit 2.0 in April 1998.