Servlet生命周期

1. JSP和Servlet

  • JSP = HTML + Java(HTML代码里嵌有Java代码)
  • Servlet = Java + HTML(Java代码里写html代码/标签,如out.write("<HTML>")
  • JSP的特点在于视图,Servlet的特点在于实现控制逻辑;最原始的Servlet要返回视图的话,需要写大量out.write("<HTML>")…非常不方便
  • JSP本质就是一个Servlet,做的工作就是把JSP里的html + Java代码翻译回原始的形式
  • JSP的工作原理:JSP -> 翻译 -> Servlet(Java) -> 编译 -> Class (最终执行的文件)

2. Servlet生命周期

  • Servlet是单例模式(单实例),可以被很多客户端访问。这个单利是由web容器产生,比如Tomcat,JBOSS,weblogic等
  • 生命周期的流程:创建对象–>初始化–>service()–>doXXX()–>销毁
  • 创建对象的时机分为两种:
    1. 默认是第一次访问该Servlet的时候创建
    1. 也可以通过配置web.xml,来改变创建时机,比如DispatcherServlet(SpringMVC前端控制器)就是一个例子,DispatcherServlet不可以是谁来访问他,他才创建,应该在容器启动的时候就去创建,所以应当在web.xml中配置他:<load-on-startup>1</load-on-startup>
  • 执行的次数:对象的创建只有一次,单例;初始化一次;销毁一次;中间的service()会有多次

3. Servlet内部的service()

根据是什么方法(GET、POST)来作判断并调用具体的方法和业务
在这里插入图片描述

4. Servlet的线程安全问题

  • Servlet不是线程安全的
  • 构成线程不安全三个因素:
    1. 多线程的环境(有多个客户端,同时访问Servlet)
    1. 多个线程共享资源,比如一个单例对象(Servlet是单例的)
    1. 这个单例对象是有状态的(比如在Servlet方法中采用全局变量,并且以该变量的运算结果作为下一步操作的判断依据)
  • 由于Servlet在Tomcat中是以单例模式存在的,所有的线程共享实例变量。多个线程对共享资源的访问就造成了线程不安全问题。
  • 解决办法:在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的

参考:

  1. 45,描述JSP和Servlet的区别
  2. 44,谈谈Servlet的生命周期
  3. 面试题,Servlet 线程安全吗?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值