Servlet生命周期及使用小细节

Servlet生命周期及使用小细节

Servlet生命周期

我们知道Servlet是跑在Tomcat服务器中的,我们也可以称Tomcat为Servlet容器(或者说Tomcat中包含Servlet容器)。每个Servlet又都存在着它的生命周期,接下来带大家去走一遍…
Servlet的生命周期主要分为以下几个阶段:构造器—>初始化init—>请求服务service—>doGet/dpPost—>销毁阶段destory,我们可以通过自己写一个Servlet类去继承HttpServlet重写相应的方法来观察它的运行顺序。

在这里插入图片描述
我们直接在客户端输入对应的处理地址,观察后台打印的信息如图
在这里插入图片描述
可以得知servlet的生命周期顺序为构造器—>初始化init—>请求服务service—>销毁阶段destory,有伙计就会问了,我咋没看到销毁阶段呢?博主是不是又在忽悠人了,原因是由于我们的容器还在跑或者说容器中的这个servlet并没有被销毁,所以还没有执行destory()方法。如果想要看到销毁阶段,我们可以停止运行服务器。结果如下!!!
在这里插入图片描述
所以,servlet的生命周期为:①创建对象,实例化;②初始化;③请求服务;④根据请求服务,调用doGet()或doPost()方法进行处理;⑤销毁;

Servlet创建时间

默认的情况下,容器中的servlet是要当我们去请求它的时候,它才会去创建相应的对象以及初始化等等。根据个人需求,我们可以对其进行配置,通过注解@WebServlet()中的属性loadOnStartup可以对其进行修改,loadOnStartup的默认值为负1,也就是当我们去请求相应的servlet时,它才会创建,初始化等等。我们可以修改loadOnStartup的值大于0(注解和xml都可以),当loadOnStartup的值大于0时,servlet会随着tomcat容器启动时就创建初始化哦!并且当loadOnStartup的值为正数时,越小越优先哦!在这里我就演示注解了。

在这里插入图片描述
结果如上文所说,当Tomcat启动时,servlet就创建并初始化了。
了解了以上的内容之后,大家是不是忽然觉得这与单例模式中的饿汉式与懒汉式非常非常的像呢?偷偷告诉大家:servlet是单例哦!!!

小细节

其实这个小细节才是我最想说的,相信大部分都不会注意到这个点的。在实际开发的过程中,生命周期不仅仅只是起到创建对象等功能,我们还可以把一些操作放在相应的生命周期中起到相应的作用。我在这里就想讲一下,一个比较常见的场景,我们可以通过写一个BaseServlet去继承HttpServlet重写它的相应方法,然后再写具体的功能子类去继承BaseServlet。如图:
在这里插入图片描述
在这里插入图片描述
这样在我们的具体功能Servlet类中,就不用去判断到底是Get还是Post了,并且有些通用的设置和方法我们都可以写在BaseServlet中的Service()中,是不是方便了很多。但这里有一点非常需要注意!!!
①BaseServlet中的Service()方法中的super.service(req,resp)不能丢,BaseServlet它本身并不具备去判断到底是Get请求还是Post请求,所以还是需要调用到HttpServlet中写好的方法底层去判断。
②当我们写一些设置和某些代码时,是写在super.service(req,resp) 这一句代码前还是后面呢???或许,大多数一见到super想到的就是它必须放在第一位置,所以得写在它后面,那就错了!!!这里我们需要写在super.service(req,resp)前面,因为在调用此方法时,里面进行了相应的判断,判断它是Get请求还是Post请求,然后调用了相应的doGet()或者doPost()方法进行处理,当处理完之后,才会回到service中继续执行。底层大家可以自己去了解,我这里直接给大家演示结果了。
大家可以先看下我添加的代码:
在这里插入图片描述
在这里插入图片描述
测试结果如下图:
在这里插入图片描述
符合我们所说的结果。

尾语

有错的话,感谢哥哥姐姐们的指点!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值