JavaWeb-过滤器Filter学习(四)敏感词过滤实例

JavaWeb-过滤器Filter学习(四)敏感词过滤实例通过Filter来实现留言板的敏感词过滤…思路很简单,我们这里的敏感词是直接先放进去的,实际项目中,肯定是存在数据库中。在Filter过滤器中,我们先拿到用户提交的留言,如果出现了敏感词,我们就用*号来替换。代码演示:index.jsp:<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@taglibur

大家好,又见面了,我是你们的朋友全栈君。

通过Filter来实现留言板的敏感词过滤…

思路很简单,我们这里的敏感词是直接先放进去的,实际项目中,肯定是存在数据库中。在Filter 过滤器中,我们先拿到用户提交的留言,如果出现了敏感词,我们就用*号来替换。

代码演示:

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
     <title>过滤器应用示例---敏感词过滤</title>
  </head>

  <body>
     <h2>过滤器应用示例---敏感词过滤</h2>
     <form action="<c:url value='/NoteServlet'/>" method="post">
        用户名:<input type="text" name="name" /><br/><br/>
        <fieldset>
            <legend>留言板</legend>
            <textarea name="note" rows="10" cols="20"></textarea>
        </fieldset>
        <input type="submit" value="留言" />     
     </form>
  </body>
</html>

WordsUtil.java:敏感词集合:

package cn.hncu.pubs;

import java.util.ArrayList;
import java.util.List;

public class WordsUtil { 
   
    private static List<String> list = new ArrayList<String>();
    static{
        //这里应该从数据库中导入敏感词的,我在这里就直接用词来模拟了
        list.add("骂人");
        list.add("sb");
    }
    public static List<String> getWords(){
        return list;
    }
    public static void reBuild(){
       //把list中的内容存储到数据库---每一段时间存储一次
    }
}

NoteServlet.java

package cn.hncu.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class NoteServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("不支持GET方式留言");
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println(" <BODY>");

        String name = request.getParameter("name");
        if(name==null || name.trim().length()<=0){
            out.println("名字不能为空!!!");
        }else{
            String words = request.getParameter("note");
            out.println("<br/>"+name+"的留言是:<br/>"+ words);
        }
        out.println(" </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

WordFilter.java:敏感词过滤

package cn.hncu.filter;

import java.io.IOException;
import java.util.List;

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.HttpServletRequestWrapper;

import cn.hncu.pubs.WordsUtil;

public class WordFilter implements Filter{ 
   

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");

        //在过滤器中用装饰模式把 原装request的功能增强了
        //---拦截后台调用的getParamter()方法
        MyRequest req = new MyRequest((HttpServletRequest)request);

        chain.doFilter(req, response);//放行
    }

    @Override
    public void destroy() {
    }
}

class MyRequest extends HttpServletRequestWrapper{
    public MyRequest(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {
        String str = super.getParameter(name);
        List<String> list = WordsUtil.getWords();
        for(String word : list){
            str = str.replaceAll(word, "*");
        }
        return str;
    }



}

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <filter>
    <filter-name>wordFilter</filter-name>
    <filter-class>cn.hncu.filter.WordFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>wordFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


  <servlet>
    <servlet-name>NoteServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.NoteServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>NoteServlet</servlet-name>
    <url-pattern>/NoteServlet</url-pattern>
  </servlet-mapping>    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

演示结果:

JavaWeb-过滤器Filter学习(四)敏感词过滤实例

过滤后的效果:

JavaWeb-过滤器Filter学习(四)敏感词过滤实例

完整项目链接:

https://github.com/chenhaoxiang/Java/tree/master/myWordsFilterWeb
myWordsFilterWeb.zip

转载请附上原文博客链接:

http://blog.csdn.net/qq_26525215

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140773.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 安装PyTorch(pytorch官网下载教程)

    安装PyTorch过程安装anaconda环境管理PyTorch安装检验安装安装anaconda登录anaconda的官网下载,anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网点击下载跳转到这个页面如果你的Python版本正好是3.8版,那便可以直接根据系统去选择自己相应的下载版本就可以了。但是如果你的Python版本号不是当前页面的版本号,那我建议你去选择相对应的版本号。点击archive你就会跳转到下面的页面你可以访问这篇博客去找到当前与你python版本号相对

    2022年4月15日
    52
  • ORB-SLAM 2+3 rgbd稠密地图 (地图可回环)「建议收藏」

    ORB-SLAM 2+3 rgbd稠密地图 (地图可回环)「建议收藏」高博曾经在他的github上提供过,但因为大佬时间少,并没有将回环加入到稠密地图,现提供一个可回环的稠密地图版本https://github.com/tiantiandabaojian/ORB-SLAM2_RGBD_DENSE_MAP.git第一张图片是TUM数据集未回环的地图第二张图片是经过回环的地图第三张是博主自己用KinectV2跑出的地图望能帮到各位…

    2022年9月18日
    2
  • Goland 2021.5 激活码【在线注册码/序列号/破解码】

    Goland 2021.5 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    59
  • delphi xe datasnap 服务器显示客户端,Delphi xe datasnap[通俗易懂]

    delphi xe datasnap 服务器显示客户端,Delphi xe datasnap[通俗易懂]我想从客户端向服务端提交多个OleVariant内容.最初我想这样这实现functionSaveData(aDataArr:arrayofOleVariant;aTableArr:arrayofstring;aKeyArr:arrayofstring;varaErrorStr:string):Boolean;这样经测试不行,DATASNAP参数不能为数组.现在我用TJSONObje…

    2022年7月18日
    13
  • springboot框架简介_springboot工作原理

    springboot框架简介_springboot工作原理springboot介绍1、springboot概述springboot对spring的缺点进行改善和优化,基于约定优化配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发效率,也可以缩短项目周期。2、springboot特点为基于spring开发提供更快的入门体验。开箱即用,不需要代码生成,也不需要xml配置,同时也可以修改默认值来满足特定的需求。提供了一些大型项目中常见的非功能特性,如嵌入式服务器、安全、指标,健康检测、外部

    2022年8月20日
    7
  • CreateCompatibleDC用法

    CreateCompatibleDC用法CreateCompat 假如需要对屏幕进行比较多的 gdi 函数操作 如果每一步操作都直接对屏幕 dc 进行操作 那出现的大多数可能性都是屏幕的闪烁 一个很好的解决方法就是使用内存 dc 将这些操作全部先在内

    2025年11月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号