文章目录
1.Servlets Filter是实现Filter接口的一个类。
前言
作为个人学习记录,我会尽可能介绍的很详细,有误和不清楚地方可评论指正。
一、关于过滤器Filter
1.Servlets Filter是实现Filter接口的一个类。
2.作用
该类截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行;同时在资源还没有被发送到客户端前截取响应,并处理这些还没有发送到客户端的响应。
3.注意
- Filter并不是一个servlet,它不能产生一个response,它能够在一个请求(request)到达服务器之前预处理该请求,也可以在离开服务器时处理响应(response)
- 当有多个过滤器时,多个过滤器之间构成过滤器链(FilterChain)
二、使用步骤
1.创建一个实现Filter接口的类
- 注意需要添加servlet下的Filter
2.doFilter方法
- 过滤器的具体业务操作则由doFilter方法实现
- doFilter方法会自动生成
3. init,destroy方法
init方法和destroy方法分别执行过滤器的初始化和销毁操作
三、Servlet过滤器的应用
实现多页面编码转换
转换为:
1.表单页面
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>提交页面</title>
</head>
<body>
<form action="input_getparam.jsp" method="post">
姓名:<input type="text" name="username"><br> 你喜欢的歌星:<input
type="checkbox" name="star" value="张杰">张杰 <input
type="checkbox" name="star" value="蔡徐坤">蔡徐坤 <input
type="checkbox" name="star" value="周杰伦">周杰伦 <input
type="checkbox" name="star" value="秋绘">秋绘 <input
type="submit" value="提交">
</form>
</body>
</html>
2.输出页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>喜欢的歌星</title>
</head>
<body>
<%
String user = request.getParameter("username");
String stars[] = request.getParameterValues("star");
String s = "";
for (int i = 0; i < stars.length; i++)
s += stars[i] + "  ";
%>
<%=user%>喜欢的歌星有:<%=s%>
</body>
</html>
3.Servlet Filter过滤器
使用前需要使用@WebFilter("/*")进行注释
package edu.nustti.servlet;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter("/*")
public class CharSetFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
System.out.println("开始销毁");
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
arg0.setCharacterEncoding("UTF-8");
arg2.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("开始运行");
}
}