【javaweb简单教程】9.Servlet与过滤器超简单教程
9.Servlet与过滤器
初识Servlet
- Servlet做了什么?
- 本身不做任何业务处理
- 只是接收请求并决定调用哪个JavaBean去处理请求
- 确定用哪个页面来显示处理返回的数据
- Servlet是什么?
- Server+Applet,是一种服务器端的Java应用程序
- 只有当一个服务器端的程序使用了Servlet API的时候,这个服务端
- 的程序才能称之为Servlet
- JSP与Servlet之间的关系
- Servlet是运行在服务器端的Java应用程序
Servlet API
- 主要Servlet API介绍
- javax.servlet.Servlet接口
- 所有Java Servlet的基础接口类,规定了必须由Servlet具体类实现的方法集
- javax.servlet.GenericServlet类
- 是Servlet的通用版本,是一种与协议无关的Servlet
- javax.servlet.http.HttpServlet类
- 在GenericServlet基础上扩展的基于Http协议的Servlet
- 如何创建Servlet
- 实现Servlet接口
- 继承GenericServlet类
- 继承HttpServlet类
Servlet
- Servlet中主要方法
init()
:Servlet的初始化方法,仅仅会执行一次service()
:处理请求和生成响应destroy()
:在服务器停止并且程序中的Servlet对象不再使用的时- 候调用,只执行一次
- ServletRequest
- 封装客户的请求信息
- 作用相当于JSP内置对象request
- ServletResponse
- 创建响应信息,将处理结果返回给客户端
- 作用相当于JSP内置对象response
- ServletConfig
- 包含了Servlet的初始化参数信息
Servlet生命周期
- Servlet生命周期各个阶段
- 加载和实例化
- 初始化
- 处理请求
- 销毁
生命周期 | 谁来做 | 何时做 |
---|---|---|
实例化 | Servlet 容器 | 当Servlet容器启动或者容器检测到客户端请求时 |
初始化 | Servlet 容器 | 实例化后,容器调用Servlet的init()初始化对象 |
处理请求 | Servlet 容器 | 得到客户端请求并做出处理时 |
销毁 | Servlet 容器 | 当程序中的Servlet对象不再使用的时候, 或者Web服务器停止运行的时候 |
部署运行Servlet
Servlet部署与运行
- 修改web.xml(部署描述文件)
- 添加< servlet >:把Servlet内部名映射到一个Servlet类名
- 添加< servlet-mapping >:把用户访问的URL映射到Servlet的内部名
注意:
<servlet-mapping>与<servlet>中的<servlet-name>必须一致
- 通过URL访问Servlet
Servlet配置
配置Servlet
- 配置< servlet >元素
<servlet> <servlet-name>myServlet3</servlet-name> <servlet-class>demo.web.servlet.MyServlet3</servlet-class> </servlet> /* myServlet3: Servlet名称唯一 demo.web.servlet.MyServlet3: Servlet类所在路径 */
- 配置 < servlet-mapping >元素
<servlet-mapping> <servlet-name>myServlet3</servlet-name> <url-pattern>/myServlet3</url-pattern> </servlet-mapping> /* myServlet3: 与<servlet>的<servlet-name>设置相同 /myServlet3: 访问Servlet的URL,相对于Web应用的路径,有三种配置方式 */
初始化参数设置
- 配置< init-param >元素
<servlet>
……
<init-param>
<param-name>charSetContent</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
/*
charSetContent: 参数名称
utf-8: 参数值
*/
public void init(ServletConfig config) throws ServletException {
String initParam=config.getInitParameter("charSetContent"); //通过ServletConfig对象读取初始化参数
System.out.println(initParam);
}
过滤器
- 过滤器
- 是向Web应用程序的请求和响应添加功能的Web服务组件
- 过滤器可以统一地集中处理请求和响应
- 使用过滤器技术实现对请求数据的过滤
使用步骤
过滤器的使用步骤
- 建立实现javax.servlet.Filter接口的类,实现过滤行为
doFilter(...) { //过滤请求 chain.doFilter(request, response); //调用下一个过滤器或Web资源 //过滤响应 }
- 在web.xml中配置过滤器
<filter>
<filter-name>过滤器名</filter-name>
<filter-class>过滤器的完全限定名</filter-class>
</filter>
<filter-mapping>
<filter-name>过滤器名</filter-name>
<url-pattern>过滤器映射的Web资源</url-pattern>
/*
完全匹配:/index.jsp
目录匹配:/admin/*
扩展名匹配:*.do
全部匹配:/*
*/
</filter-mapping>
过滤器的生命周期
- 实例化
- 初始化:
init()
- 过滤:
doFilter()
- 销毁:
destroy()
初始化参数
- 配置过滤器的初始化参数
- 配置< init-param >元素
<filter>
<init-param>
<param-name>Encoding</param-name> <!-- 参数名称 -->
<param-value>UTF-8</param-value> <!-- 参数值 -->
</init-param>
</filter>
- 读取过滤器的初始化参数
init(FilterConfig fConfig) {
String encoding=fConfig.getInitParameter("Encoding"); //通过FilterConfig对象读取初始化参数
}
过滤器链
- 多个过滤器会形成过滤器链。根据过滤器的配置,按照先后顺序执行
过滤器的应用场合
- 对请求和响应进行统一处理
- 对请求进行日志记录和审核
- 对数据进行屏蔽和替换
- 对数据进行加密和解密