查看完整版本: [-- Servlet引擎的内部工作 --]

风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› Servlet引擎的内部工作 登录 -> 注册

1F Servlet引擎的内部工作   菜鸟 Post by : 2009-06-08 11:44:03.0

可以把Servlet引擎看成是Servlet代码的容器,就像Web浏览器是小程序代码的容器一样.
Servlet引擎进行许多工作,能大大简化编程人员工作.下面是使用标准纯种模型时Servlet的生命周期.

1.创建Servlet实例.
Servlet引擎装入JAVA类,在Servlet引擎启动时或首次请求特定Servlet时创建Servlet实例.发生时间取决于特定Servlet的设置.通常Servlet引擎只生成Servlet对象的一个备份,每次请求时复用这个对象,即使同时处理多个请求.这种方法可以节省对每个请求生成新的对象的时间,但需要在编程时认真计划.替换方法见"单线程模型".

2.实例初始化.
Servlet引擎调用Servlet的init()方法.利用此方法,通常要设置Servlet周期中的常量参数,如文件路径和数据库连接池.实例初始化之后,放在内存中,直到收到请求.

3.请求处理.
Servlet引擎收到的每个请求由单独的Java线程处理.Servlet引擎可能创建新线程,也可能从池中分配一个线程.线程创建请求并响应对象,然后调用Servlet的service()方法.service()方法确定如何处理请求.

4.线程管理.
多个线程可以同时执行一个对象的方法,各有自己的请求与响应对象.将代码设计成线程安全是Servlet编程的主要部分.

5.其它服务
Servlet引擎提供的典型服务是对话跟踪,使程序可以跟踪属于特定用户的数据.

6.实例删除
Servlet引擎需要安全关闭时,或需要恢复内存时,调用Servlet的destroy()方法.这时Servlet可以关闭文件并优雅地关闭.

Servlet引擎向Servlet提供的服务之一是管理标准输出System.out与System.err.这些输出流的文本输出定向到日志.文件的具体地址随Servlet引擎的不同而不同.向这些输出流写入信息时,记住,其他Servlet可能也在写入数据,因此一定要标好消息,以区别其来自哪个Servlet.

Servlet API
javax.servlet 基本一般化Servlet API包
javax.servlet.http web页面专用扩展
javax.servlet.jsp 创建JavaServer Pages的类
javax.servlet.jsp.tagext jsp类专用扩展

javax.servlet包中的几个接口定义提供整个API的基本结构.最常用的接口包括:
Servlet 这个接口定义所有Servlet都要实现的方法.GenericServlet类实现Servlet的接口.
ServletRequest 关于客户机请求的所有信息可以通过实现这个接口的对象访问.Servlet引擎负责创建ServletRequest对象.
ServletResponse Servlet引擎要创建实现这个接口的对象和传入的Servlet的service方法,用于向客户机输出MIME体.
除了上述接口之外,javax.servlet包还有下实用程序接口
RequestDispatcher
ServletConfig
ServletContext
SingleThreadModel
...
...
一种资源管理方法是对象池,这对需要较多时间创建而又占用较少资源的对象特别有用.数据库连接通常用对象池管理.

在Servlet启动时创建指定最小个数的连接对象.
Servlet需要数据库连接时,从池管理器中请求.如果池中连接已经用光,且池中个数小于最大值,则创建新连接.如果池中个数等于最大值而池中连接已经用光,则Servlet线程受阻,直到能使用一个连接对象.

基本Servlet的生命周期有三个阶段:初始化,响应请求和断裂.


风信Java论坛 ›› J2EE/Java Web 讨论交流中心 ›› Servlet引擎的内部工作 登录 -> 注册

查看完整版本: [-- Servlet引擎的内部工作 --]
CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 9 ms,0 (Queries)  Gzip enabled
粤ICP备07511478号