servlet必知细节(一)

servlet必知细节(一)

    今天复习了一下servlet,有过一些编程经验后,与最初学习servlet相比,对servlet理解的角度不同了,最初只是学习了如何写一个servlet,api怎么用,现在从更深处了解了servlet。

1.servlet接口实现关系

    
HttpServlet继承GenericServlet,GenericServlet实现Servlet接口。

2.生命周期方法

其中Servlet接口有几个生命周期方法:

init(),service(),destroy()为三个生命周期方法(life-cycle methods),所谓生命周期方法,就是在Servlet生命周期过程中,某个特定阶段必定要执行的方法。
查看Servlet API,可以看到这三句话:
1.The servlet is constructed,then initialized with the init method.
2. Any calls from clients to the service method are handled.
3.The servlet is taken out of service,then destroyed with the destroy method, then garbage collected and finalized.
主要可以这么理解那三句话:
通常情况下,tomcat启动时,并没有立刻创建Servlet对象,而是客户端第一次访问这个servlet所配置的映射目录时,由 tomcat构造servlet对象,调用init方法,同时执service方法。以后再访问,不会执行init方法,直接调用service,当tomcat重启或者正常关闭时调用destory方法。那么,init为客户端第一次访问时所用,service为客户端每次访问时所用,并且要知道每调用一次servlet 对象的 service 方法,就创建一个了新线程destory为tomcat正常关闭时所调用。
通过上面描述我们可以知道, Servlet只有在第一次访问的时候创建,以后不创建了,那么Servlet就是单例的了。Servlet是单例多线程
我们知道,我们写一个servlet,并不需要实现顶层接口Servlet,只需要继承HttpServlet,并且实现doGet和doPost方法即可了。
Servlet接口的提出,就是为了解决基于 请求-响应模型的数据处理,并没有涉及HTTP协议及相关API,GenericServlet是 实现接口的通用Servlet,也没有提供与 HTTP协议相关 API ,而在HttpServlet中引入与 协议相关 API 。

3.servlet的单例多线程使用注意事项

servlet的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新的客户端请求该servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。 

我们写的代码本身就是多线程的,每一个请求有servletRequest对象来接受请求,由servletResponse对象来响应该请求,同一个servlet的多个请求到来时,可能发生多线程同时访问同一资源的情况,数据可能变得不一致,可能会因为线程安全问题发生错误,解决方法如下: 
1、同步对共享数据的操作 
 使用synchronized 关键字能保证一次只有一个线程可以访问被保护的区段,在本论文中的Servlet可以通过同步块操作来保证线程的安全。 
2、避免使用实例变量(成员变量) 
   使用实例变量会造成线程安全问题,只是这个问题在高并发的情况下更容易体现出来,其他时候这个问题依然存在,只是不一定体现,多线程并不共享局部变量,所以我们要尽可能的在servlet中使用局部变量,所以只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。 




备注:如果没有配置loadOnStartup,那么Servlet是客户端第一次访问这个Servlet时创建,如果配置了,则tomcat启动时就创建。

上面学习,如果有错误,希望大家提出,共同提高,谢谢。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值