學藝不精啊.....以前就總結過博客:css
JAVA中解決Filter過濾掉css,js,圖片文件等問題
結果如今又犯了老錯誤~html
狀況以下:前端
index.jsp 頁面的驗證碼輸入欄綁定了異步驗證(jQurey實現),當輸入內容發生變化時,異步去後臺驗證輸入是否正確。jquery
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 }
可是當項目加入了登陸驗證(過濾器)後,發現這個驗證失效了。ajax
通過檢查發現,過濾器會攔截 頁面對 js文件的請求。異步
過濾器中加入以下代碼:jsp
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地址。this
所以,前端 jQuery實現的ajax沒有正常工做。url
所以在過濾器中加入對 js 文件的判斷,
1 if("/index.jsp".equals(url) |"/yanzheng".equals(url)|"/js/jquery.js".equals(url)){ 2 3 chain.doFilter(request, response); 4 5 }
~問題解決了