注意点

需要在web.xml中(或使用注释)进行描述

主要功能

(1)创建并返回包含客户请求的动态内容的完整HTML页面
(2)创建可嵌入到现有HTML页面的HTML片段
(3)与其他服务器资源进行通信
(4)接受多个客户机的输入,传递结果

生命周期

image.png
在服务器加载时便已经存在Servlet,进行init()初始化和service()服务(可调用多次)。
(1)web容器加载Servlet类
(2)创建Servlet对象实例
(3)Servlet初始化。
(4)容器生成请求和响应对象(两个对象)
(5)调用service方法提供服务
1.HttpServlet.service();
2.HttpServletResponse对象生成HTTP
(6)注销Servlet,调用HttpServlet.destroy()方法关闭所有资源

接口

Servlet接口

javax.servlet.Servlet是所有Java Servlet的基础接口,是封装了建立接收请求和产生响应功能的组件(即Servlet)。

image.png

HttpServlet类

HttpServlet类定义在javax.servlet.http包内,是针对使用HTTP协议的Web服务器的Servlet类。

image.png

ServletConfig接口

ServletConfig接口存放在javax.servlet包内,它是一个由Servlet容器使用的Servlet配置对象,用于在Servlet初始化时向它传递信息。

image.png

HttpServletRequest接口

HttpServletRequest接口定义在javax.servlet.http包内,代表客户端请求。

image.png

image.png

HttpServletResponse接口

定义在javax.servlet.http包内,代表对客户端的HTTP响应。

image.png

Servlet的编写与部署

创建Servlet类

package com.myservlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(description = "infoProcess", urlPatterns = { "/info" })    
public class ProcessServlet extends HttpServlet {   
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        String name=request.getParameter("name");
        String age=request.getParameter("age");
    }
}

这里采用注解的方式配置Servlet:@WebServlet(description = "infoProcess", urlPatterns = { "/info" })

目录结构

使用部署描述文件(DD)在web.xml中配置Servlet:

 <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>InfoServlet</servlet-name>
    <servlet-class>firstPrj.InfoServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>InfoServlet</servlet-name>
    <url-pattern>/servlet/info</url-pattern>
  </servlet-mapping>

如果要对一个JSP页面文件进行配置,则可通过下面的代码进行指定

<servlet>
    <description>Simple Servlet</description>
    <display-name>Servlet</display-name>
    <servlet-name>Login</servlet-name>
    <jsp-file>login.jsp</jsp-file>
</servlet>

配置Servlet初始化参数

 <servlet>
    <servlet-name>InfoServlet</servlet-name>
    <servlet-class>firstPrj.InfoServlet</servlet-class>
    <init-param>
        <param-name>number</param-name>
        <param-value>1000</param-value>
    </init-param>
 </servlet>

在Servlet中可以在init方法中通过getInitParameter()方法访问这些参数:

public void init() throws ServletException {
   String n=this.getInitParameter("number");
}

启动加载优先权

通过元素指定启动加载优先权。

<servlet>
    <servlet-name>ServletONE</servlet-name>
    <servlet-class>com.ServletONE</servlet-class>
    <load-on-startup>10</load-on-startup>
</servlet>
<servlet>
    <servlet-name>ServletTWO</servlet-name>
    <servlet-class>com.ServletTWO</servlet-class>
    <load-on-startup>20</load-on-startup>
</servlet>
<servlet>
    <servlet-name>ServletTHREE</servlet-name>
    <servlet-class>com.ServletTHREE</servlet-class>
    <load-on-startup>AnyTime</load-on-startup>
</servlet>

在这段代码中,ServletONE类先被载入,ServletTWO类则后被载入,而ServletTHREE类可在任何时间内被载入。负数看作0。

Servlet的映射

在web.xml配置文件中可以给一个Servlet做多个映射,因此,可以通过不同的方法访问这个Servlet

<servlet-mapping>
    <servlet-name>OneServlet</servlet-name>
    <url-pattern>/One</url-pattern>
</servlet-mapping>

通过上述代码的配置,若请求的路径中包含“/One”,则会访问逻辑名为“OneServlet”的Servlet。

<servlet-mapping>
    <servlet-name>OneServlet</servlet-name>
    <url-pattern>/Two/*</url-pattern>
</servlet-mapping>

通过上述配置,若请求的路径中包含“/Two/a”或“/Two/b”等符合“/Two/*”的模式,则同样会访问逻辑名为“OneServlet”的Servlet。

采用注解配置Servlet

采用注解配置Servlet的基本语法如下。

import javax.servlet.annotation.WebServlet;

@WebServlet(urlPatterns = {"/映射地址"},
asyncSupported = true|false, 
loadOnStartup = -1,
name = "Servlet名称",
displayName = "显示名称", 
initParams = {@WebInitParam(name = "username", value = "值")} 
)

在上面的语法中,urlPatterns属性用于指定映射地址;asyncSupported属性用于指定是否支持异步操作模式;loadOnStartup属性用于指定Servlet的加载顺序;name属性用于指定 Servlet 的name属性;displayName属性用于指定该Servlet的显示名;initParams属性用于指定一组 Servlet 初始化参数。

MVC设计模式

Q.E.D.


Welcome to our world !!