使用Java過濾留言板敏感詞

通過Filter來實現留言板的敏感詞過濾…

思路很簡單,我們這裡的敏感詞是直接先放進去的,實際項目中,肯定是存在數據庫中。在Filter 過濾器中,我們先拿到用戶提交的留言,如果出現瞭敏感詞,我們就用*號來替換。

代碼演示:

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>

過濾器應用示例—敏感詞過濾

WordsUtil.java:敏感詞集合:

package cn.hncu.pubs;

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

public class WordsUtil {
    private static List list = new ArrayList();
    static{
        //這裡應該從數據庫中導入敏感詞的,我在這裡就直接用詞來模擬瞭
        list.add("罵人");
        list.add("sb");
    }
    public static List 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("");
        out.println("

"); out.println("

"); out.println(""); String name = request.getParameter("name"); if(name==null || name.trim().length()<=0){ out.println("名字不能為空!!!"); }else{ String words = request.getParameter("note"); out.println("
"+name+"的留言是:
"+ words); } out.println(""); out.println(""); 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 list = WordsUtil.getWords();
        for(String word : list){
            str = str.replaceAll(word, "*");
        }
        return str;
    }



}

配置web.xml



  
  
    wordFilter
    cn.hncu.filter.WordFilter
  
  
    wordFilter
    /*
  


  
    NoteServlet
    cn.hncu.servlet.NoteServlet
  

  
    NoteServlet
    /NoteServlet
      
  
    index.jsp
  

演示結果:

過濾後的效果:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *