过滤器实现评论内容的限制,玫感字和字数,分别用两个Filter实现

xiaoxiao2021-02-28  12

第一个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配置文件

需要配置过滤器和初始化参数,

转载请注明原文地址: https://www.6miu.com/read-2596322.html

最新回复(0)