A. 什麼時候用filter,什麼時候用interceptor
Filter:
配置filter以及filtermapping在web.xml中,在程序里判斷URL來篩選白名單。
Interceptor:
使用Struts零配置時需要在Action中加入@ParentPackage的註解使其生效。
比較一,filter基於回調函數,我們需要實現的filter介面中doFilter方法就是回調函數,而interceptor則基於java本身的反射機制,這是兩者最本質的區別。
比較二,filter是依賴於servlet容器的,即只能在servlet容器中執行,很顯然沒有servlet容器就無法來回調doFilter方法。而interceptor與servlet容器無關。
比較三,Filter的過濾范圍比Interceptor大,Filter除了過濾請求外通過通配符可以保護頁面,圖片,文件等等,而Interceptor只能過濾請求。
比較四,Filter的過濾例外一般是在載入的時候在init方法聲明,而Interceptor可以通過在xml聲明是guest請求還是user請求來辨別是否過濾。
B. servlet中filter有什麼用
首先介紹一下Filter到底是個什麼東西:
根據這個單詞就能猜到Filter的中文意思是過濾器,事實當然也是這樣的;Filter是Servlet中的一個重 要組件。
接下來簡單說說Filter這個介面中的常用方法吧。
①.init():類似於Servlet生命周期中的init()方法,用於初始化一些關於Filter介面的參數;只在Servlet 啟動時調用一次。
②.doFilter():類似於Servlete生命周期中的service()方法,該方法用於存放邏輯代碼。
③.destory():同理類似於Servlet生命周期中的destroy()方法,當Servlet容器銷毀前調用該方法。
然後說說如何創建一個Filter的HelloWorld。
①.創一個抽象的Java類,該類實現了Filter介面,同時實現了Filter介面的部分方法,例如
init(),destroy()方法。具體實現代碼如下:
public abstract class HttpFilter implements Filter {
private HttpServletRequest request;
private HttpServletResponse response;
//重寫Filter介面的destory方法
public void destroy() {}
//重寫doFilter方法,這個方法在這里主要作用是將ServletRequest,ServletResponse對象轉為對 //應的HttpServletRequest,HttpServletResponse對象
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
this.request = (HttpServletRequest) arg0;
this.response = (HttpServletResponse) arg1;
doFilter(request, response, arg2);
}
//該方法交由繼承該抽象類的實現類來實現
public abstract void doFilter(HttpServletRequest request,HttpServletResponse response,
FilterChain chain);
private FilterConfig config;
//這個方法是為了方便子類獲取ServletContext對象
public FilterConfig getFilterConfig(){
return config;
}
//該方法一般不建議重寫,因為重寫該方法會出現某些錯,基於此提供了下面的無參數的init()方法
public void init(FilterConfig arg0) throws ServletException {
this.config = arg0;
init();
}
public void init(){}
}
②.一個繼承了HttpFilter抽象類的實現類,代碼如下,只要功能是為了實現禁用瀏覽器緩存
public class NoCacheFilter extends HttpFilter{
@Override
public void doFilter(HttpServletRequest request,
HttpServletResponse response, FilterChain chain) {
//通過過濾器實現頁面禁用瀏覽器緩存
response.setDateHeader("Expires", -1);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
}
}
③.將該實現類配置到web.xml文件中,配置方式和配置普通的Servlet一樣,具體代碼
<filter>
<filter-name>NoCacheFilter</filter-name>
<filter-class>com.xingyun.servlet.filter.NoCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>NoCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
至此,就實現了一個簡單的用於禁用瀏覽器緩存的過濾器了。
上面說了這么多,在開發中哪些地方中能用到Filter才是最終目的,好了,我大概說一下我在開發中用到的地方。
①.上面提到的禁用瀏覽器的緩存。這個真的很重要,有時候修改了前端頁面,就是因為緩存的原因,導致頁面不 能及時刷新過來,真的很蛋疼。
②.解決中文亂碼的問題。在開發中,頁面可能達到幾十個甚至上百個,在每個頁面處理中文亂碼的問題很煩,但 是通過過濾器,那麼問題就變得很簡單了。
③.通過檢查用戶是否登錄來管理用戶是否可以訪問某些頁面,比如個人隱私等頁面。這個用的也是蠻多的。
C. js filter濾波器 為什麼不能使用
一般我的方法是判斷uri的是不是這三個如果是這三個,不做處理,直接直接下一步=================唉,直接給你看源碼吧在doFilter方法里寫上StringcontextPath=InitObjects.getContextPath();=(HttpServletRequest)request;//獲得用戶請求的uriStringuri=httpServletRequest.getRequestURI();//eccludedPages是個List,存放著比如index.jsp,error.jsp等不需要過濾的頁面if(!excludedPages.contains(uri)){}}filterChain.doFilter(request,response);
用設置ISA及其即插即用設備斷及其差數
D. angular前端.map和.filter的區別
我們說的map()和filter()其實是Array.prototype.map()創建一個新的數組,其結果是該數組中每個元素都調用一個提供的函數後返回的結果。
語法:var newArray = arr.map(function callback(currentValue, index, array){undefined//對每個元素的處理})
具體操作可去相關網站進行了解。
E. 為什麼php很少用 filter
Filter是過濾器用於驗證和過濾來自非安全來源的數據,比如用戶的輸入。驗證和過濾用戶輸入或自定義數據是任何 Web 應用程序的重要組成部分。
函數和過濾器
如需過濾變數,請使用下面的過濾器函數之一:
filter_var() - 通過一個指定的過濾器來過濾單一的變數
filter_var_array() - 通過相同的或不同的過濾器來過濾多個變數
filter_input - 獲取一個輸入變數,並對它進行過濾
filter_input_array - 獲取多個輸入變數,並通過相同的或不同的過濾器對它們進行過濾
在下面的例子中,我們用 filter_var() 函數驗證了一個整數:
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>
F. jquery filter為啥這樣不行
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
</head>
<body>
<div>
<span id="a">
<div>
<span id="b">
<div>
<span id="c"> 測試 <strong>taget1</strong> </span>
<span class="span"> 測試 <strong> taget2 </strong> </span>
<span class="span">測試taget2</span>
<ul>
<li>測試 <strong>filter配合函數</strong></li> <!- 這有一個 strong標簽-->
<li><strong>測試</strong> <strong>filter配合函數</strong></li> <!- 這有兩個個 strong標簽-->
<li><strong>測試</strong> <strong>filter</strong><strong>配合函數<strong></li><!- 這有三個 strong標簽-->
</ul>
</div>
</span>
</div>
</span>
</div>
<div class="text">
<p class="text3">測試3</p>
</div>
<div class="text3">
<p>測試3</p>
</div>
<script type="text/javascript"> /*檢驗時把注釋去掉*/
$('document').ready(function(){
//$('div #a>div #b>div #c').css('background','red'); //這是你的第一種方法(通過)
var _obj = $('div #a>div');
//_obj.find('#b>div #c').css('background','red'); //第二種方法,要使用find 或者是bind 。(根據你自己的需要)
//-------------------------filter的用法------------------------------------
//_obj.find('#b>div>span').filter(':even').css('background','red'); // filter 配合 選擇器來篩選元素
_obj.find('#b>div>ul>li').filter(function(index) { // filter 配合 函數來篩選元素
return $('strong', this).length == 1;
}).css('background-color', 'red');
//-----------------------filter與find的區別--------------------------------------
//使用find
var find = $("div").find(".text3");
//alert( find.html() ) ;
//使用filter
var filter = $("div").filter(".text3");
alert( filter.html() );
//基本是find子元素找,filter是平級找
//-----------------------filter與find的總結--------------------------------------
//find 子查詢選擇器,可更深入的查詢選擇;
//filter 函數是對當前對象集合進行過濾, 利用過濾條件縮小范圍;
//find 函數的參數是 jQuery 選擇器表達式;
//filter 的參數也是選擇器表達式, 但可以有多個條件, 用逗號分隔(邏輯或關系);
//filter 的參數也可以是個函數, 調用函數時會自動傳入 index 參數, 函數需返回 true或false 以選中或排除元素.
});
</script>
</body>
</html>
G. 火狐為什麼不支持css中的filter屬性
filter:filtername(parameters)即filter:濾鏡名(參數)
其中,filter是濾鏡選擇符;filtername是濾鏡的屬性名,這里包括alpha、blur、chroma等
多種屬性;parameters是屬性參數值。屬性名及參數值請看下面的《filter屬性及屬性值》。
具體的應用有兩種方法:
1、先定義好CSS,再在頁面中需要的對象上使用預先定義好的CSS,實際上CSS的設置對話框里已經預先將這些濾鏡的語法設置好了,我們只需填上適合的具體參數即可。
2、直接在支持CSS濾鏡效果的HTML控制項元素上編寫CSSfilter代碼。
但是filter存在兼容問題。filter是IE專用的,所以IE以外的瀏覽器將無法正常顯示。
下面是代碼:僅供參考:
IE中兼容CSS的filter,火狐下不兼容。
.aa{
position:absolute;
padding:4px;
filter:
Dropshadow(offx=1,offy=0,color=#ffffff)
Dropshadow(offx=0,offy=1,color=#ffffff)
Dropshadow(offx=0,offy=-1,color=#ffffff)
Dropshadow(offx=-1,offy=0,color=#ffffff);
}
兼容IE和火狐
.aa{
position:absolute;
padding:4px;
filter:
Dropshadow(offx=1,offy=0,color=#ffffff)
Dropshadow(offx=0,offy=1,color=#ffffff)
Dropshadow(offx=0,offy=-1,color=#ffffff)
Dropshadow(offx=-1,offy=0,color=#ffffff);
text-shadow:1px1px1px#ffffff;
}
H. 在JAVA中filter有什麼作用
Filter也稱之為過濾器,它是Servlet技術中最實用的技術,Web開發人員通過Filter技術,對web伺服器管理的所有web資源。
例如實現URL級別的許可權訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。例如對Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。
它主要用於對用戶請求進行預處理,也可以對HttpServletResponse進行後處理。使用Filter的完整流程:Filter對用戶請求進行預處理,接著將請求交給Servlet進行處理並生成響應,最後Filter再對伺服器響應進行後處理。
(8)前端為啥不建議使用filter擴展閱讀
Filter的生命周期
和我們編寫的Servlet程序一樣,Filter的創建和銷毀由WEB伺服器負責。 web 應用程序啟動時,web 伺服器將創建Filter 的實例對象,並調用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為後續的用戶請求作好攔截的准備工作
filter對象只會創建一次,init方法也只會執行一次。開發人員通過init方法的參數,可獲得代表當前filter配置信息的FilterConfig對象。
這個方法完成實際的過濾操作。當客戶請求訪問與過濾器關聯的URL的時候,Servlet過濾器將先執行doFilter方法。FilterChain參數用於訪問後續過濾器。
Filter對象創建後會駐留在內存,當web應用移除或伺服器停止時才銷毀。在Web容器卸載 Filter 對象之前被調用。該方法在Filter的生命周期中僅執行一次。在這個方法中,可以釋放過濾器使用的資源。
I. 關於Div使用filter的一點點問題
使用CSS你一定要有盒子模型的概念。盒子模型不單單是指邊框高度什麼的。
DOM的子元素被包含在父元素中,就像是被裝在了盒子里。如果你對父元素應用模糊濾鏡,那麼你看到的整個盒子都將模糊。而如果你對盒子里的子元素設置了模糊,則它會疊加父元素的模糊變得更模糊。
如果你需要子元素不出現模糊。可以講子元素提升到和父元素平級,這樣相當於2個獨立的盒子。對你要模糊的盒子進行模糊即可。如何重疊到一起?使用定位就能方便的解決了。
J. 在CSS樣式表中為什麼filter屬性不能用
filter類似的濾鏡火狐是不支持的,
只有IE支持他。
想實現類似的功能,需要使用其他手段~~