搜索
写经验 领红包
 > 自然

sevlet生命周期有(sevlet生命周期由什么控制)

导语:Servlet生命周期与线程安全问题

Servlet生命周期分为四个阶段:

1:构造方法: 创建servlet对象的时候调用。默认情况下,第一次访问servlet的时候创建servlet对象只调用1次。证明servlet对象在tomcat是单实例的。

2:init方法: 创建完servlet对象的时候调用。只调用1次。

3:service方法: 每次发出请求时调用。调用n次。

4:destroy方法: 销毁servlet对象的时候调用。停止服务器或者重新部署web应用时销毁servlet对象。只调用1次。

Servlet执行流程:

1、读取web.xml文件解析servlet

2、使用java的反射机制初始化servlet类

3、当发起servlet请求时候调用了HttpServlet父类service方法

4、通过service方法判断请求方式

5、子类重写了doGet方法,调用子类doGet方法

service和doGet方法有什么区别?

当发起servlet请求时,通过HttpServlet类的service方法判断请求方式,若为get请求,调用子类的doGet方法。

Servlet的多线程并发问题

注意: servlet对象在tomcat服务器是单实例多线程的。

由于通过反射机制,通过web.xml初始化类,默认调用无参构造函数,可以在自定义的Servlet类书写无参构造函数证明。

因为servlet是多线程的,所以当多个servlet的线程同时访问了servlet的共享数据,如成员变量,可能会引发线程安全问题。

解决办法:

1)把使用到共享数据的代码块进行同步(使用synchronized关键字进行同步)

2)建议在servlet类中尽量不要使用成员变量。如果确实要使用成员,必须同步。而且尽量缩小同步代码块的范围。(哪里使用到了成员变量,就同步哪里!!),以避免因为同步而导致并发效率降低。

本文内容由小莉整理编辑!