이 기사는 참조를위한 수명주기 및 서블릿 원리를 공유합니다. 특정 내용은 다음과 같습니다
서틀 수명주기는 세 단계로 나뉩니다.
1. 초기화 단계에서 init () 메소드를 호출하십시오
2. 고객 요청 단계에 대한 응답으로 서비스 () 메소드를 호출합니다.
3. 종료 단계에서 Destroy () 메소드를 호출하십시오
서블릿 초기화 단계 :
다음 순간에 서블릿 컨테이너가 서블릿을로드합니다.
1. 서블릿 컨테이너가 시작되면 일부 서블릿이 자동으로로드됩니다. 이를 구현하려면 web.xml 파일에서 <servlet> </servlet> 사이에 다음 코드 만 추가하면됩니다.
<loadon-startup> 1 </loadon-startup>
2. 서블릿 컨테이너가 시작된 후 클라이언트는 처음으로 서블릿에 요청을 보냅니다.
3. 서블릿 클래스 파일이 업데이트 된 후 서블릿을 다시로드하십시오.
서블릿이로드되면 서블릿 컨테이너는 서블릿 인스턴스를 생성하고 초기화를 위해 서블릿의 init () 메소드를 호출합니다. init () 메소드는 서블릿의 전체 수명 동안 한 번만 호출됩니다.
서블릿의 작동 방식 :
먼저 고객 요청을 받고 응답하는 과정을 간략하게 설명해 봅시다. 먼저 고객은 요청을 보냅니다. 서블릿은 서비스 () 메소드를 호출하여 요청에 응답합니다. 소스 코드를 통해 볼 수 있습니다. 서비스 () 메소드는 요청 메소드와 일치합니다. doget, dopost 및 기타 방법을 호출 한 다음 해당 메소드를 입력하여 논리적 계층 메소드를 호출하여 고객에 대한 응답을 실현하십시오. 서블릿 인터페이스 및 제네릭 서비스에는 doget, dopost 등과 같은 방법이 없습니다. 이러한 방법은 httpservlet에 정의되어 있지만 모두 오류 정보를 반환합니다. 따라서 서블릿을 정의 할 때마다 doget 또는 dopost와 같은 방법을 구현해야합니다.
각 사용자 정의 서플렛은 서블릿 인터페이스를 구현해야합니다. 서블릿 인터페이스에서 5 가지 방법이 정의되며, 그 중 세 가지 더 중요한 방법은 서블릿의 수명주기, 즉 위에서 언급 한 init (), service () 및 destroy () 메소드를 포함합니다. GenericServlet은 서블릿 인터페이스를 구현하는 프로토콜, 서블릿과 관련이없는 일반적인 제품입니다. httpservlet은 genericservlet에서 상속되므로 httpservlet은 서틀 인터페이스도 구현합니다. 따라서 서블릿을 정의 할 때 httpservlet 만 상속하면됩니다.
서블릿 인터페이스와 제네릭 서비스는 모든 프로토콜에만 국한되지 않지만 httpservlet은 http 프로토콜과 관련된 클래스이므로 Service () 메소드는 httpservlet에서 구현되며 요청 된 ServletRequest 및 ServletResponse는 요청 된 ServletRequest 및 ServletResponse를 HTTPREQUEST 및 HTTPREPRONSE로 변환하도록 강요됩니다.
공개 void Service (ServletRequest Req, ServletRepronse res) servletexception, ioexception {httprequest 요청; httpresponse 응답; try {req = (httprequest) 요청; res = (httpresponse) 응답; } catch (classcastException e) {Throw New ServleTeXception ( "HTTP 요청 응답"); } 서비스 (요청, 응답);}코드는 마지막으로 httpservlet의 자체 서비스 (요청, 응답) 메소드를 호출 한 다음 요청에 따라 해당 Doxx 방법을 호출합니다.
보호 된 void doget (httpservletrequest res, httpservletrepsonse resp) servletexception, ioexception {string protocol = req.getProtocol (); 문자열 msg = istrings.getString ( "http.method_get_not_supported"); if (protocol.equals ( "1.1")) {resp.senderror (httpservletresponse.sc.method.not.allowed, msg); } esle {resp.SendError (httpservletResponse.sc_bad_request, msg); }}따라서 이러한 방법을 사용자 정의 서블릿에서 무시해야합니다!
소스 코드 앞에는 비밀이 없습니다!
서블릿 응답 요청 단계 :
사용자 요청이 서블릿에 도달하기 위해 서블릿 컨테이너는이 요청에 맞는 Servletrequest 객체 및 ServletRepronse 객체를 생성 한 다음 Servlet Service Method를 호출합니다. 서비스 방법은 ServletRequest 오브젝트에서 고객 요청 정보를 얻고 요청을 처리하며 ServletREpponse 객체를 통해 고객에게 응답 정보를 반환합니다.
Tomcat의 경우 전달 된 매개 변수를 해시 테이블에 배치하고 해시 가능의 정의는 다음과 같습니다.
코드 사본은 다음과 같습니다. private hashtable <String String []> paramhashstringArray = new Hashtable <String String []> ();
이것은 문자열-> String []의 키 값 맵입니다.
해시 맵 스레드는 안전하지 않으며 해시 가능한 스레드는 안전합니다.
서블릿 종료 단계 :
웹 애플리케이션이 종료되거나 서블릿 컨테이너가 실행을 종료하거나 서블릿 컨테이너가 서블릿의 새 인스턴스를 다시로드하면 서블릿 컨테이너는 먼저 서블릿의 Destroy () 메소드를 호출하여 Servlet에서 차축 된 자원을 파괴 () 방법으로 자유롭게 할 수 있습니다.
서블릿은 언제 생성됩니까?
1. 기본적으로 웹 클라이언트가 처음으로 서블릿에 대한 액세스를 요청하면 웹 컨테이너는 서블릿 인스턴스를 만듭니다.
2. ab.xml 파일의 <servlet> 요소에 <load-on-startup> 하위 요소가 지정되면 Servlet 컨테이너는 웹 서버를 시작할 때 순서대로 서블릿 객체를 생성하고 초기화합니다.
참고 : Web.xml 파일에서 일부 서블릿에는 <serlvet> 요소 만 가지고 있으며 <servlet-mapping> 요소가 없으므로 URL을 통해 이러한 서블릿에 액세스 할 수 없습니다. 이 서블릿은 일반적으로 <servlet> 요소의 <load-on-startup> 하위 요소를 구성하므로 컨테이너가 이러한 서블릿을 자동으로로드하고 시작시 init () 메소드를 호출하여 일부 전역 초기화 작업을 완료합니다.
웹 응용 프로그램은 언제 시작됩니까?
1. 서블릿 컨테이너가 시작되면 모든 웹 응용 프로그램이 시작됩니다.
2. 컨트롤러가 웹 응용 프로그램을 시작합니다
서블릿과 JSP의 비교 :
동적 웹 페이지를 생성 할 수있는 많은 유사점이 있습니다.
JSP의 장점은 웹 페이지 제작에 능숙하며 동적 페이지를 생성하는 것이 더 직관적이지만, 단점은 추적 및 문제 해결이 쉽지 않다는 것입니다.
Servlet은 순수한 Java 언어이며 프로세스 및 비즈니스 논리 처리에 능숙합니다. 단점은 동적 웹 페이지를 생성하는 것이 직관적이지 않다는 것입니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.