Servlet详解

来源:互联网 发布:microsoft office mac 编辑:程序博客网 时间:2024/05/05 23:30

一、Servlet的生命周期

创建Servlet有两个时机:

一是客户端第一次请求每个Servlet时,系统创建该Servlet实例;

另外是Web应用启动时立即创建Servlet实例,即load-on-startup Servlet。


每个Servlet的生命周期如下:

①创建Servlet实例;

②Web容器调用Servlet的init方法,对Servlet进行初始化;

③Servlet初始化后,将一直存在于容器中,响应用户的请求;

④Web容器决定销毁Servlet,先调用Servlet的destory方法,然后销毁Servlet实例。

二、Servlet的重要方法

Servlet的重要方法有:init、service、doGet、doPost、doPut、doDelete、destroy。

①init

在 Servlet 的生命期中,仅执行一次 init()方法。它是在服务器装入 Servlet 时执行的。可以进行配置,是在启动服务器或客户机首次访问 Servlet 时装入 Servlet。 无论有多少客户机访问 Servlet,都不会重复执行 init()。

②service

service()方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service()方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。在 HttpServlet 中已存在 service()方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如,如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet()。

③doGet、doPost、doPut、doDelete

具体响应Get、Post、Put、Delete请求。

④destroy

destroy()方法仅执行一次,即在服务器停止且卸装Servlet时执行该方法。


三、Servlet是单例的么?

Tomcat默认Servlet是单例多线程模式。当客户端第一次请求Servlet的时候,Web容器会实例化Servlet,当又有一个客户端访问该servlet的时候,不会再实例化该servlet,也就是多个线程在使用这个实例。当容器收到一个Servlet请求,调度线程从线程池中选出一个工作者线程,将请求传递给该工作者线程,然后由该线程来执行Servlet的service方法。当这个线程正在执行的时候,容器收到另外一个请求,调度线程同样从线程池中选出另一个工作者线程来服务新的请求,容器并不关心这个请求是否访问的是同一个Servlet。当容器同时收到对同一个Servlet的多个请求的时候,那么这个Servlet的service()方法将在多线程中并发执行。


0 0
原创粉丝点击