servlet是怎样工作的?初始化、session、共享变量、多线程

ServletContext

当servlet 容器(如tomcat)启动时,它会部署和加载所有的web应用,当一个web应用加载后,servlet容器会创建 一次ServletContext,并把它放到服务器的内存中。web应用的web.xml会被解析,其中的<servlet> , <filter>, <listener>标签(或注解@WebServlet @WebFilter @WebListener)都会初始化一次,并保存到服务器的内存中。对于每一个初始化filter,通过FilterConfig可以invoker它的init()方法。

当一个servlet容器关闭后,它会卸载所有的web应用,调用所以初始化的servlet的filter的destroy方法,所有的ServletContext ,Servlet, Fitler,Listener实例都会被销毁。

当一个Servlet配置了<servlet><load-on-startup>或@WebServlet(loadOnStartup)的值大于0,它的init方法在启动时会被调用生成一个新的ServletConfig,(值1是第1个启动,值2是第2个起启动,以此类推)。如果多个servlet配置了相同的值,以它们在web.xml出现的顺序或@WebSerlet类加的顺序。如果没有配置load-on-startup,那么它的init方法直到有http请求第一次调用此servlet时,才会被调用。

HttpServletRequest和HttpServletResponse

servlet容器会作为一个web服务器,监听特定端口的HTTP请求,当一个客户端(如web浏览器)发送HTTP请求时,servlet容器会创建新的HttpServletRequest和HttpServletResponse实体,并发送给Filter链,最后到达Servlet实例。

在Fitler中,doFilter方法会被调用 ,当调用chain.doFilter(request,response)时,会调用下一个filter或serlvet(没有下一个filter时)。

这个request对象提供了所有访问HTTP请求信息的方法,如获取header和body。response对象用于定制响应,当Http response完成后,request和response对象会被回收再利用。

HttpSession

当一个客户端第一次访问webapp或者通过request.getSession第一次获取HttpSession时,servlet容器会创建一个HttpSession对象,保存在服务器内存中,Servlet容器同样会在Http响应的头部通过Set-Cookie设置Cookie,JESSIONID是session的名字,sessionID是值。

根据HTTP cookie的规范,浏览器在cookie有效期间,后续的请求需要把cookie发送回来,Servlet容器会对每一个进来的HTTP请求检查cookie,并绑定内存中的HttpSession。

HttpSession的生命周期定义在web.xml中的<session-timeout>,默认是30分钟。过期后,servlet 容器会回收这个session,对于后续的请求创建新的session.

在客户端,session cookie会一直存活到浏览器停止运行前。

 

最后欢迎大家访问我的个人网站:1024s​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值