Servlet的生命周期
程序员文章站
2022-06-03 11:38:08
...
前言
周期
创建web项目,写一个测试ServletDemo1类
package com.lingaolu.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-06-10:46 */ @WebServlet("/demo1") public class ServletDemo1 implements Servlet { /** * 初始化方法,在Servlet被创建是执行,只会执行一次 * @param servletConfig * @throws ServletException */ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init......"); } @Override public ServletConfig getServletConfig() { return null; } /** * 提供服务方法,每一次Servlet被访问是执行,执行多次 * @param servletRequest * @param servletResponse * @throws ServletException * @throws IOException */ @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service......"); } @Override public String getServletInfo() { return null; } /** * 摧毁方法,在服务器正常关闭是,执行,执行一次 */ @Override public void destroy() { System.out.println("destroy......"); } }
运行访
一直刷新访问,控制台输出
可见init方法只执行一次,而service方法每次访问都执行
我们关闭项目
控制台输出
destory方法也执行了一次
说明
init
初始化方法,在Servlet被创建是执行,只会执行一次
getServletConfig
获取配置对象,不常用
service
提供服务方法,每一次Servlet被访问是执行,执行多次
destory
摧毁方法,在服务器正常关闭是,执行,执行一次
init方法的执行时期
我们运行项目,没有有init......输出,说明ServletDemo1还没有被创建,init方法还没有执行,直到我们第一次访问demo1,才执行init放发
那么 ServletDemo1能不能在项目启动的时候被创建呢,加载一下资源,可以,需要配置loadOnStartup
loadOnStartup为负数时,是访问才创建,loadOnStartup大于等于0时,是启动项目就创建
默认为-1,访问才创建
我们启动下项目
ServletDeme1被创建了,也执行了init方法
周期总结
init
- Servlet创建时执行,
- 可配置loadOnStartup的值来设置执行时期,loadOnStartup为负数时,是访问才创建,loadOnStartup大于等于0时,是启动项目就创建
- 只执行一次,可用于相关资源的初始化
- 因为只执行一次,说明只有一个实例,是单例的,在多用户访问时会存在线程安全问题
- 线程安全问题解决:不能加锁,会影响性能,所以尽量不要在servlet中定义成员变量,要定义局部变量,这样每个用户进来都是一个新的变量,如果要定义成员变量,也是不能修改这个成员变量。
service
提供服务方法,每一次Servlet被访问是执行,执行多次
destory
摧毁方法,在服务器正常关闭是,执行,执行一次,用于释放资源
下一篇: 网易笔试题1:找正整数对
推荐阅读
-
Photoshop将给美女图片打造出绚丽梦幻的火焰光束翅膀效果
-
Android的webview支持HTML5的离线应用功能详细配置
-
MySQL 自动备份与数据库被破坏后的恢复方法第1/2页
-
Photoshop打造非常华丽的金色牡丹
-
Hibernate save() saveorupdate()的用法第1/2页
-
Android在高jar包版本的工程中修改方法
-
MySQL 通过索引优化含ORDER BY的语句
-
html5的自定义data-*属性与jquery的data()方法的使用
-
Java实现的二叉树常用操作【前序建树,前中后递归非递归遍历及层序遍历】
-
Android模仿美团顶部的滑动菜单实例代码