程序员的知识教程库

网站首页 > 教程分享 正文

SERVLET简述(servlet基本功能)

henian88 2024-08-15 21:54:49 教程分享 11 ℃ 0 评论

上一篇讲了用户输入url点击回车后DNS解析及CDN相关内容,这一次继续往下讲,讲一个很重要的内容--SERVLET,先上两张图。

先看图2-2,我们定义了一个TestServlet类,继承了HttpServlet,并在web.xml做了配置,其中<servlet>标签是在项目中声明了类的存在,而<servlet-mapping>则是给外界提供了一个调用这个类的入口。再看图2-1,当我在浏览器输入了http://localhost:8080/sd后,服务端接收到我的请求,根据这个url找到了<url-pattern>为“sd”的servlet,并将请求内容送到了TestServlet中,TestServlet经过各种处理后,将响应信息(可能是html,可能是json数据等)返回给了浏览器。这就是servlet的简要运行过程,当然整个过程不会这么简单,下面我们来详细说一说。

Tomcat开始启动时会将web.xml的各个配置项解析成相应的属性保存在WebXml对象中,然后将这些属性设置到Context容器中,其中包括servlet对象,它会被包装成Context容器中的StandardWrapper,也就是说在Tomcat里面,Context容器直接管理Servlet在容器中的包装类Wrapper,所以Context容器如何运行将直接影响Servlet的工作方式。

Wrapper. loadServlet方法会获取servletClass然后把它交给InstanceManager去创建一个基于servletClass.class的对象,2-2中的是DefaultServlet,如果是jsp就会是JspServlet,这两个配置可以在Tomcat的conf/web.xml里看到。对象创建好后就要开始初始化了,初始化Servlet在StandardWrapper的initServlet方法中,这个方法很简单,就是调用Servlet的init()方法,同时把包装了StandardWrapper对象的StandardWrapperFacade作为ServletConfig传给Servlet,这样Servlet对象就初始化完成了。

那么服务端接收到url请求时,又是怎么找到对应的servlet呢?Tomcat中有这样一个类org.apache.tomcat.util.http.mapper,它保存了Tomcat的Container容器中的所有子容器信息,org.apache.catalina.connector.Request类在进入Container容器之前,Mapper会根据请求的url匹配每个Servlet中配置的<url-pattern>将host和context容器设置到Request的mappingData属性中,所以当Request进入Container容器之前,它要访问哪个子容器就已经确定了。

总结一下,浏览器发送请求到服务端,服务端根据url找到对应的servlet,servlet生成数据后将数据返回给服务端,服务端再将响应数据给浏览器。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表