Servlet实现方式及生命周期

新增的注解支持@WebServlet

@WebServlet 用于将一个类声明为 Servlet,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为 Servlet。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是 vlaue 或者 urlPatterns 通常是必需的,且二者不能共存,如果同时指定,通常是忽略 value 的取值):
这里写图片描述


loadOnStartup

web服务器在启动阶段就实例化Servlet对象(通过servlet无参构造方法完成servlet实例化和调用servlet对象的init方法完成初始化。):

1. 在web,xml文件里加上 <load-on-startup>1</load-on-startup>
2. 或者在servlet3.0注解
@WebServlet(name="userservlet",urlPatterns="/servlrt/myservlet",loadOnStartup=1)


servlet实现的三种方式

  1. 实现servlet接口,重写里面的service方法,使用的时候需要引用servlet-api.jar。
  2. 继承GenericServlet ,重写里面的service方法。
  3. 通过继承HttpServlet,重写post或者get方法。

servlet生命周期

servlet从最初的建立、方法的调用、以及对对象的销毁,是由web容器管理的。默认情况下,servlet对象在web服务器启动阶段不会实例化。

描述生命周期

1 用户在地址栏输入URL:http://localhost:8080/servlet1/servlrt/myservlet
2. web容器拦截请求路径:/servlet1/servlrt/myservlet。
3. web容器在容器上下文中找请求路径对应的servlet对象。
4. 若没有找到对应的servlet对象。
       4.1 通过web.xml文件相关的配置信息,得到路径对应的servlet类名。
        4.2 通过反射机制,通过servlet无参构造方法完成servlet实例化。
        4.3 web容器调用servlet对象的init方法完成初始化。
       4.4 web容器调用servlet对象的service(dopost,doget)方法提供服务。
5. 若找到对应的servlet对象。
       5.1 web容器调用servlet对象的service(dopost,doget)方法提供服务。
6. web容器关闭或重新部署时,web容器会将该servlet对象销毁,在销毁之前,web容器会调用destroy方法。

总结

  1. servlet类的构造方法只执行一次。
  2. servlet对象init方法只执行一次。
  3. servlet对象的service方法,用户请求一次,调用一次。
  4. servlet对象destroy方法只执行一次。

servlet对象是单例,但是不符合单例模式,只能称为伪单例。Tomcat支持多线程,所以servlet对象在单例多线程的环境下运行。那么servlet对象中若有实例变量(成员变量),实例变量涉及到修改操作,那么这个servlet对象一定会存在线程安全问题,所以尽量使用局部变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值