`
zy77612
  • 浏览: 278397 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

servlet 运行过程

    博客分类:
  • J2EE
阅读更多

   Servlet 运行在servlet 容器中,其生命周期由容器来管理。servlet 的生命周期通过 javax.servlet.Servlet接口中的init(),servce(),和destory();方法表示。


   1.加载和实例化 servlet 容器负责加载和实例化servlet 当容器启动或在容器中检测到需要这个servlet来响应一个请求 时。创建servlet实例。容器通过java 的反射API来创建servlet实例.所以servlet中不应该提供带参数的构造函数。


   2.初始化 在servlet实例化后,容器必须调用 init() 方法来初始化这个对象。初始化的目的是为了让servlet对象在处理客户请求之前完成一些初始工作。对于每一个servlet实例,init() 方法只会调用一次。


   3.请求处理 servlet 容器调用service()方法对请求处理。servlet 实例通过ServletRequest对象获得客户端的相关信息和请求信息。在对请求处理后调用ServletResponse对象设置响应信息。


   4.服务终止 当容器检测到一个servlet实例应该从服务器中移除时,容器调用实例的destory方法。让实例释放它所占用的资源。如果在次发请求就会 创建一个新的servlet 实例。

在整个servlet 的生命周期中,创建servlet实例,调用实例的init()和destory()方法都只执行一次,当初始话完成后,servlet容器将该实例保存在内存中,通过servlce() 方法为接受请求服务。


生命周期:(1)加载和实例化(2)初始化(3)请求处理(4)服务终止

方法及作用:

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

     

(2) service() 方法   service() 方法是 Servlet 的核心。每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。 在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。  

 

(3)doGet()方法  当一个客户通过HTML 表单发出一个HTTP GET请求或直接请求一个URL时,doGet()方法被调用。与GET请求相关的参数添加到URL的后面,并与这个请求一起发送。当不会修改服务器端的 数据时,应该使用doGet()方法。

  

(4)doPost()方法  当一个客户通过HTML 表单发出一个HTTP POST请求时,doPost()方法被调用。与POST请求相关的参数作为一个单独的HTTP 请求从浏览器发送到服务器。当需要修改服务器端的数据时,应该使用doPost()方法。

   

(5) destroy() 方法   destroy() 方法仅执行一次,即在服务器停止且卸装Servlet 时执行该方法。典型的,将 Servlet 作为服务器进程的一部分来关闭。缺省的 destroy() 方法通常是符合要求的,但也可以覆盖它,典型的是管理服务器端资源。例如,如果 Servlet 在运行时会累计统计数据,则可以编写一个 destroy() 方法,该方法用于在未装入 Servlet 时将统计数字保存在文件中。另一个示例是关闭数据库连接。   当服务器卸装 Servlet 时,将在所有 service() 方法调用完成后,或在指定的时间间隔过后调用 destroy() 方法。一个Servlet 在运行service() 方法时可能会产生其它的线程,因此请确认在调用 destroy() 方法时,这些线程已终止或完成。

   

(6) GetServletConfig()方法   GetServletConfig()方法返回一个 ServletConfig 对象,该对象用来返回初始化参数和ServletContext。ServletContext 接口提供有关servlet 的环境信息。   

 

(7) GetServletInfo()方法   GetServletInfo()方法是一个可选的方法,它提供有关servlet 的信息,如作者、版本、版权。   当服务器调用sevlet 的Service()、doGet()和doPost()这三个方法时,均需要 "请求"和"响应"对象作为参数。"请求"对象提供有关请求的信息,而"响应"对象提供了一个将响应信息返回给浏览器的一个通信途径。   

javax.servlet 软件包中的相关类为ServletResponse和ServletRequest,而javax.servlet.http 软件包中的相关类为HttpServletRequest 和 HttpServletResponse。Servlet 通过这些对象与服务器通信并最终与客户机通信。Servlet 能通过调用"请求"对象的方法获知客户机环境,服务器环境的信息和所有由客户机提供的信息。Servlet 可以调用"响应"对象的方法发送响应,该响应是准备发回客户机的。


<重要理解!>

Servlet运行在Servlet容器中,其生命周期由容器来管理。Servlet的生命周期通过javax.servlet.Servlet接口中的init()、service()和destroy()方法来表示。

 Servlet的生命周期包含了下面4个阶段:


(1)加载和实例化 Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建 Servlet实例。当Servlet容器启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统 或者其他的网络服务中通过类加载器加载Servlet类,成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建 Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所以我们在编写Servlet类的时候,不应该提供带参数的构造方法。


(2)初始化 在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完 成一些初始化的工作,如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet 实例可以使用容器为它准备的ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期 间,如果发生错误,Servlet实例可以抛出ServletException异常或者UnavailableException异常来通知容器。 ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而UnavailableException异常用于通知容器 该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出UnavailableException异常 向容器指出它暂时或永久不可用。


(3)请求处理 Servlet容器调用Servlet的service()方法对请求进行处理。要注意的是,在service()方法调用之前,init()方法必须成 功执行。在service()方法中,Servlet实例通过ServletRequest对象得到客户端的相关信息和请求信息,在对请求进行处理后,调 用ServletResponse对象的方法设置响应信息。在service()方法执行期间,如果发生错误,Servlet实例可以抛出 ServletException异常或者UnavailableException异常。如果UnavailableException异常指示了该实 例永久不可用,Servlet容器将调用实例的destroy()方法,释放该实例。此后对该实例的任何请求,都将收到容器发送的HTTP 404(请求的资源不可用)响应。如果UnavailableException异常指示了该实例暂时不可用,那么在暂时不可用的时间段内,对该实例的任 何请求,都将收到容器发送的HTTP 503(服务器暂时忙,不能处理请求)响应。


(4)服务终止 当容器检测到一个Servlet实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法,以便让该实例可以释放它所使用的资源,保存数 据到持久存储设备中。当需要释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。在destroy()方法调用之后,容器 会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。如果再次需要这个Servlet处理请求,Servlet容器会创建一个新的 Servlet实例。 在整个Servlet的生命周期过程中,创建Servlet实例、调用实例的init()和destroy()方法都只进行一次,当初始化完成 后,Servlet容器会将该实例保存在内存中,通过调用它的service()方法,为接收到的请求服务。下面给出Servlet整个生命周期过程的 UML序列图,如图2-16所示。



图2-16 Servlet在生命周期内为请求服务 如果需要让Servlet容器在启动时即加载Servlet,可以在web.xml文件中配置元素。

分享到:
评论
2 楼 yuejingjiahong 2011-07-08  
[url][/url]
1 楼 yuejingjiahong 2011-07-08  
[url][/url][url]为 G[/url][url][url][/url]ET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只[/url]

相关推荐

    servlet执行过程与生命周期

    servlet的执行过程与生命周期心得体会

    Servlet运行原理图

    Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程

    servlet过滤器配置及运行过程.doc

    servlet过滤器配置及运行过程,servlet实例用法。

    如何运行Servlet程序

    servlet运行方法,servlet开发过程

    servlet编写、部署、运行全过程

    servlet编写、部署、运行全过程。该资料就能解决这个问题。

    servlet运行原理

    servlet运行原理图,可以通过此图清楚看到servlet的运行过程

    servlet 8个最基础demo

    在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。 实现过程

    Java web中servlet学习笔记 核心

    Java web中servlet学习笔记 核心。servlet执行过程、servlet生命周期、继承类、创建servlet、servlet线程安全、配置信息

    Servlet项目实践 实现学生信息系统的全部代码

    二、Servlet的运行过程 Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:  ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。 ...

    servlet 5分钟入门理解

    servlet web.xml 运行过程

    09配置+servlet+高速缓存

    每次 servlet 运行时,从 HttpServletRequest 对象生成标识字符串,它区分唯一的条目。然后您可以按以下内容进行 servlet 高速缓存: 用于调用该 servlet 的通用资源标识符(URI)的请求参数和属性 会话信息 其他...

    servlet-api.jar

    比如从请求信息中可以获取客户端的ip,用户提交的信息等等,从响应信息中可以获取客户端的输出流,响应类型等等,当然中间的过程是由servlet容器封装好的,等我们开发servlet时会直接使用这些接口来编写具体的业务...

    servlet实现身高体重比测试

    通过学习该程序可以掌握servlet的执行过程,掌握el表达式的用法

    java-servlet-api.doc

    所有的JavaServlet都会直接地或间接地执行javax.servlet.Servlet接口,这样它才能在一个Servlet引擎中运行。Servlet引擎是Web服务器按照JavaServletAPI定制的扩展。Servlet引擎提供网络服务,能够理解MIME请求,并...

    JDBC+Servlet入门示例

    数据库采用Sqlite3,需要在数据库操作对象(com.leaf.dao.LeafDao):main方法中,以Java Application执行initDB方法,实现数据库、数据表创建。 在登陆过程中,servlet接收用户名密码,检查数据库中是否存在,登陆...

    深入Java Servlet网络编程

    2 执行服务器端程序 1. 3. 3 将结果运回给浏览器 1. 4 服务器端技术 1. 4. 1 各种服务器端技术的比较 1. 4. 2 基于Java解决方案的特点 第2章 Java Servlet简介 2. 1 Servlet生命周期 2. 2 Java Servlet API...

    servlet 4.0 API(English).chm

    好吧,这么说你可能还是不太懂,简单的讲,这个servlet是运行在服务器上的一个小程序,用来处理服务器请求的.进一步讲,我们知道,一般的网页程序,是由我们通过浏览器访问来实现的,在这个过程中,我们的浏览器...

    Servlet的原理与生命周期

    Java Servlet的原理与生命周期 CGI的工作过程

    XML Oracle Servlet 复习汇总(S2)

    20 Servlet:jsp执行过程 6分 21 Servlet:会话和会话跟踪 5分 22 Servlet:jsp标准动作 4分 23 Servlet:jsp:setproperty 6分 24 Servlet:servlet的配置 6分 25 Servlet:过滤器 9分 26 Servlet:simpletag 6分

    servlet简介

    对于所有的jsp而言,它都会被转换为servlet来执行,只是这个转换的过程由Tomcat服务器来完成,我们可以通过work目录来查询相应的代码。

Global site tag (gtag.js) - Google Analytics