1.Servlet
JavaServlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet可完成如下的功能:
——创建并返回基于客户请求的动态HTML页面
——创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)
——与其他服务器资源(如数据库或基于Java的应用程序)进行通信
2.第一个servlet—HelloServlet
1)创建一个Servlet接口的实现类
public class HelloServlet implements Servlet
2)在web.xml文件中配置和映射这个Servlet
<!--配置和映射Servlet-->
<servlet>
<!--servlet注册的名字-->
<servlet-name>HelloServlet</servlet-name>
<!--servlet的全类名-->
<servlet-class>com.demo.javaweb.HelloServlet</servlet-class>
<!--可以指定Servlet被创建的时机-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!--需要和某一个servlet节点的servlet-name子节点的文本节点一致-->
<servlet-name>HelloServlet</servlet-name>
<!--映射具体的访问路径:/代表当前web应用的根目录-->
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
3.Servlet容器:运行Servlet、JSP、Filter等的软件环境
1)可以用来创建Servlet,并调用Servlet的相关生命周期的方法
2)JSP,Filter,Listener,Tag。。。
4.Servlet生命周期的方法:以下方法是由Servlet容器负责调用
1)构造器:第一次请求Servlet时,创建Servlet实例,调用构造器
这说明Servlet是单实例的
2)init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前的servlet
3)service:被多次调用,每次请求都会调用service方法,实际用于响应请求的
4)destroy:只被调用一次,在当前servlet所在web应用被卸载前调用,用于释放servlet占用的资源
5.load-on-startup
1)配置在servlet节点中
<!--配置和映射Servlet--> <servlet> <!--servlet注册的名字--> <servlet-name>HelloServlet</servlet-name> <!--servlet的全类名--> <servlet-class>com.demo.javaweb.HelloServlet</servlet-class> <!--可以指定Servlet被创建的时机--> <load-on-startup>1</load-on-startup> </servlet>
2)load-on-startup:可以指定servlet被创建的时机,若为负数,则在第一次请求时被创建。若为0或正数,则在当前web应用被servlet容器加载时创建实例,且数组越小越早被创建
6.Servlet容器响应客户请求的过程
1)Servlet引擎检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步
2)装载并创建该Servlet的一个实例对象:调用该Servlet的构造器
3)调用Servlet实例对象的init()方法
4)创建一个用于封装请求的ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
5)WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法
7.Servlet的注册与运行
— Servlet程序必须通过Servlet容器来启动运行,并且储存目录有特殊要求,通常需要存储在<WEB应用程序目录>WEB-INFclasses目录中
— Servlet程序必须在WEB应用程序的web.xml文件中进行注册和映射其访问路径,才可以被Servlet引擎加载和被外界访问。
— 一个<servlet>元素用于注册一个Servlet,它包含有两个主要的子元素<servlet-name>和<servlet-class>,分别用于设置servlet的注册名称和servlet的完整类名
— 一个<servlet-mapping>元素用于映射一个已注册的servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定servlet的注册名称和servlet的对外访问路径。
8.Servlet映射的细节
~同一个Servlet可以被映射到的多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置值可以是同一个Servlet的注册名。
~在Servlet映射到URL中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。