通過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