第一个filter
package com.filter;
import java.io.UnsupportedEncodingException;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CommentFilter implements Filter{
private FilterConfig config;//定义属性,保存容器传过来的参数
/**
* 容器启动之后会立即创建过滤器实例(通过调用构造器)
* 注;只会创建一个实列
*/
public CommentFilter() {
System.err.println("CommentFilter构造器被调用");
}
/**
* 容器在创建爱你好过滤器之后,会立即调用该实列的init方法(初始化方法)
* 注;
* 该方法只会执行一次
* 容器会将FilterConfig对象作为参数传进来,可以利用该对象读取参数初始化参数
*/
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
System.err.println("容器的init方法被调用了");
}
/**
* 容器绶带请求之后,会调用doFilter方法处理请求
* 容器会将请求对象和响应对象作为参数传进来
* 注
* ServletRequest是httpServletRequest的父接口
* ServletResponse是httpServletResponse的父接口
* 这儿没有用字接口,是过渡设计的产物
* FilterChain chain---过滤器链,如果调用了FilterChain chain对象的doFilter方法,表示向后调用,
* 负责,中断请求,返回处理结果
*
*
*
*/
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) {
System.err.println("CommentFilter的doFilter开始执行");
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
try {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String content = request.getParameter("content");
//调用FilterConfig对象的方法来读取初始化参数
String illegal = config.getInitParameter("illegal");//玫感字
System.out.println(illegal);
if(content.indexOf(illegal) != -1) {
//包含美感字,不再向后调用
response.getWriter().print("评论的内容包含了美感字");
}else {
//没有包含美感字,则继续向后调用,Filter链doFilter的方法
chain.doFilter(request, response);
}
} catch (Exception e) {
e.printStackTrace();
}
System.err.println("CommentFilter的doFilter执行完毕");
}
//当容器删除过滤器实列之前,会先调用该实列的destroy方法,该方法只执行一次
public void destroy() {
System.err.println("容器被销毁了destroy");
}
}
第二个filter
package com.filter;
import java.io.IOException;
import java.io.PrintWriter;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CountFilter implements Filter{
private FilterConfig config;
public void init(FilterConfig filterConfig) throws ServletException {
config = filterConfig;
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)arg0;
HttpServletResponse response = (HttpServletResponse)arg1;
PrintWriter out = response.getWriter();
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=utf-8");
String lengthsize = config.getInitParameter("length");//字数
String content = request.getParameter("content");//获取评论的内容
if(content.length() >Integer.parseInt(lengthsize)) {//评论的字数如果大于10
response.getWriter().print("您输入的字数过长");
}else {
//没有包含美感字,则继续向后调用,Filter链doFilter的方法
chain.doFilter(request, response);
}
}
public void destroy() {
}
}
web.xml配置文件
需要配置过滤器和初始化参数,