servlet容器_谈谈 web容器请求处理流程

什么是web容器?

Web容器是一种服务程序,给处于其中的应用程序组件提供环境,使其直接跟容器中的环境变量交互,不必关注其它系统问题。主要由应用服务器来实现,如Tomcat、JBoss,Weblogic、WebSphere等。

最常见的tomcat就是这样一个容器。如果web服务器应用得到一个指向某个servlet的请求,此时服务器不是把servlet交给servlet本身,而是交给部署该servlet的容器。要有容器向servlet提供http请求和响应,而且要由容器调用servlet的方法,如doPost或者doGet。

容器启动时的加载顺序

1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取结点。

2、容创建一个ServletContext(servlet上下文),这个 web项目的所有部分都将共享这个上下文。

3、容器将转换为键值对,并交给 servletContext。 因为listener, filter 等在初始化时会用到这些上下文中的信息,所以要先加载。

4、容器创建中的类实例,创建监听器。

5、加载filter和servlet

load- on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。

如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。

web.xml 的加载顺序是:context-param -> listener -> filter -> servlet。

651250f8930d049dc6370f1521932d57.png

web容器的作用

servlet需要由web容器来管理,那么采取这种机制有什么好处呢?

通信支持 :

利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立server搜创可贴,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。

生命周期管理 :

容器负责servlet的整个生命周期。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。

多线程支持 :

容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。

声明式实现安全 :

利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。

2fb01f387b2fb28f559e343a1d867b37.png

处理流程

1.浏览器发出请求,被web容器获取到

2.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。

3.装载并创建该Servlet的一个实例对象,调用Servlet实例对象的init()方法。

4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。

5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

431e8b784a25a755ff9c244d968bd8c2.png

好啦今天的文章就到这里了喜欢的话关注一下吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值