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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TCP/IP之Traceroute程序

    TCP/IP之Traceroute程序定义:Traceroute程序时一个能更深入探索TCP/IP协议的方便可用的工具。功能:Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。 Traceroute程序还可以让我们使用IP源路由选项。存在意义:不是所有路由器都支持记录路由选项 记录路由一般是单向的选项,记录地址翻了一番(一来一回) IP首部中留给选项的空间有限,不能存放当前大多…

    2022年6月20日
    32
  • vue页面缓存问题_vue项目自动打开浏览器设置

    vue页面缓存问题_vue项目自动打开浏览器设置目录1.什么是浏览器缓存2.浏览器缓存类型:3.浏览器缓存的优势与劣势:4.浏览器缓存机制5.如何清除浏览器缓存在代码更新发布后,都会要求运营人员在访问网址时清除下本地缓存,防止万一掉坑那问题就来了:每次清缓存很麻烦,怎样就不需要他们每次去手动清缓存呢?1.什么是浏览器缓存浏览器缓存(BrowserCaching)是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页

    2022年10月20日
    1
  • 【elasticsearch系列】windows安装IK分词器插件[通俗易懂]

    【elasticsearch系列】windows安装IK分词器插件[通俗易懂]环境github下载:https://github.com/medcl/elasticsearch-analysis-ik/releases注意,IK分词器插件要与ES版本保持一致;有的小伙伴在GitHub上下载插件时,没有发现与ES相对应的版本,可以切换到Tags中选择分支版本;例如Branchs列表中仅可能存在主版本号;切换到右侧Tags中查找对应的版本即可;小编这里选择的7.8.0的版本;安装IK解压缩后拷贝到ElasticSearch安装目录的plugins文件夹下,默认情况该

    2022年6月18日
    24
  • Python 学习笔记 列表 xxx XXX

    Python 学习笔记 列表 xxx XXXPython学习笔记列表xxxXXXbicycles=[‘trek’,’cannondale’,’redline’,’specialized’]print(bicycles)print(bicycles[0])print(bicycles[0].title())print(bicycles[-1])names=[‘wenwen’,’juanjuan’,’yuyu’]forxinnames: prin…

    2022年8月22日
    11
  • python 股票实时数据接口_股票行情实时数据接口

    广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!sina股票实时数据接口eg:http:hq.sinajs.cnlist=sh600389返回gb2312编码的内容:varhq_str_sh600389=江山股份,15.31,15.74,15.68,16.02,15.16,15.68,15.69,4044916,62900903…

    2022年4月8日
    99
  • ActionContext_session和page view

    ActionContext_session和page view在Struts2.0中,Action已经与Servlet API完全分离,这使得Struts2.0的Action具有了更加灵活和低耦合的特性,与Struts1.0相比较而言是个巨大的进步。虽然Struts2.0的Action已经与Servlet API完全分离,但我们在实现业务逻辑处理时经常需要访问Servlet中的对象,如Session、Application等。Struts2.0 提供了一个名

    2025年10月12日
    3

发表回复

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

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