sevlet生命周期

1)通过映射找到到servlet-class的内容,字符串: com.itmayiedu.a_servlet.FirstServlet

2)通过反射构造FirstServlet对象

   2.1 得到字节码对象

    Class clazz = class.forName("com.itmayiedu.a_servlet.FirstServlet");

   2.2 调用无参数的构造方法来构造对象

    Object obj = clazz.newInstance();     ---1.servlet的构造方法被调用

3)创建ServletConfig对象,通过反射调用init方法

   3.1 得到方法对象

    Method m = clazz.getDeclareMethod("init",ServletConfig.class);

   3.2 调用方法

    m.invoke(obj,config);             --2.servlet的init方法被调用

4)创建request,response对象,通过反射调用service方法

   4.1 得到方法对象

    Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);

   4.2 调用方法

    m.invoke(obj,request,response);  --3.servlet的service方法被调用

5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法

   5.1 得到方法对象

    Method m = clazz.getDeclareMethod("destroy",null);

   5.2 调用方法

    m.invoke(obj,null);            --4.servlet的destroy方法被调用

servlet在第一次访问的时候初始化,init()-->service() 根据判断请求是post方式还是get方式,执行service中post方法或者get方法-->web程序停止或重新部署调用destroy()方法销毁

注意:

servlet是单列的,因为只会第一次访问的时候才会创建对象,后面访问都不会在创建对象。

证明:在servlet方法中写一个构造函数来证明。

servlet是线程不安全的?如何让servlet线程安全?


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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值