Servlet教程思维导图和学习笔记

目录

为什么要学习Servlet

Servlet到底是什么

Servlet是一种规范

Servlet接口

JSP

Servlet版本

Applet

Servlet容器(Web容器)是什么

Web服务器

Web容器

​编辑

总结

Tomcat下载和安装

具体网上有很多教程

​编辑

几个常用的 Tomcat 命令

​编辑

Servlet三种创建方式

Servlet接口

GenericServlet 抽象类

HttpServlet 抽象类

总结

Servlet的部署和访问

javaweb应用

部署

@WebServlet注解(Servlet注解)

@WebServlet注解的属性

@WebServlet注解的使用

Servlet生命周期

​编辑

load-on-startup元素:控制Servlet启动优先级

Servlet虚拟路径映射

Servlet单一映射

Servlet多重映射

Servlet虚拟路径匹配规则

ServletConfig接口详解

获得ServletConfig对象(一般有两种方法)

ServletConfig接口提供的方法

配置Servlet初始化参数(2种方式)

获取Servlet初始化参数

ServletContext接口详解

获得ServletContext对象(4种方法)

ServletContext的应用

HttpServletRequest接口详解

​编辑

HttpServletRequest 接口

HttpServletResponse接口详解

Servlet请求转发

RequestDispatcher 接口

request 域对象

Servlet重定向

Servlet Cookie的使用

Servlet Session的使用

Session 的生命周期

Servlet Filter(过滤器)

FilterChain过滤器链(Servlet)

FilterConfig接口(Servlet)

Servlet Listener(监听器)


为什么要学习Servlet

Servlet到底是什么

Servlet是一种规范

Servlet接口

JSP

学习 Servlet 的正确顺序是:Java --> Servlet。

学习 JSP 的正确顺序是:Java --> Servlet --> JSP

Servlet版本

Applet

Java Servlet 是“服务器端小程序”,运行在服务器上,用来开发动态网站; Java Applet 是“客户端小程序”,一般被嵌入到 HTML 页面,运行在支持 Java 的浏览器中。

Applet 和 Servlet 都是基于 Java 的一种技术,功能都非常强大,但是 Applet 开发步骤繁杂,而且只能在安装 Java 虚拟机(JVM)的计算机上运行,现在已经被 JavaScript 全面替代,几乎没有人再学习 Applet。

Servlet容器(Web容器)是什么

运行 PHP 网站一般选择 Apache 或者 Nginx; 运行 ASP/ASP.NET 网站一般选择 IIS; 运行 Python 网站一般选择内置的 WSGI 服务器模块——wsgiref。

Web 服务器是一种对外提供 Web 服务的软件,它可以接收浏览器的 HTTP 请求,并将处理结果返回给浏览器。  在部署 Servlet 网站时,同样需要一种类似的软件,例如 Tomcat、Jboss、Jetty、WebLogic 等,但是它们通常被称为“容器”,而不是“服务器”

Web服务器

通常所说的 Web 服务器,比如 Apache、Nginx、IIS 等,它们的功能往往都比较单一,只能提供 http(s) 服务,让用户访问静态资源(HTML 文档、图片、CSS 文件、JavaScript 文件等),它们不能执行任何编程语言,也不能访问数据库,更不能让用户注册和登录。  也就是说,如果只有 Web 服务器,那您只能部署静态网站,不能部署动态网站。要想部署动态网站,必须要有编程语言运行环境(运行时,Runtime)的和数据库管理系统的支持。

运行环境:开发网站使用的编程语言一般都是脚本语言(比如 PHP、ASP、Python),部署网站时都是将源代码直接扔到服务器上,然而源代码自己并不能运行,必须要有解释器的支持;当用户访问动态页面时,解释器负责分析、编译和执行源代码,然后得到处理结果。

数据库:Web 服务器不带数据库,编程语言也不带数据库,数据库是一款独立的软件;要想实现用户注册、发布文章、提交评论等功能,就必须安装一款数据库

总结:部署动态网站一般至少需要三个组件,分别是 Web 服务器、脚本语言运行时和数据库

Web容器

Servlet 中的容器用来装类,装对象

Servlet容器在整个HTTP请求流程中的位置

将Web容器当做服务器使用后

Web 服务器是整个动态网站的“大门”,用户的 HTTP 请求首先到达 Web 服务器,Web 服务器判断该请求是静态资源还是动态资源:如果是静态资源就直接返回,此时相当于用户下载了一个服务器上的文件;如果是动态资源将无法处理,必须将该请求转发给 Servlet 容器。  Servlet 容器接收到请求以后,会根据配置文件(web.xml)找到对应的 Servlet 类,将它加载并实例化,然后调用其中的方法来处理用户请求;处理结束后,Servlet 容器将处理结果再转交给 Web 服务器,由 Web 服务器将处理结果进行封装,以 HTTP 响应的形式发送给最终的用户。

总结

Servlet 容器就是 Servlet 程序的运行环境,它主要包含以下几个功能: 实现 Servlet 规范定义的各种接口和类,为 Servlet 的运行提供底层支持; 管理用户编写的 Servlet 类,以及实例化以后的对象; 提供 HTTP 服务,相当于一个简化的服务器。

Tomcat下载和安装

具体网上有很多教程

bin 目录 bin 目录用来存放 Tomcat 命令,主要分为两大类,一类是以.sh结尾的 Linux 命令,另一类是以.bat结尾的 Windows 命令。很多环境变量都在此处设置,例如 JDK 路径、Tomcat 路径等。

conf 目录 conf 目录主要是用来存放 Tomcat 的配置文件

常用到的几个文件: server.xml 用来设置域名、IP、端口号、默认加载的项目、请求编码等; context.xml 用来配置数据源等; tomcat-users.xml 用来配置和管理 Tomcat 的用户与权限; web.xml 可以设置 Tomcat 支持的文件类型; 在 Catalina 目录下可以设置默认加载的项目。

lib 目录 lib 目录主要用来存放 Tomcat 运行需要加载的 jar 包

logs 目录 logs 目录用来存放 Tomcat 在运行过程中产生的日志文件,清空该目录中的文件不会对 Tomcat 的运行带来影响。  在 Windows 系统中,控制台的输出日志在 catalina.xxxx-xx-xx.log 文件中;在 Linux 系统中,控制台的输出日志在 catalina.out 文件中。

temp 目录 temp 目录用来存放 Tomcat 在运行过程中产生的临时文件,清空该目录中的文件不会对 Tomcat 的运行带来影响。

webapps 目录 webapps 目录用来存放应用程序(也就是通常所说的网站),当 Tomcat 启动时会去加载 webapps 目录下的应用程序,我们编写的 Servlet 程序就可以放在这里。Tomcat 允许以文件夹、war 包、jar 包的形式发布应用

work 目录 work 目录用来存放 Tomcat 在运行时的编译文件(也即 class 字节码文件),例如 JSP 编译后的文件。清空 work 目录,然后重启 Tomcat,可以达到清除缓存的作用。

几个常用的 Tomcat 命令

startup.sh/startup.bat:用来启动 Tomcat; shutdown.sh/shutdown.bat:用来关闭 Tomcat; catalina.bat/ catalina.bat:用来设置 Tomcat 的内存。

Servlet三种创建方式

在 Servlet 中,一个动态网页对应一个 Servlet 类,我们可以通过 web.xml 配置文件将 URL 路径和 Servlet 类对应起来。访问一个动态网页的过程,实际上是将对应的 Servlet 类加载、实例化并调用相关方法的过程;网页上显示的内容,就是通过 Servlet 类中的某些方法向浏览器输出的 HTML 语句。

使用 Servlet 创建动态网页的第一步,就是创建 Servlet 类。  Servlet 规范的最顶层是一个名为 javax.servlet.Servlet 的接口,所有的 Servlet 类都要直接或者间接地实现该接口。直接实现 Servlet 接口不太方便,所以 Servlet 又内置了两个 Servlet 接口的实现类(抽象类),分别为 GenericServlet 和 HttpServlet,因此,创建 Servlet 类有如下三种方式: 实现 javax.servlet.Servlet 接口,重写其全部方法。 继承 javax.servlet.GenericServlet 抽象类,重写 service() 方法。 继承 javax.servlet.http.HttpServlet 抽象类,重写 doGet() 或 doPost() 方法。

Servlet、GenericServlet 、HttpServlet 的关系

GenericServlet 是实现了 Servlet 接口的抽象类。 HttpServlet 是 GenericServlet 的子类,具有 GenericServlet 的一切特性。 Servlet 程序(MyServlet 类)是一个实现了 Servlet 接口的 Java 类。

Servlet接口

javax.servlet.Servlet 是 Servlet API 的核心接口,所有的 Servlet 类都直接或间接地实现了这一接口。

GenericServlet 抽象类

javax.servlet.GenericServlet 实现了 Servlet 接口,并提供了除 service() 方法以外的其他四个方法的简单实现。通过继承 GenericServlet 类创建 Servlet ,只需要重写 service() 方法即可,大大减少了创建 Servlet 的工作量。

HttpServlet 抽象类

javax.servlet.http.HttpServlet 继承了 GenericServlet 抽象类,用于开发基于 HTTP 协议的 Servlet 程序。由于 Servlet 主要用来处理 HTTP 的请求和响应,所以通常情况下,编写的 Servlet 类都继承自 HttpServlet。  在 HTTP/1.1 协议中共定义了 7 种请求方式,即 GET、POST、HEAD、PUT、DELETE、TRACE 和 OPTIONS。  HttpServlet 针对这 7 种请求方式分别定义了 7 种方法,即 doGet()、doPost()、doHead()、doPut()、doDelete()、doTrace() 和 doOptions()。  HttpServlet 重写了 service() 方法,该方法会先获取客户端的请求方式,然后根据请求方式调用对应 doXxx 方法。

总结

三种创建 Servlet 的方式 1) Servlet 接口 通过实现 Servlet 接口创建 Servlet 类,需要重写其全部的方法,比较繁琐,很少使用该方法创建 Servlet。 2) GenericServlet 类 GenericServlet 抽象类实现了 Servlet 接口,并对 Servlet 接口中除 service() 方法外的其它四个方法进行了简单实现。通过继承 GenericServlet 创建 Servlet,只需要重写 service() 方法即可,大大减少了创建 Servlet 的工作量。  Generic 是“通用”的意思,正如其名,GenericServlet 是一个通用的 Servlet 类,并没有针对某种场景进行特殊处理,尤其是 HTTP 协议,我们必须手动分析和封装 HTTP 协议的请求信息和响应信息。 3) HttpServlet 类 HttpServlet 是 GenericServlet 的子类,它在 GenericServlet 的基础上专门针对 HTPP 协议进行了处理。HttpServlet 为 HTTP 协议的每种请求方式都提供了对应的方法,名字为 doXxx(),例如: 处理 GET 请求的方法为 doGet(); 处理 POST 请求的方法为 doPost()。  正如其名,HttpServlet 就是专为 HTTP 协议而量身打造的 Servlet 类。  在互联网上,人们都是通过 HTTP 协议来访问动态网页的,其中使用最频繁的就是 GET 方式和 POST 方式,因此,我们通常基于 HttpServlet 来创建 Servlet 类,这样就省去了处理 HTTP 请求的过程。

Servlet的部署和访问

javaweb应用

由一组 Servlet/JSP、HTML 文件、相关 Java 类、以及其他的资源组成,它可以在由各种供应商提供的 Servlet 容器中运行。由 JavaWeb 应用的定义可知, Servlet 是 JavaWeb 应用的一个组件。

每种组件在 JavaWeb 应用中都有固定的存放目录。

webapps 的目录结构如下图。

部署

最快捷的方式,就是直接将 JavaWeb 应用的所有文件复制到 Tomcat 的 /webapps 目录下。

具体操作步骤

1.进入Windows DOS命令行窗口

2.引入javax.servlet包

3.编译Servlet

4.创建目录结构

5.将Servlet移动到Tomcat目录中

6.配置web.xml

web.xml 中各元素含义及用法如下: <web-app>: 根元素。 <servlet> :用于注册 Servlet,即给 Servlet 起一个独一无二的名字。 <servlet> 包含两个主要的子元素 <servlet-name> 和 <servlet-class>,分别用于指定 Servlet 的名称和 Servlet 的完整限定名(包名+类名)。 <servlet-mapping> :用于定义 Servlet 与 URL 之间的映射。 <servlet-mapping> 包含两个子元素 <servlet-name> 和 <url-pattern>,分别用于指定 Servlet 的名称和虚拟路径。

访问

访问路径 http://localhost:8080/servletDemo/MyServlet 中,各部分含义如下:  http:// 表示 HTTP 协议; localhost: 表示服务器 IP; 8080 表示端口号; /servletDemo 表示 Web 应用的上下文根路径; /MyServlet 表示资源路径,即 web.xml 中 <url-pattern> 元素的取值

@WebServlet注解(Servlet注解)

@WebServlet注解的属性

@WebServlet 用于将一个类声明为 Servlet,该注解会在部署时被容器处理,容器根据其具体的属性配置将相应的类部署为 Servlet

一些常用属性

@WebServlet注解的使用

1. 启用注解支持 web.xml 的顶层标签 <web-app> 中有一个属性:metadata-complete,该属性用于指定当前 web.xml 是否是完全的。若该属性设置为 true,则容器在部署时将只依赖 web.xml,忽略所有的注解。若不配置该属性,或者将其设置为 false,则表示启用注解支持。由于 metadata-complete 属性的默认值是 false,即默认启用 Servlet 注解支持,所以默认情况下,使用该注解时,不必创建 web.xml 文件。

2. 使用 @WebServlet 注解 @WebServlet 属于类级别的注解,标注在继承了 HttpServlet 的类之上。常用的写法是将 Servlet 的相对请求路径(即 value)直接写在注解内,如下所示。 @Web​Servlet("/MyServlet")  如果 @WebServlet 中需要设置多个属性,则属性之间必须使用逗号隔开 该写法省略了 urlPatterns 属性名,其完整的写法如下所示。 @WebServlet(​urlPatterns = "/MyServlet")。

注意事项:

通过实现 Serlvet 接口或继承 GenericServlet 创建的 Servlet 类无法使用 @WebServlet 注解。 使用 @WebServlet 注解配置的 Servlet 类,不要在 web.xml 文件中再次配置该 Servlet 相关属性。若同时使用 web.xml 与 @WebServlet 配置同一 Servlet 类,则 web.xml 中 <servlet-name> 的值与注解中 name 取值不能相同,否则容器会忽略注解中的配置。

@WebServlet 注解 和 web.xml 的优缺点 使用 web.xml 或 @WebServlet 注解都可以配置 Servlet, 两者各有优缺点。 @WebServlet 注解配置 Servlet 优点:@WebServlet 直接在 Servlet 类中使用,代码量少,配置简单。每个类只关注自身业务逻辑,与其他 Servlet 类互不干扰,适合多人同时开发。  缺点:Servlet 较多时,每个 Servlet 的配置分布在各自的类中,不便于查找和修改。 web.xml 配置文件配置 Servlet 优点:集中管理 Servlet 的配置,便于查找和修改。  缺点:代码较繁琐,可读性不强,不易于理解。

Servlet生命周期

Servlet 也有生命周期,Servlet 的生命周期就是 Servlet 从创建到销毁的过程。Servlet 的生命周期由 Servlet 容器管理,

主要分为以下 3 个阶段。

初始化阶段

运行时阶段

销毁阶段 

在 javax.servlet.Servlet 接口中定义了 3 个方法:init()、service()、destory(),它们分别在 Servlet 生命周期的不同阶段被 Servlet 容器调用

初始化阶段

Servlet 初始化是其生命周期的第一个阶段,也是其他阶段的基础。只有完成了初始化,Servlet 才能处理来自客户端的请求。 

Servlet 初始化阶段分为 2 步:

加载和实例化 Servlet;

调用 init() 方法进行初始化。

1. 加载和实例化 Servlet Servlet 容器负责加载和实例化 Servlet。当容器启动或首次请求某个 Servlet 时,容器会读取 web.xml 或 @WebServlet 中的配置信息,对指定的 Servlet 进行加载。加载成功后,容器会通过反射对 Servlet 进行实例化。 因为 Servlet 容器是通过 Java 的反射 API 来创建 Servlet 实例的,需要调用 Servlet 的默认构造方法(default constructor,即不带参数的构造方法),所以在编写 Servlet 类时,不能只提供一个带参数的构造方法。 

2. 调用 init() 方法进行初始化 加载和实例化完成后,Servlet 容器调用 init() 方法初始化 Servlet 实例。  初始化的目的:让 Servlet 实例在处理请求之前完成一些初始化工作,例如建立数据库连接,获取配置信息等。  在 Servlet 的整个生命周期内,init() 方法只能被调用一次。  初始化期间,Servlet 实例可以通过 ServletConfig 对象获取在 web.xml 或者 @WebServlet 中配置的初始化参数。

运行时阶段

运行时阶段是 Servlet 生命周期中最重要的阶段。Servlet 容器接收到来自客户端请求时,容器会针对该请求分别创建一个 ServletRequst 对象和 ServletResponse 对象,将它们以参数的形式传入 service() 方法内,并调用该方法对请求进行处理。 

这里需要注意的是,执行 service() 方法前,init() 方法必须已成功执行。 

在 service() 方法中,Servlet 通过 ServletRequst 对象获取客户端的相关信息和请求信息。在请求处理完成后,通过 ServletResponse 对象将响应信息进行包装,返回给客户端。当 Servlet 容器将响应信息返回给客户端后,ServletRequst 对象与 ServletResponse 对象就会被销毁。  在 Servlet 的整个生命周期内,对于 Servlet 的每一次请求,Servlet 容器都会调用一次 service() 方法,并创建新的 ServletRequest 和 ServletResponse 对象。即 service() 方法在 Servlet 的整个生命周期中会被调用多次。

销毁阶段

当 Servlet 容器关闭、重启或移除 Servlet 实例时,容器就会调用 destory() 方法,释放该实例使用的资源,

例如:关闭数据库连接,关闭文件的输入流和输出流等,随后该实例被 Java 的垃圾收集器所回收。  对于每个 Servlet 实例来说,destory() 方法只能被调用一次。

load-on-startup元素:控制Servlet启动优先级

load-on-startup 是 web.xml 中的一个节点,是 servlet 元素的子元素,用来标记 Servlet 容器启动时是否初始化当前 Servlet,以及当前 Servlet 的初始化顺序。 

load-on-startup 元素取值规则如下:

1. 它的取值必须是一个整数;

2. 当值小于 0 或者没有指定时,则表示容器在该 Servlet 被首次请求时才会被加载;

3. 当值大于 0 或等于 0 时,表示容器在启动时就加载并初始化该 Servlet,取值越小,优先级越高;

4. 当取值相同时,容器就会自行选择顺序进行加载。 @WebServlet 注解的 loadOnStartup 属性与 web.xml 中的 load-on-startup 元素相对应,取值的规则和含义相同。

Servlet虚拟路径映射

客户端通过 URL 地址来访问 Web 服务器中的资源,Servlet 程序若想被外界访问,就必须被映射到一个 URL 地址上。很多时候,该 URL 地址和 Servlet 程序的物理路径(在硬盘上的存储位置)并不一致,因此它被称为虚拟路径。Servlet 与虚拟路径的对应关系就叫做 Servlet 虚拟路径映射。 

Servlet 虚拟路径映射可以被分为 2 类:

单一映射

多重映射

Servlet单一映射

Servlet 单一映射的实现方式有 2 种:

* 使用 web.xml 实现单一映射;

* 使用 @WebServlet 实现单一映射。

web.xml 实现单一映射

在 web.xml 文件中,使用 <servlet> 和 <servlet-mapping> 元素实现 Servlet 单一映射

@WebServlet 实现单一映射

在 @WebServlet 注解中,一般使用 value 属性实现 Servlet 单一映射=》@WebServlet("虚拟路径");

也可以使用 urlPatterns 属性实现 Servlet 单一映射=>@WebServlet("urlPatterns="虚拟路径")

Servlet多重映射

Servlet 的多重映射是指一个 Servlet 可以被映射到多个虚拟路径上。此时,客户端可以通过多个路径实现对同一个 Servlet 的访问。 

Servlet 多重映射的实现方式有 3 种:

配置多个 <servlet-mapping> 元素。

配置多个 <url-pattern> 子元素。

在 @WebServlet 的 urlPatterns 属性中使用字符串数组

配置多个 <servlet-mapping> 元素

配置多个 <servlet-mapping> 元素 Servlet 2.5 规范之前,<servlet-mapping> 元素只允许包含一个 <url-pattern> 子元素,若要实现 Servet 的多重映射,只能通过配置多个 <servlet-mapping> 元素实现。

配置多个 <url-pattern> 子元素

从 Servlet 2.5 开始,<servlet-mapping> 元素可以包含多个 <url-pattern> 子元素,每个 <url-pattern> 代表一个虚拟路径的映射规则。因此,通过在一个 <servlet-mapping> 元素中配置多个 <url-pattern> 子元素,也可以实现 Servlet 的多重映射。

@WebServlet 实现多重映射

Servlet 3.0 增加了对 @WebServlet 注解的支持,我们可以在 urlPatterns 属性中,以字符串数组的形式指定一组映射规则来实现 Servlet 的多重映射。

Servlet虚拟路径匹配规则

匹配规则有以下 4 种:

1. 完全路径匹配

2. 目录匹配

3. 扩展名匹配

4. 缺省匹配(默认匹配)

匹配优先级 Servlet 虚拟路径的匹配优先级顺序为:全路径匹配(精确匹配)> 目录匹配 > 扩展名匹配 > 缺省匹配(默认匹配)。 

Servlet 容器会从优先级高的虚拟路径开始匹配,匹配成功后就会立刻将请求交给相应的 Servlet 进行处理,不会再关注其他虚拟路径是否匹配成功。

ServletConfig接口详解

Servlet 容器初始化 Servlet 时,会为这个 Servlet 创建一个 ServletConfig 对象,并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。  一个 Web 应用中可以存在多个 ServletConfig 对象,一个 Servlet 只能对应一个 ServletConfig 对象,即 Servlet 的初始化参数仅对当前 Servlet 有效。

获得ServletConfig对象(一般有两种方法)

1. 直接从带参的 init() 方法中提取

2. 调用 GenericServlet 提供的 getServletConfig() 方法获得

ServletConfig接口提供的方法

配置Servlet初始化参数(2种方式)

1. 使用 web.xml 配置初始化参数

在 web.xml 中可以使用一个或多个 <init-param> 元素为 Servlet 配置初始化参数

2. 使用 @WebServlet 配置初始化参数

通过 @WebServlet 的 initParams 属性也可以为 Servlet 设置初始化参数

获取Servlet初始化参数

ServletContext接口详解

ServletContext 对象的生命周期从 Servlet 容器启动时开始,到容器关闭或应用被卸载时结束。

获得ServletContext对象(4种方法)

1. 通过GenericServlet提供的getServletContext()方法

2. 通过ServletConfig提供的getServletContext()方法

3. 通过HttpSession提供的getServletContext()方法

4. 通过HttpServletRequest提供的getServletContext()方法

ServletContext的应用

获取上下文初始化参数

分为 2 步:

1) 设置上下文初始化参数

2) 调用接口中方法获取初始化参数

实现Servlet之间的数据通讯

在 Servlet 中,调用 ServletContext 接口的 setAttribute() 方法可以创建一些属性,这些属性被存放在 ServletContext 对象中。应用中所有 Servlet 都可以对这些属性进行访问和操作,通过它们可以实现应用内不同 Servlet 之间的数据通讯

读取Web应用下的资源文件

ServletContext 接口定义了一些读取 Web 资源的方法

HttpServletRequest接口详解

HttpServletRequest 接口

HttpServletRequest 对象专门用于封装 HTTP 请求消息,简称 request 对象。 

HTTP 请求消息分为请求行、请求消息头和请求消息体三部分,所以 HttpServletRequest 接口中定义了获取请求行、请求头和请求消息体的相关方法。

HttpServletResponse接口详解

HttpServletResponse 对象专门用来封装 HTTP 响应消息,简称 response 对象。

HttpServletResponse 接口中定义了向客户端发送响应状态码、响应头、响应体的方法

Servlet请求转发

请求转发属于服务器行为。容器接收请求后,Servlet 会先对请求做一些预处理,然后将请求传递给其他 Web 资源,来完成包括生成响应在内的后续工作

RequestDispatcher 接口

Servlet 可以通过 2 种方式获得 RequestDispatcher 对象:

1. 调用 ServletContext 的 getRequestDispatcher(String path) 方法,参数 path 指定目标资源的路径,必须为绝对路径;

2. 调用 ServletRequest 的 getRequestDispatcher(String path) 方法,参数 path 指定目标资源的路径,可以为绝对路径,也可以为相对路径。

request 域对象

request 是 Servlet 的三大域对象之一,它需要与请求转发配合使用,才可以实现动态资源间的数据传递。

Servlet重定向

重定向属于客户端行为。服务器在收到客户端请求后,会通知客户端浏览器重新向另外一个 URL 发送请求,这称为请求重定向。它本质上是两次 HTTP 请求,对应两个 request 对象和两个 response 对象。

Servlet Cookie的使用

会话技术是指在会话中,帮助服务器记录用户状态和数据的技术。

常用的会话技术分为两种:

Cookie :客户端会话技术

Session :服务端会话技术

Servlet Session的使用

Session 的默认过期时间为 30 分钟,可以通过两种方式设置过期时间

1. 使用 <session-config> 元素

在 web.xml 中,使用 <session-config> 及其子元素 <session-timeout> 可以配置 Session 的默认过期时间

2. 调用 session.setMaxInactiveInterval(int interval)

通过调用 session.setMaxInactiveInterval(int interval) 设置过期时间,以秒为单位,零和负数表示会话永远不会过期

Session 的生命周期

Session 对象创建 Session 对象在容器第一次调用 request.getSession() 方法时创建。 值得注意的是,当客户端访问的 Web 资源是 HTML,CSS,图片等静态资源时,服务器不会创建 Session 对象。 

Session 对象销毁 Session 对象在如下 3 种情况下会被销毁:

1. Session 过期;

2. 调用 session.invalidate() 方法,手动销毁 Session;

3. 服务器关闭或者应用被卸载。

Servlet Filter(过滤器)

对 Servlet 容器传给 Web 资源的 request 对象和 response 对象进行检查和修改

只能为 Web 资源提供以下过滤功能:

1. 在 Web 资源被访问前,检查 request 对象,修改请求头和请求正文,或对请求进行预处理操作。

2. 将请求传递到下一个过滤器或目标资源。

3. 在 Web 资源被访问后,检查 response 对象,修改响应头和响应正文

FilterChain过滤器链(Servlet)

在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链)。过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求在这些过滤器之间传递,直到传递给目标资源。

FilterConfig接口(Servlet)

Javax.Servet 包中提供了一个 FilterCofig 接口,它与 ServletConfig 接口相似,用于在过滤器初始化期间向其传递信息。  FilterConfig 接口由容器实现,容器将它作为参数传入过滤器的 init() 方法中。通过 filterConfig 对象就可以获得 Filter 的初始化参数。

Servlet Listener(监听器)

监听器 Listener 按照监听的事件划分,可以分为 3 类: 1. 监听对象创建和销毁的监听器 2. 监听对象中属性变更的监听器 3. 监听 HttpSession 中的对象状态改变的监听器

注册 Servlet 监听器有 2 种方式,分别是:

1. 在 web.xml 中注册监听器;

2. 使用 @WebListener 注册监听器。

猜你喜欢

转载自blog.csdn.net/m0_62110645/article/details/129802777