Servlet原理分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Martind/article/details/81178715

Tomcat中Servlet实例是以Wrapper出现的,Context容器是直接管理Servlet在容器中的包类Wrapper,Context容器如何运行将直接影响Servlet的工作方式。Servlet分四个等级,真正管理Servlet的容器是Context容器,一个Context容器对应一个web工程。

å¾ 1 . Tomcat 容å¨æ¨¡å

Context的标准实现是org.apache.catalina.core.StandardContext

一个Web应用对应一个Context容器,也就是Servlet运行时的Servlet容器,添加一个web应用时将会创建一个StandardContext容器,并且给这个Context容器设置必要的参数,url和path分别代表这个应用在Tomcat中的访问路径和这个应用的实际的物理路径,ContextConfig,这个类将会负责整个web应用配置的解析工作,最后将这个Context容器加到父容器Host中。

创建Servlet实例

如果Servlet的load-on-startup配置项大于0,那么在Context容器启动的时候会被实例化,在解析配置文件的时候会读取默认的globalWebXml,在conf下的web.xml文件中定义了一些默认的配置项,其定义了两个Servlet,分别是org.apache.catalina.servlets.DefaultServlet 和 org.apache.jasper.servlet.JspServlet 它们的 load-on-startup 分别是 1 和 3,也就是当 Tomcat 启动时这两个 Servlet 就会被启动。

创建Servlet实例的方法是从Wrapper.loadServlet开始的。loadServlet方法要完成的就是获取servletClass然后把它交给InstanceManager去创建一个基于servletClass.class的对象。如果这个Servlet配置了jsp-file,那么这个servletClass就是conf/web.xml中定义的org.apache.jasper.servlet.JspServlet了。

Servlet是如何工作的:

当用户从浏览器向服务器发送一个请求,通常包含如下信息:http://hostname:port/contextpath/servletpath,hostname和port是用来与服务器建立TCP连接,而后面的URL才是用来选择服务器中的那个子容器服务用户的请求。

服务器是如何根据URL来达到找到正确的Servlet容器中的?

Tomcat是通过org.apache.tomcat.util.http.mapper,这个类保存了Tomcat的Container中的所有子容器的信息,当org.apache.catalina.connector.Request类在进入Container容器之前,mapper将会根据这次请求的hostname和contextpath将host和context容器设置到Request的mappingData属性中。所以当Request进入Container容器之前,他要访问那个子容器就已经确定了。

参考文档

猜你喜欢

转载自blog.csdn.net/Martind/article/details/81178715