以jsp作為顯示,過程很簡單就是攔截jsp的頁面提交過來的一串內容,對其中的敏感詞進行屏蔽替換,最后在轉發到jsp頁面顯示。
這里采用一種簡單易理解的方法,新建一個servlet類繼承HttpServletRequestWrapper,然后重寫getParameter方法。

package zdc.servletTest; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; public class MyServlet extends HttpServletRequestWrapper { public MyServlet(HttpServletRequest request) { super(request); } @Override public String getParameter(String name) { List<String> dirty = new ArrayList<String>(); dirty.add("cnm"); String content = super.getParameter(name); for(String s:dirty) { if(content.contains("cnm")) { content = content.replaceAll(s, "***"); } } return content; } }
然后在DataFilter類中實現過濾功能

package zdc.filter; import java.io.IOException; 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 zdc.servletTest.MyServlet; public class DataFilter implements Filter { public DataFilter() { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { MyServlet req = new MyServlet((HttpServletRequest)request);//在過濾器中用裝飾模式把 原裝request的功能增強了 chain.doFilter(req, response);//前往不要忘記放行 } public void init(FilterConfig fConfig) throws ServletException { } }
在DataServlet中做轉發處理

package zdc.servletTest; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DataServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String content = request.getParameter("content"); request.setAttribute("content", content); request.getRequestDispatcher("/test.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
至於顯示頁面test.jsp及其簡陋,自行想象。最后功能就是如果輸入你好,cnm。會屏蔽為你好,***。