1. 程式人生 > >javaEE之---------過濾敏感詞(filter)

javaEE之---------過濾敏感詞(filter)

我們在聊天的時候的或者留言的時候,有部分詞是不允許發表出來。我們可以採用過濾器實現這個功能。

我們只是簡單利用過濾器實現這個過濾的功能,有些地方沒寫的很全

前臺程式碼:

 <body>
    	<form action="<c:url value='/WordServlet'/>" method="post">
    		姓名:<input  type="text" name="name"/><br/>
    		留言內容:<textarea rows="10" cols="10" name="textarea"></textarea><br/>
    		<input  type="submit"  value="提交"/>
    	</form>
  </body>


Servlet裡面的程式碼:

僅僅只是把從前臺收的資料讀取出來。看裡面的敏感詞是都過濾。

程式碼:

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String name  =request.getParameter("name");//名字
		String text=request.getParameter("textarea");//瀏覽內容
		PrintWriter pw =response.getWriter();
		pw.println("name="+name);//這裡直接輸出,僅僅只是為了檢視能否過濾那些關鍵字。。
		pw.print("內容"+text);
	
	}

過濾器:

過濾的作用就可以體現了,過濾器的是在客戶端訪問伺服器的之間進行攔截的。

我們知道過濾器能夠控制request和response,所以我們能夠對這個進行下手。

從客戶端請求是request,所以我們只需要在半路將其攔截,修改裡面的值就可以實現過濾了。採用了包裝的設計模式;

過濾器程式碼:

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest) request;
		MyFilter myf =new MyFilter(req);
		chain.doFilter(myf, response);//採勇我們加強的類的request,傳給後面的servlet使用
	}

自己手動寫一個myFilter類來修改裡面我們需要用到的函式。

class MyFilter  extends HttpServletRequestWrapper{
		//這是採用包裝模式
		public MyFilter(HttpServletRequest request) {
			super(request);
		}

		@Override //從寫這個方法
		public String getParameter(String name) {
			String words =super.getParameter(name);
			System.out.println(words);//過濾前的文字
			List<String> list=WordUtils.getword();
			for(String ll:list){
				words=words.replace(ll, "*");//敏感詞彙採用**代替
			}
			return words;
		}	

為了方便維護,我們的敏感詞彙的獲取專門寫了一個工具,方便取,當然也方便管理員新增進去。

public class WordUtils {
	//採用單例模式
	private static List<String> list =new ArrayList<String>();//我們可以從這訪問資料庫中存的敏感詞彙,封裝成list返回
	static {//手動新增幾個
		list.add("坑貨");
		list.add("罵人");
		list.add("傻逼");
	}
	
	public static List<String> getword(){
		return list;
	}
	 
	 public static void addWord(String name){
		 list.add(name);
	 }
	 
	 public static void sava(){
		 //這裡可以list裡面的資料存到資料庫中,方便維護,當然也可以寫增刪改查等
	 }

在這裡,只要含有這個詞的,全部會變成* 

效果圖;



 總結:過濾器的強大,可以修改request和response物件一起,你需要調什麼函式,我們就可以採用包裝設計模式的方式修改這個函式,變成我們想要的效果,這個和代理設計模式有點類似。