servlet生命周期

第一次访问的时候调用init,然后service
第二次之后一直调用service
当服务器重启时调用destroy,注意是“重启”时,"关闭"的时候不会销毁!!
重启或启动后,第一次访问,同样调用init,然后service
以次类推
只有第一次访问的时候才会始终化,从第二次开始不再初始化,哪怕请求来自不同的客户端。
也就是说,服务器的一次启动之后只可能有一个servlet实例,所以只调用一次init,不管是几个客户端在请求这个servlet

在web.xml中加入配置

<load-on-startup>2<load-on-startup>
服务器启动的时候就去实例化它,而不是等到第一次访问才初始化它
数字越小,优先级越高

由此总结出,servlet有两种初始化方式:
1、通过某一客户端的第一次访问
2、通过在web.xml中配置load-on-startup由容器自动完成初始化


有这样一个servlet
String age;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

String name = request.getParameter("name");
age = request.getParameter("age");
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name);
System.out.println(age);
}
分别通过两个浏览器去访问:
http://localhost/javaweb_interview/servlet/SleepServlet?name=zhangsan&age=20
http://localhost/javaweb_interview/servlet/SleepServlet?name=lisi&age=10
发现输出的结果是:
zhangsan
10
lisi
10

分析:
1、servlet是单实例的,它仅仅有唯一的一个实例
2、servlet是多线程的
尽量保证成员变量只读、不改,否则写成局部变量

getParameter()与getAttribute()
getParameter是客户端与服务器的关系
而与getAttribute是在服务器中进行对象保存后取出的一个操作,setAttribute与之对应,在request中传递
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值