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文件中配置元素
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yueruu/archive/2010/04/18/5499238.aspx
分享到:
相关推荐
### Servlet执行过程与生命周期详解 在探讨Servlet的执行过程与生命周期之前,我们首先明确Servlet的基本概念:Servlet是一种服务器端的Java应用程序,它处理客户端发送的请求,并生成动态响应。Servlet通常运行在...
Servlet运行原理图,描述servlet运行的步骤方向和servlet运行过程
#### 四、Servlet运行详解 为了运行Servlet,需要完成以下步骤: 1. **启动Tomcat服务器**:确保Tomcat服务器已经启动并且能够正常工作。 2. **测试访问**:在浏览器中输入URL:`...
### 第一个Servlet开发全过程 #### 一、概述 本文将详细介绍如何使用Oracle的JDeveloper工具来开发一个简单的Servlet应用程序,并通过一系列步骤展示整个过程。Servlet技术是Java Web开发中的核心组成部分之一,它...
servlet过滤器配置及运行过程,servlet实例用法。
通过上述过程,我们可以清晰地了解到 Servlet 的整个生命周期及其运行原理。从加载到销毁,每个阶段都有明确的任务和流程。掌握这些知识对于理解和开发基于 Servlet 的 Java Web 应用程序至关重要。
动手实践是最好的学习方式,通过这个实例,你可以亲自体验从编写Servlet到运行的全过程,从而加深对Servlet的理解。 总的来说,Servlet是Java Web开发的基础,熟练掌握Servlet的编写和配置对于理解和构建Web应用...
servlet运行原理图,可以通过此图清楚看到servlet的运行过程
Java Servlet API还包括一系列的异常类,如`ServletException`和`UnavailableException`,用于处理在Servlet执行过程中出现的问题。此外,还有其他辅助类,如`RequestDispatcher`用于请求转发和包含,`Cookie`用于...
Servlet 执行过程: 1. 浏览器在地址栏输入 URL,向服务器发送请求。 2. 服务器收到请求数据包,分析请求资源路径,通过请求的 appName 查找 webapps 文件下的 appName 做匹配,匹配上需要获取 web.xml 中的 ...
Servlet运行在Servlet容器中,而Servlet容器通常嵌入在Web服务器内。Web服务器如Apache Tomcat、JBoss等,负责接收HTTP请求并将它们转发给Servlet容器处理。Tomcat是广泛使用的开源Web服务器,基于Java开发,需要JVM...
Servlet 程序的运行方法和开发过程 Servlet 程序是一种基于 Java 语言的 Web 应用程序,用于处理 HTTP 请求并返回响应结果。在本文中,我们将详细介绍如何运行 Servlet 程序,包括 Servlet 的开发过程、Servlet ...
Filter可以在Servlet处理请求前和响应发送后执行额外操作,例如进行身份验证、日志记录、数据转换等。通过配置`<filter>`和`<filter-mapping>`元素在web.xml中指定Filter的使用。 综上所述,`javax.servlet` jar包...
在探讨“servlet运行目录搭建”这一主题时,我们深入解析如何配置servlet的运行环境,包括关键目录的创建与组织结构,这对于理解和部署基于Java的Web应用至关重要。 ### 一、目录结构详解 #### 1. **Tomcat目录...
#### 二、Servlet的运行过程 Servlet的运行过程主要包括以下几个步骤: 1. **客户端发起HTTP请求**:客户端通过浏览器或其他工具向服务器发送HTTP请求。 2. **Web容器接收请求**:服务器上的Web容器接收到这个请求...
Servlet运行在Servlet容器中,如Tomcat、Jetty等。容器负责Servlet的加载、初始化、服务和销毁过程,以及线程安全问题。开发者无需关心这些细节,只需关注业务逻辑。 四、Servlet配置 在Web应用的`web.xml`配置文件...
总结,Java Servlet处理表单数据的过程包括接收请求、解析数据、执行业务逻辑和返回响应。了解这一流程对于开发基于Servlet的Web应用程序至关重要。在实际开发中,还需要考虑到错误处理、安全性及性能优化等方面,...