- 浏览: 304705 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (279)
- java技术 (45)
- 存储技术 (6)
- 数据库技术 (29)
- 系统架构 (6)
- 项目管理 (0)
- 生活随想 (3)
- 性能优化 (22)
- OpenStack (0)
- 缓存技术 (3)
- 云计算 (1)
- linux (22)
- 网络通信 (12)
- 辅助开发 (1)
- web服务器和应用服务器 (6)
- 学习感悟 (2)
- 大数据技术(hadoop) (6)
- 高性能分布式系统 算法 (1)
- zookeeper (0)
- 算法 (4)
- dubbo (1)
- java技术 jvm (5)
- 系统设计 (1)
- 缓存失效算法比较 (1)
- javascript (1)
- maven (3)
- 设计模式 (13)
- spring以及常用框架 (5)
- SOA框架 (5)
- 监控系统 (1)
最新评论
-
kongdong88:
Netty简单应用与线上服 ...
用Netty实现的一个简单的HTTP服务器 -
phili1999:
兄弟,此乃Eclipse的bug,至今未解决,可见国人地位低啊 ...
eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决 -
xiaguobing:
谢谢分享啊
MetaQ初探 -
ih0qtq:
...
java性能编码规范整理
Servlet的生命周期定义了一个Servlet如何被加载、初始化,以及它怎样接收请求、响应请求、提供服务。
在代码中,Servlet生命周期由接口javax.servlet.Servlet定义。所有的Java Servlet 必须直接或间接地实现javax.servlet.Servlet接口,这样才能在Servlet Engine上运行。Servlet Engine提供network Service,响应MIME request,运行Servlet Container。 javax.servlet.Servlet接口定义了一些方法,在Servlet 的生命周期中,这些方法会在特定时间按照一定的顺序被调用。如下图所示。
Servlet的生命周期
Servlet 如何被加载(Load)、被实例化(Instantiated)
Servlet Engine 负责实例化和加载Servlet,这个过程可以在Servlet Engine 加载时执行,可以在Servlet 响应请求时执行,也可以在两者之间的任何时候执行(配置为load on startup的 servlet是在容器启动时被加载的)。
Servlet如何被初始化(Initialized)
Servlet Engine 加载好Servlet 后,必须要初始化它。初始化时Servlet 可以从数据库里读取初始数据,建立JDBC Connection,或者建立对其他有价值的资源的引用。
在初始化阶段,Init( )方法被调用。这个方法在javax.servlet.Serlet接口中定义。Init( )方法以一个Servlet 配置文件(ServletConfig 型)为参数。Servlet configuration 对象由Servlet Engine 实现,可以让Servlet 从中读取一些name-value对的参数值。ServletConfig对象还可以让Servlet接受一个Servlet Context对象。
Servlet 如何处理请求
Servlet 被初始化以后,就处于能响应请求的就绪状态。每个对Servlet 的请求由一个Servlet Request 对象代表。Servlet 给客户端的响应由一个Servlet Response对象代表。当客户端有一个请求时,Servlet Engine 将ServletRequest 和ServletResponse对象都转发给Servlet,这两个对象以参数的形式传给Service方法。这个方法由javax.servlet.Servlet定义并由具体的Servlet 实现。
Servlet还可以实现 ServletRequest 和ServletResponse接口。ServletRequest接口可以让Servlet 获取客户端请求中的参数,如form data、request信息、协议类型,等等。Servlet 可以从ServletInputStream流中读取request 数据。ServletResponse接口允许Servlet设置response headers和status codes。实现这个接口可以使Servlet能访问ServletOutputStream流用来向客户端返回数据。
Servlet如何被释放
Servlet Engine 没有必要在Servlet 生命周期的每一段时间内都保持Servlet的状态。Servlet Engine可以随时随意使用或释放Servlet。因此,你不能依赖Servlet class或其成员存储信息。当Servlet Engine判断一个Servlet应当被释放时(比如说Engine准备Shut down 或需要回收资源),Engine必须让Servlet 能释放其正在使用的任何资源,并保存持续性的状态信息。这些可以通过调用Servlet的destroy方法实现。 在Servlet Engine 释放一个Servlet 以前,必须让其完成当前实例的service方法或是等到timeout(如果Engine定义了timeout)。当Engine释放一个Servlet以后,Engine将不能再将请求转发给它,Engine必须彻底释放该Servlet并将其标明为可回收的(给garbage collection)。
在Servlet API中最重要的是Servlet interface。所有的Servlets执行这个interface的方式有很多种:或者是直接的,或者通过extending这个class执行它,如 HttpServlet。这个Servlet interface 提供并安排Servlet与客户端联系的方法。Servlet 编写者可以在他们开发Servlet程序时提供更多一些或所有这样的方法。
当一个Servlet接收来自客户端的调用请求时,它接收两个对象:一个是ServletRequest,另外一个是ServletResponse。这个ServletRequest class 概括从客户端到服务器之间的联系,而 ServletResponse class 概括从Servlet返回客户端的联系。
ServletRequest interface 可以获取到这样一些信息,如由客户端传送的参数名称,客户端正在使用的协议,产生请求并且接收请求的服务器远端主机名。它也提供获取数据流的Servlet、ServletInputStream,这些数据是客户端引用中使用HTTP POST和PUT方法递交的。一个ServletRequest的子类可以让Servlet获取更多的协议特性数据。
例如,HttpServletRequest 包含获取HTTP-specific头部信息的方法。ServletResponse interface 给出相应客户端的Servlet方法。它允许Servlet设置内容长度和回应的MIME类型,并且提供输出流ServletOutputStream,通过编写者可以发回相应数据。ServletResponse子类可以给出更多protocol-specific容量的信息。例如,HttpServletResponse 包含允许Servlet操作HTTP-specific头部信息的方法。
总结与运用:
在实践中可以配置一个load on start up 的Servlet,它随服务器启动而初始化,在其init方法中启用一些参数设置,例如把某些变量存入ServletContext,这样以后在其他Servlet中就可以获得该参数了;而在其destroy中写入一些资源回收的代码,当服务器关闭时就可以自动关闭相遇的资源了。
发表评论
-
JVM内存配置详解
2016-09-03 10:16 742前段时间在一个项目的性能测试中又发生了一次OOM(Ou ... -
gc日志分析工具
2014-07-31 11:29 747性能测试排查定 ... -
ByteBuffer使用
2014-04-08 15:04 2130在NIO中,数据的读写操作始终是与缓冲区相关联的.读取时信 ... -
用java实现生产者和消费者问题 .
2014-02-08 15:18 579package javaTest; //测试类 ... -
应用Hash函数(java描述) .
2014-02-08 15:16 943计算理论中,没有Hash ... -
JAVA正则表达式 Pattern和Matcher
2013-09-15 12:14 689java.util.regex是一个用正则表达式所订制 ... -
异常处理之最佳实践(Best Practices for Exception Handling )
2013-09-15 12:15 1109关于异常处理最主要的问题是什么时间、怎么使用,在本 ... -
转 探索 ConcurrentHashMap 高并发性的实现机制
2013-08-14 10:16 513简介 ConcurrentHashMap 是 util. ... -
JAVA线程池的分析和使用
2013-08-14 10:11 8761. 引言 合理利用线程池能够带来三个好处。第一: ... -
MAT工具介绍
2013-08-13 09:17 878为什么用MAT 之前的观点,我认为使用实时prof ... -
聊聊内存泄露
2013-08-12 17:42 8591.什么是内存泄露 看到网上有很多人都在问内存泄露与内存 ... -
Java多线程-阻塞队列BlockingQueue .
2013-08-05 09:14 946前言: 在新 ... -
让servlet支持浏览器缓存
2013-06-20 15:16 1130大家都知道IE等浏览器支持缓存,并且缓存策略可配置,这样可 ... -
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
2013-06-20 14:34 1030转自: http://holdbelief.javaeye ... -
Runtime.addShutdownHook()方法理解
2013-05-05 08:39 984Runtime.addShutdownHo ... -
Jaxb2 实现JavaBean与xml互转
2013-04-18 22:39 1224一、简介 JAXB(Java Archite ... -
JVM中Load过多Class的分析
2013-04-12 08:58 2893JVM中Load过多Class的分析 2013-01 ... -
Java动态代理机制分析及扩展
2013-04-12 08:59 789本文通过分析 Java 动态代理的机制和特点,解读动 ... -
proxool与tomcat DBCP连接池性能评测
2013-04-10 13:49 867proxool与tomcat DBCP连接池性能评测 ... -
Java String的序列化小结
2013-04-10 13:49 855String对我们来说太熟悉了,因为它无处不在,更因为用S ...
相关推荐
Servlet生命周期是Java Web开发中的核心概念,它涵盖了Servlet从创建到销毁的整个过程,主要分为初始化阶段、运行阶段和销毁阶段。这个过程完全由Servlet容器(如Tomcat、Jetty等)管理。 **初始化阶段** 在初始化...
- 在`destroy()`方法执行完成后,Servlet对象及其关联的`ServletConfig`对象会被销毁,标志着Servlet生命周期的结束。 总的来说,Servlet生命周期的关键在于理解初始化、运行和销毁这三个阶段,以及每个阶段涉及的...
### Servlet 生命周期详解 #### 一、概述 Servlet 是 Java Web 开发的核心技术之一,用于处理客户端的 HTTP 请求并返回响应。了解 Servlet 的生命周期对于更好地控制和优化 Web 应用程序至关重要。Servlet 的生命...
### Servlet 生命周期详解 #### 一、概述 Servlet作为Java Web开发中的重要组成部分,主要用于处理客户端发送至服务器端的HTTP请求并生成相应的响应结果。Servlet的生命周期主要包括实例化、初始化、服务(即处理...
通过上述过程,我们可以清晰地了解到 Servlet 的整个生命周期及其运行原理。从加载到销毁,每个阶段都有明确的任务和流程。掌握这些知识对于理解和开发基于 Servlet 的 Java Web 应用程序至关重要。
它管理Servlet的生命周期,负责加载、实例化、初始化、服务以及销毁Servlet。容器接收HTTP请求,解析请求信息,然后调用相应的Servlet实例进行处理。Servlet容器通过实现Servlet API来与Servlet交互,提供了Web应用...
Servlet容器负责管理Servlet的整个生命周期,包括创建、初始化、调用和销毁Servlet实例。当第一次请求到达时,Servlet容器会创建并初始化Servlet实例;随后的请求将重用已初始化的实例;当服务器关闭或Servlet不再...
Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。`init()`方法在Servlet实例化后首次调用,用于初始化Servlet;`service()`方法处理客户端请求;`destroy()`方法在Servlet即将被卸载时调用,用于释放资源...
通过了解`javax.servlet.Servlet`接口的基本概念及其在Servlet生命周期中的作用,读者可以更好地理解Servlet容器的内部机制。 #### 二、Servlet容器的基本概念 Servlet容器是一种用于部署和执行Servlet的软件环境...
4. **Servlet生命周期**:Servlet的生命周期包括加载和初始化、服务、销毁三个阶段。Servlet容器(如Tomcat)会在第一次请求时加载Servlet并调用init()方法,之后每次请求都会调用service()方法,最后在容器关闭或...
开发者编写实现了Servlet接口的类,并在web.xml文件中进行配置,Web容器会负责加载、初始化、调用Servlet以及管理其生命周期。 使用Servlet API可以实现的功能包括但不限于: 1. 处理HTTP请求,如GET、POST等。 2....
JavaEE Servlet 2.1 说明文档详细解读 JavaEE Servlet API 是Java平台上的核心组件,主要用于构建Web应用程序。...通过理解Servlet API及其生命周期,开发者可以有效地利用Java Servlet来实现复杂的Web服务。
例如,通过`<servlet>`、`<servlet-mapping>`标签定义Servlet及其关联的URL模式。 五、过滤器(Filter) Servlet 2.4引入了过滤器(Filter)的概念,过滤器可以在请求到达Servlet之前进行预处理,也可以在响应返回...
在这个“servlet源码和笔记”资料中,我们将会深入探讨Servlet的工作原理、生命周期以及如何在实际项目中应用。 1. **Servlet基本概念** Servlet是一个Java类,它扩展了Java平台的功能,使得开发者可以创建动态的...
`web.xml`是Web应用的部署描述符,其中的`<servlet>`和`<servlet-mapping>`元素分别用于定义Servlet及其映射路径。 例如,在`web.xml`中配置一个名为`HelloServlet`的Servlet,你需要这样写: ```xml <servlet> ...
1. **Servlet接口**:这是所有Servlet实现的基础,定义了Servlet的基本生命周期方法,如`init()`, `service()`, `destroy()`。 2. **GenericServlet类**:它是Servlet接口的抽象实现,提供了通用的服务处理逻辑,...
7. **Servlet映射**:在Web应用的部署描述符(web.xml)中,我们可以通过`<servlet>`和`<servlet-mapping>`元素定义Servlet及其URL映射,决定哪些请求由哪个Servlet处理。 8. **请求和响应对象**:`...
5. **Servlet配置**:在web.xml文件中,可以通过`<servlet>`、`<servlet-mapping>`元素定义Servlet及其映射路径。例如,通过`<url-pattern>`指定Servlet处理哪些URL请求。 6. **注解驱动**:从Java EE 5开始,...
了解Servlet的生命周期对于有效地管理和优化Servlet的行为至关重要。 1. **初始化阶段**:在这个阶段,Servlet被加载并创建实例,然后调用`init()`方法进行初始化。 2. **服务阶段**:当客户端发送请求时,服务器会...