servlet体系架构
由于一直对servlet的理解模模糊糊,这次通过学习并记录来加深了解。
目录
servlet是什么
Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“request-response”编程模型来访问的这个运行在服务器内存里的Servlet程序。
servlet包括
Servlet API主要由两个Java包组成:
- javax.servlet 在javax.servlet包中定义了Servlet接口及相关的通用接口和类;
- javax.servlet.http 在javax.servlet.http包中主要定义了与HTTP协议相关的HttpServlet类,HttpServletRequest接口和HttpServletResponse接口;
servlet生命周期
在Servlet接口中定义了5个方法,其中3个方法都是由Servlet容器来调用的,容器会在Servlet的生命周期的不同阶段调用特定的方法:
- init(ServletConfig) —— 负责初始化Servlet对象,只调用一次,初次访问servlet时访问。
- service(ServletRquest req, ServletResponse res) ——处理业务逻辑;用户每次访问servlet’都会调用; req获取客户端的信息,res用于向客户端返回信息。
- destroy() —— 负责释放Servlet对象占用的资源。
reload该servlet(webApps)(tomcat页面manager),
关闭tomcat,
关机会调用该方法。
servlet工作原理
servlet 类
与Servlet主动关联的是三个类,分别是ServletConfig,ServletRequest和ServletResponse。这三个类都是通过容器传递给Servlet的;其中,ServletConfig是在Servlet初始化时传给Servlet的,后两个是在请求到达时调用Servlet传递过来的。
servlet网络拓扑
- Web Client 向Servlet容器(Tomcat)发出Http请求
- Servlet容器接收Web Client的请求
- Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
- Servlet容器创建一个HttpResponse对象
- Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
- HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
- HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
- 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