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

相关推荐

  • window安装memcache扩展

    window安装memcache扩展

    2022年2月23日
  • 面试官:谈谈你对IOC和AOP的理解及AOP四种实现方式[通俗易懂]

    面试官:谈谈你对IOC和AOP的理解及AOP四种实现方式[通俗易懂]一、AOP介绍面向切片编程(AOP—AspectOrientedProgramming)可以说是对OOP(面向对象编程)的补充和完善,面向对象就是将事物的特性和行为抽象为一个对象,如people类有身高、体重、年龄等属性,也有吃饭、睡觉等行为。把这些特性和行为封装成一个类,然后可以统一调用。面向切片也可以举个例子,比如people类有自己的属性和行为,但是有小一部分人生病要去医院看病,看病这个业务逻辑就不属于哪一个类,因为people泛指所有人,所有人不会都看病。AOP就是把医院看病这一个业务逻辑功能

    2022年6月22日
  • Landsat8卫星介绍[通俗易懂]

    Landsat8卫星介绍[通俗易懂]2013年2月11号,NASA成功发射了Landsat8卫星,为走过了四十年辉煌岁月的Landsat计划重新注入新鲜血液,设计使用寿命为至少5年。Landsat8上携带有两个主要载荷:OLI和TIRS,其中OLI(全称:OperationalLandImager,陆地成像仪)由卡罗拉多州的鲍尔航天技术公司研制;TIRS(全称:ThermalInfraredSensor,热红外传感器

    2022年7月23日
  • Java中&、|、&&、||详解

    Java中&、|、&&、||详解1、Java中&amp;叫做按位与,&amp;&amp;叫做短路与,它们的区别是:&amp;既是位运算符又是逻辑运算符,&amp;的两侧可以是int,也可以是boolean表达式,当&amp;两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&amp;&amp;)的两侧要求必须是布尔表达式。举例如下:12&amp;5的值是多少?答:12转成二进制数是1100(前四…

    2022年7月7日
  • discuz二次开发学习「建议收藏」

    discuz二次开发学习「建议收藏」2019独角兽企业重金招聘Python工程师标准>>>…

    2022年5月19日
  • WebApp 开发框架推荐以及优缺点分析[通俗易懂]

    WebApp 开发框架推荐以及优缺点分析[通俗易懂]不用盲目的百度和问大神们WebApp开发使用哪个框架最好?等等问题。在此,小编尽量解答各位的WebApp 问题。根据国内js大神以及有过WebApp 开发经验的前辈们分析,小编推荐下面6款常用的WebApp 开发框架。第一款:Sencha TouchSenchaTouch是世界上第一个支持HTML5和CSS3标准的移动应用框架,你可以使用HTML5来编写音频和视频组件,还可以使用…

    2022年6月24日

发表回复

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

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