JavaWeb的生命周期 - 草稿

分为启动(加载web应用的有关数据,创建ServletContext对象,对Filter和一些Servlet初始化)、运行时(主要是Servlet容器调用service(方法))和终止(释放资源)三个阶段。

该过程可通过Tomcat的管理应用来控制应用的生命周期:

JavaWeb的生命周期 - 草稿_第1张图片
《Tomcat与javaweb开发技术详解》

Reload操作: 相当于先stop当前web应用,再start。

Undeploy操作: 从Tomcat卸除,web文件被删除。


## Servlet生命周期

就是Servlet容器控制的Servlet接口提供的init、service、destroy三个方法。

在Servlet的生命周期中,初始化和销毁只会发生一次,即init()和destroy()方法只会被Servlet容器调用一次。service()取决于客户端请求的次数。

实践验证:写一个继承于GenericServlet类的xxxservlet,设置三个全局变量分别在三个方法中打印,看结果,即可。

并且,可以有多个xxxservlet对象对应同一个xxxServlet类,尽管类代码一模一样,但属于不同的servlet,互相没有关系!!

JavaWeb的生命周期 - 草稿_第2张图片
《Tomcat与javaweb开发技术详解》

——————

## ServletContext与Web应用范围

Servlet容器在启动一个web应用时,会为它创建唯一的ServletContext对象,终止时销毁。

因此,ServletContext对象与web应用具有同样的生命周期。而且,ServletContext对象可以被web应用中的所有web组件共享。因此,可以利用该对象来存取web应用范围内的共享数据(可以是任意类型)。

JavaWeb的生命周期 - 草稿_第3张图片
《Tomcat与javaweb开发技术详解》

实践验证: 实现web统计访问次数的功能。先写一个Counter类,将其放入servletContext对象。(这里有一种技巧,就是怎么放??你总不能每次请求都放一次吧!所以,先从servletContext获取该对象,如果为null则将其放入,所以第二次以后都只是取,不会再执行放入的逻辑了,if不符合了啊,当且仅当第一次才符合)。

——————

更进一步,将计数写入文件,当web重启时仍然能够继续计数。那么,什么时候写入,什么时候读取呢??

我们已经知道,ServletContext对象最早被创建,最晚被销毁。那么我们的Counter是放到ServletContext对象中的,生命周期随着ServletContext一样。这个时候,就需要ServletContextListner出马了,顾名思义,它是来监听ServletContext的。只需要写一个实现该接口的类就可以了,在contextInitialized()和contextDestroyd()方法写读取和写入文件的逻辑即可。思想如下:

JavaWeb的生命周期 - 草稿_第4张图片
《Tomcat与javaweb开发技术详解》

——————

提一下Servlet的异常,ServletException和IOException,前者由Servlet容器捕获,给客户端响应。后者表示io操作时异常。

——————

防止页面被客户端缓存:

在响应时设置一些header。

你可能感兴趣的:(JavaWeb的生命周期 - 草稿)