Java Web容器的启动与处理请求的过程
容器启动时的加载顺序
一、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<context-param>结点。
二、容创建一个ServletContext(servlet上下文),这个 web项目的所有部分都将共享这个上下文。
三、容器将<context-param>转换为键值对,并交给 servletContext。 因为listener, filter 等在初始化时会用到这些上下文中的信息,所以要先加载。
四、容器创建<listener>中的类实例,创建监听器。
五、加载filter和servlet
load- on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。
如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。
web.xml 的加载顺序是:context-param -> listener -> filter -> servlet。
容器处理请求的过程
当Web容器接收到来自客户端的请求信息之后,会根据URL中的Web元件地址信息到Servlet 队列中查找对应的Servlet对象,如果找到则直接使用,如果没有找到则加载对应的类,并创建对象。
也就是说,Servlet对象是在第一次被使用的时 候才创建的,并且一旦创建就会被反复使用,不再创建新的对象。所有创建出的Servlet对象会在Web服务器停止运行的时候统一进行垃圾回收。
参考文献:
http://blog.csdn.net/seelye/article/details/8469575