Servlet基础知识总结

来源:互联网 发布:最新网络语言 编辑:程序博客网 时间:2024/05/27 21:49
主题 概要 Web后端 Java Web后端,Servlet基础知识总结 编辑 时间 新建 20160704 序号 参考资料 1 Head First Servlet

Servlet简介

Servlet的存在就是要为客户服务。Servlet的任务是得到一个客户的请求,再发回一个响应。请求携带着一些重要的数据,你的servlet代码必须知道怎么找到和使用这个请求。响应也携带着一些信息,你的servlet代码必须知道怎么发送这些信息,或者不发送,而把请求传递给其他人(另一个页面,servlet,或者JSP)。
Servlet受容器的控制。容器控制着servlet的一生,它会创建请求和响应对象,为servlet创建或分配一个线程,并调用Servlet的Service()方法,把请求和响应对象的引用作为参数传递给servlet。
Servlet工作流程:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

Servlet生命周期

前面的流程图是从Servlet的生命中期开始,对于Servlet整个生命周期,需要知道,servlet类什么时候被加载?什么时候运行servlet的构造函数?servlet对象能活多久?又该什么时候清理资源?
Servlet的生命周期很简单:只有一个主要的状态:初始化。
如果servlet没有初始化,则要么正在进行初始化(运行其构造函数或init方法)、正在撤销(运行其destory方法)、要么就是还不存在。
这里写图片描述

Web容器控制器servlet时序图:
这里写图片描述
在整个生命周期中,涉及到的主要方法有:
1.init():servlet实例被创建之后,并在servlet能为客户请求提供服务之前,容器要对servlet调用init()函数。它的作用是使你在servlet处理客户请求之前有机会对其初始化。可能覆盖这个函数。
2.service():当第一个客户到来时,容器会开始一个新线程,或者从线程池分配一个线程,并调用servlet的service方法。这个方法根据请求类型(GET/POST),而调用servlet的对应方法,doGet,doPost等。自己不应该覆盖这个方法。
3.doGet,doPost:service根据请求类型来进行调用,这里是Web程序中真正想要做什么的主要代码。至少要覆盖其中之一。

Servlet配置参数

没有servlet能独立存在,在当前的的现代Web中,许多组件都是在一起协作共同完成一个目标。你会有模型、控制器、视图;会用到参数和属性;还有一些辅助类;怎么样把这些部分组织在一起,怎么让这些组件共享信息,如何隐藏信息,怎么让信息做到线程安全?
主要涉及到的配置参数有:
1.ServletConfig
a) 每个servlet有一个ServletConfig对象,用于向servlet传递部署时信息(例如,数据库或企业bean的查找名),而你不想把这个信息硬编码到servlet中;
b) 用于访问ServletContext;
c) 参数在部署文件中的布置;
2.ServletContext
a) 每个Web应用有一个ServletContext;
b) 用于访问Web应用参数(也在部署描述文件中配置);
c) 相当于应用中的一个公告栏,可以在这里放消息(称为属性),应用的其他部分可以访问这些消息;
d) 用于得到服务器信息,包括容器的名字和版本,以及所支持API的版本等。
3.Web配置文件(DD)
ServletConfig和ServletContext都放在Web.xml部暑文件中,分别为和对中。容器在初始化servlet的时候为这个servlet创建一个新的ServletConfig实例。注意,servlet初始化参数只能读一次。每个Servlet一个ServletConfig,每个Web应用一个ServletContext。

Servlet监听者

为了在Servlet或JSP之前运行一部分代码,需要一个监听者,通过监听一个上下文初始化事件,得到上下文初始化参数,并在应用为客户服务之前运行一些代码。主要思路是实现一个ServletContextListener接口,这个实现的主要功能是在servlet之前完成一些初始化工作,并把这个实现了ServletContextListener接口的类注册到Web部署文件中。
下面是书中一个实现了监听的完整的例程过程,通过实现ServletContextListener接口在servlet初始化之前,为ServletContext添加一个“dog”参数。Servlet初始化后,从ServletContext读出这个”dog”参数。代码并不多,主要是理解整个过程:
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
除了上下文监听者,也有其他类型的监听者,实现过程与此类似。

0 0