首先从应用层面上谈谈,Servlet是运行在服务器端的java应用程序,由servlet容器对其进行管理,当用户对容器发送Http请求时,通过web.xml配置文件servlet容器将找到并通知相应的servlet对象进行处理,从而完成与用户的交互。
短短几句话,看起来简单,但是可以这么说:“整个java web应用基本上都是基于sevlet技术的。”所以觉得有必要深入抠一下servlet的细节。
要深入servlet的话,首先有必要先把servlet容器搞一搞,servlet与servlet容器是相互依赖,但同时他们也是独立发展,这也是出于解耦的考虑。它们之间通过标准化接口来协同工作。
Servlet容器种类很多,这里仅仅谈谈常用的tomcat容器。Tomcat容器分为好几层,有container,engine,host,servlet容器,context,wrapper 如下图:
每一个context对应一个web应用,一般的是把一个servlet封装成wrapper放到容器里面运行。也就是说context容器是才是直接管理servlet的容器。当添加一个新的web应用时,tomcat会创建一个StandardContext容器。并且给这个容器配置一些参数,想url,path等。最重要的是contextconfig这个配置,因为之后整个web应用的解析都依靠这个配置。
Ok,那下面就稍微深入一点看看servlet。
. servlet初始化过程
首先web.xml作为整个web应用的入口,通过前面提到的contextconfig解析web.xml文件,从而初始化整个web应用。Config将web.xml中的配置内容解析为各个属性保存到webxml对象中,其中包括filter,listener,servlet等,并将这些放到context容器中,其中servlet是被解析问wrapper作为子容器放到context,而其他的直接解析放到context的。主要是因为servlet有自己独立的开发标准,不需要强耦合到容器中。
解析工作之后,就是实例化了,tomcat在启动时,会自动实例两个servlet即defaultservelt和jspservlet。其他的servlet是通过wrapper根据配置文件实例化的。
通过wrapper中的相应方法调用servlet的init方法初始化servlet,如果有jsp文件的话,则初始化的就是jspservlet,同时就会模拟一次简单请求,请求调用这个jsp文件从而编译为.class文件,并初始化这个class。
.servlet自身内部结构
Servlet顶层类关联图
(Tips: 这些接口的源代码都在javax.servlet包中,但是我找的时候没有找到,原来是因为使用的是jdk1.5标准版也就是j2se,而servlet是j2ee中使用的,所以可以下载j2ee开发包,或者是在tomcat的commod\lib下存在jsp和servlet的jar包。)
从上图可以看出servlet是基于这几个类的,request和response为交易对象,servletconfig是在init时有容器传过来的,主要负责配置方面的工作。Servletcontext主要是负责一些运行环境方面的属性像路径和url等。
这里主要谈谈request和response对象。已经我们常用的httpservlet和httpresponse对象的关系。
请看下图:
他们之间的转化过程:
从图中可以看出http线程处理socket发送到Tomcat容器,容器启动时首先先创建一个request和response对象,接着传给servlet应用是façade对象,目的也是为了封装容器request和response对象的细节。
.servlet如何工作?
用户从浏览器向服务器发起一个请求,通常会包含如下信息:http://hostname: port /contextpath/servletpath,hostname 和 port 是用来与服务器建立 TCP 连接,而后面的 URL 才是用来选择服务器中那个子容器服务用户的请求。那服务器是如何根据这个 URL 来达到正确的 Servlet 容器中的呢?
Tomcat7.0 中这件事很容易解决,因为这种映射工作有专门一个类来完成的,这个就是 mapper,这个类保存了 Tomcat 的 Container 容器中的所有子容器的信息,当 Request 类在进入 Container 容器之前,mapper 将会根据这次请求的 hostnane 和 contextpath 将 host 和 context 容器设置到 Request 的 mappingData 属性中。所以当 Request 进入 Container 容器之前,它要访问那个子容器这时就已经确定了。
Mapper中如何会有所有的这些容器完整关系,这里应用了一个设计模式叫做监听者模式,mapperlistener被加到每个子容器中,这样只要任何一个容器变化,监听器将会被通知。则相应的mapper属性会被修改。
Mapping之后中间会执行filter,listener等,之后就是调用service方法了。
一般的我们定义的servlet会继承httpservlet或者GenericServlet类直接选择覆盖相应方法,servlet就可以帮助完成相应工作了。
但是,现在大多数的应用都不直接用servlet来操作了,而是使用一些更有效的mvc框架,而这些框架的基本原理也都是将所有请求映射到一个servlet中,然后运行service方法,也就是mvc框架的入口。
之后就是从servlet容器中移除了。调用destroy方法就ok了。
(挺晚了,先这些吧。上面提到了监听者模式,明天发一篇关于该模式的和session和cookie的博客。)
- 大小: 14.4 KB
- 大小: 21.4 KB
- 大小: 30.5 KB
- 大小: 15.5 KB
分享到:
相关推荐
JSP Servlet 学习笔记 第2版 林信良 随书光盘 第3卷
**林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...
《JSP & Servlet学习笔记(第2版)》是作者多年来教学实践经验的总结,汇集了学生在学习JSP&Servlet;或认证考试时遇到的概念、操作、应用等各种问题及解决方案。 《JSP & Servlet学习笔记(第2版)》针对Servlet 3.0的...
Servlet学习笔记(java的Servlet)。 jsp的学习基础。此笔记可让你5天内学会使用Servlet,可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all
由于这部分内容是电子书中的学习笔记,电子书的内容并未直接给出,因此只能根据电子书的标题“JSP&Servlet学习笔记”和描述来推测可能涉及的知识点,而没有具体的电子书内容可以分析。如需进一步学习,建议查阅相关...
### Servlet学习笔记精炼知识点 #### 一、Servlet初始化与加载机制 1. **Servlet注册与实例化**:在Web应用中,一个Servlet的生命周期始于它的注册与实例化过程。通常,这一过程是在Web服务器启动时,根据`web.xml...
吉林大学珠海学院JSP&Servlet学习笔记(第二版)课后答案 本资源为吉林大学珠海学院JSP&Servlet学习笔记(第二版)的课后答案,涵盖了JSP和Servlet相关的知识点。本笔记共分为九章,每章节都包含了相关的问题答案,...
书 名:JSP & Servlet学习笔记(第2版) 作 者:(台湾)林信良 著 出 版 社:清华大学出版社 出版时间:2012-5-1 ISBN:9787302283669 纸书页数:456页 定 价:¥ 58.00 内容简介: 本书是作者多年来...
根据提供的文件信息,标题为“JSP&Servlet学习笔记(第2版)_打印版”,描述指出文档经过空白边裁剪处理以便于打印。虽然提供的部分内文无法直接转化为明确的知识点,但我们可以根据标题和描述推测该文档的主要内容,...
jsp&servlet学习笔记(第2版)光盘,买书附赠光盘,完片版本。
Java相关课程系列笔记之九Servlet学习笔记 Java相关课程系列笔记之十JSP学习笔记 Java相关课程系列笔记之十一Ajax学习笔记 Java相关课程系列笔记之十二jQuery学习笔记 Java相关课程系列笔记之十三Struts2学习笔记 ...
[JSP&Servlet学习笔记(第2版)] 林信良
**JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。
### Servlet学习笔记3:深入理解Servlet与Web应用资源管理 #### 标题解析与扩展知识点 **标题**:“Servlet学习笔记3”表明这是系列学习笔记的一部分,专注于Servlet技术的深入探讨。 **知识点**: 1. **Servlet...
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP &Servlet;时遇到的概念、操作、应用或认证考试等问题及解决方案。 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都...
本书是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习JSP & Servlet时遇到的概念、操作、应用或认证考试等问题及解决方案。, 本书针对Servlet 3.0的新功能全面改版,无论是章节架构与范例程序代码,都做...
### 方立勋servlet学习笔记知识点总结 #### 一、Servlet概述与生命周期 - **Service方法**:在Servlet中,`service`方法是核心方法之一,由服务器调用来处理客户端的请求。它根据HTTP请求类型(如GET或POST)调用...