【servlet学习一】:servlet体系结构和工作原理

来源:互联网 发布:济南行知小学作文 编辑:程序博客网 时间:2024/06/01 15:20

servlet体系架构

由于一直对servlet的理解模模糊糊,这次通过学习并记录来加深了解。

目录

  • servlet体系架构
    • 目录
    • servlet是什么
    • servlet包括
    • servlet生命周期
    • servlet工作原理
    • servlet是怎么工作的
    • servlet实际运用
    • 参考资料


servlet是什么

Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“request-response”编程模型来访问的这个运行在服务器内存里的Servlet程序。

servlet包括

Servlet API主要由两个Java包组成:

  1. javax.servlet 在javax.servlet包中定义了Servlet接口及相关的通用接口和类;
  2. javax.servlet.http 在javax.servlet.http包中主要定义了与HTTP协议相关的HttpServlet类,HttpServletRequest接口和HttpServletResponse接口;

servlet生命周期

在Servlet接口中定义了5个方法,其中3个方法都是由Servlet容器来调用的,容器会在Servlet的生命周期的不同阶段调用特定的方法:

  1. init(ServletConfig) —— 负责初始化Servlet对象,只调用一次,初次访问servlet时访问。
  2. service(ServletRquest req, ServletResponse res) ——处理业务逻辑;用户每次访问servlet’都会调用; req获取客户端的信息,res用于向客户端返回信息。
  3. destroy() —— 负责释放Servlet对象占用的资源。
    reload该servlet(webApps)(tomcat页面manager),
    关闭tomcat,
    关机会调用该方法。

servlet工作原理

servlet 类

servlet 类

servlet体系
与Servlet主动关联的是三个类,分别是ServletConfig,ServletRequest和ServletResponse。这三个类都是通过容器传递给Servlet的;其中,ServletConfig是在Servlet初始化时传给Servlet的,后两个是在请求到达时调用Servlet传递过来的。

servlet网络拓扑

servlet网络拓扑

  1. Web Client 向Servlet容器(Tomcat)发出Http请求
  2. Servlet容器接收Web Client的请求
  3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
  4. Servlet容器创建一个HttpResponse对象
  5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
  6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
  7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
  8. Servlet容器把HttpServlet的响应结果传给Web Client。

servlet是怎么工作的

这里写图片描述

hostname和port用来与服务器建立TCP连接,后面的URL用来选择在服务器中哪个子容器服务用户的请求。 在Tomcat7中,这种映射工作由专门的一个类完成:org.apache.tomcat.util.http.mapper,这个类保存了tomcat的container容器中的所有子容器的信息。org.apache.catalina.connector.Request类在进入Container容器之前,Mapper将会根据这次请求的hostname和contextpath将host和context容器设置到Request的mappingData属性中,所以当Request进入container容器之前,对于它要访问哪个子容器就已经确定了。

servlet实际运用

我们自己定义的servlet通常去继承HttpServlet或GenericServlet类。 采用MVC框架的实现中,其基本原理是将所有的请求都映射到一个Servlet,然后去实现servie方法,这个方法也就是MVC框架的入口。

参考资料

http://blog.csdn.net/robinjwong/article/details/17700011
http://www.jianshu.com/p/9cf44f932790