一个Servlet生命周期(Tomcat处理请求中)

用SSH多了,人容易变白痴,当然,这和懒惰很有关系。
Action,jsp,最终都是servlet。
下面看看servlet的整个生命周期。

1、客户发出请求—>Web 服务器转发到Web容器Tomcat;
2、Tomcat主线程对转发来用户的请求做出响应创建两个对象:HttpServletRequest和HttpServletResponse;
3、从请求中的URL中找到正确Servlet,Tomcat为其创建或者分配一个线程,同时把2创建的两个对象传递给该线程;
4、Tomcat调用Servlet的servic()方法,根据请求参数的不同调用doGet()或者doPost()方法;
5、假设是HTTP GET请求,doGet()方法生成静态页面,并组合到响应对象里;
6、Servlet线程结束,Tomcat将响应对象转换为HTTP响应发回给客户,同时删除请求和响应对象。
从该过程中,我们可以理解Servlet的生命周期:Servlet类加载(对应3步);Servlet实例化(对应3步);调用init方法(对应3步);调用service()方法(对应4、5步);;调用destroy()方法(对应6步)。


文绉绉版:
Servlet是一种可以在Servlet容器中运行的组件,那么理所当然就应该有一个从创建到销毁的过程,这个过程我们可以称之为Servlet生命周期。Servlet的生命周期可以分为加载、实例化、初始化、处理客户请求和卸载五个阶段,体现在方法上主要是init()、service()和destroy()三个方法。生命周期的具体说明如下:
Servlet容器完成加载Servlet类和实例化一个Servlet对象
init()方法完成初始化工作,该方法由Servlet容器调用完成
service()方法处理客户端请求,并返回响应结果
destroy()方法在Servlet容器卸载Servlet之前被调用,释放一些资源
加载并初始化Servlet
在前面已经说过Servlet容器完成加载和实例化Servlet的工作,该工作既可以在容器启动时完成,也可以在容器收到请求时完成,或者是两者之间的某个时间启动。之后需要初始化Servlet,即读取配置信息、读取初始化参数等,这些基本上在整个生命周期中只需要执行一次。关于init()方法已经在积累GenericServlet中提供缺省实现,如果不需特殊处理则没有必要再进行定义,否则要重写。
处理客户端请求
当容器接收到客户端请求时,Servlet引擎将创建一个ServletRequest请求对象和一个ServletResponse响应对象,然后把这两个对象作为参数传递给对应Servlet对象的service方法。
该方法是一个重点实现的方法,ServletRequest对象可以获得客户端发出请求的相关信息,如请求参数等,ServletResponse对象可以使得Servlet建立响应头和状态代码,并可以写入响应内容返回给客户端。
在此说明一点,当Servlet中有doGet()或者doPost()方法时,那么service方法就可以省略,默认为调用这两个方法。
卸载Servlet
Servlet的卸载是由容器本身定义和实现,在卸载Servlet之前需要调用destroy()方法,以让Servlet自行释放占用的系统资源。虽然Java虚拟机提供了垃圾自动回收处理机制,但是有一部分资源却是该机制不能处理或延迟很久才能处理的,如关闭文件,释放数据库连接等。

Servlet生命周期的五个阶段是相互关联的,后面几个阶段建立在前面阶段的基础之上,在使用Servlet的时候可以根据自己的需要灵活处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值