Servlet

1.Servlet

JavaServlet是和平台无关的服务器端组件,它运行在Servlet容器中。Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。

Servlet可完成如下的功能:

——创建并返回基于客户请求的动态HTML页面

——创建可嵌入到现有HTML页面中的部分HTML页面(HTML片段)

——与其他服务器资源(如数据库或基于Java的应用程序)进行通信

 Servlet

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中也可以使用*通配符,但是只能有两种固定的格式:一种格式是“*.扩展名”,另一种格式是以正斜杠(/)开头并以“/*”结尾。