學藝不精啊.....之前就總結過博客:
JAVA中解決Filter過濾掉css,js,圖片文件等問題
結果現在又犯了老錯誤~
情況如下:
index.jsp 頁面的驗證碼輸入欄綁定了異步驗證(jQurey實現),當輸入內容發生變化時,異步去后台驗證輸入是否正確。
1 $(function(){ 2 3 4 5 $("#a").bind('input propertychange',function () { 6 7 var registName=this.value; 8 9 var param={"method":"checkRegistName","registName":registName}; 10 11 $.get("User.do",param,function(data){ 12 13 if(data!="1"){ 14 15 $(this).parent().children("span").html("用戶名可以使用"); 16 17 }else{ 18 19 $(this).parent().children("span").html("用戶名已被占用"); 20 21 } 22 23 }.bind(this)) 24 25 //ajax中的回調函數直接用this不靈,解決辦法是使用bind(this)綁定this到當前事件。 26 27 }); 28 29 }
但是當項目加入了登錄驗證(過濾器)后,發現這個驗證失效了。
經過檢查發現,過濾器會攔截 頁面對 js文件的請求。
過濾器中加入如下代碼:
1 System.out.println( "登錄驗證過濾器 loginFilter" ); 2 3 String url = httpRequest.getServletPath(); 4 5 System.out.println("經過過濾器的請求url為 "+url);
訪問頁面,工作台輸出如下:
1 登錄驗證過濾器 loginFilter 2 經過過濾器的請求url為 /index.jsp 3 登錄驗證過濾器 loginFilter 4 經過過濾器的請求url為 /js/jquery.js 5 登錄驗證過濾器 loginFilter 6 經過過濾器的請求url為 /yanzheng
其中 “index.jsp” 為訪問的頁面, “/js/jquery.js”為index.jsp 中加載的js文件,“/yanzheng”是驗證碼圖片獲取時訪問的后台severlet地址。
因此,前端 jQuery實現的ajax沒有正常工作。
因此在過濾器中加入對 js 文件的判斷,
1 if("/index.jsp".equals(url) |"/yanzheng".equals(url)|"/js/jquery.js".equals(url)){ 2 3 chain.doFilter(request, response); 4 5 }
~問題解決了