javascript
Spring的OncePerRequestFilter的作用
在spring中,filter都默認(rèn)繼承OncePerRequestFilter,但為什么要這樣呢?
?
OncePerRequestFilter顧名思義,他能夠確保在一次請求只通過一次filter,而不需要重復(fù)執(zhí)行。
?
Java代碼??
?
大家常識上都認(rèn)為,一次請求本來就只過一次,為什么還要由此特別限定呢,呵呵實(shí)際上我們常識和實(shí)際的實(shí)現(xiàn)并不真的一樣,經(jīng)過一番查閱后,此方式是為了兼容不同的web container,特意而為之(jsr168),也就是說并不是所有的container都像我們期望的只過濾一次,servlet版本不同,表現(xiàn)也不同:。
?
?寫道
/**
* Filter base class that guarantees to be just executed once per request,
* on any servlet container. It provides a {@link #doFilterInternal}
* method with HttpServletRequest and HttpServletResponse arguments.
*
* <p>The {@link #getAlreadyFilteredAttributeName} method determines how
* to identify that a request is already filtered. The default implementation
* is based on the configured name of the concrete filter instance.
*
* @author Juergen Hoeller
* @since 06.12.2003
*/
?
如,servlet2.3與servlet2.4也有一定差異
?寫道
在servlet-2.3中,Filter會過濾一切請求,包括服務(wù)器內(nèi)部使用forward轉(zhuǎn)發(fā)請求和<%@ include file="/index.jsp"%>的情況。
到了servlet-2.4中Filter默認(rèn)下只攔截外部提交的請求,forward和include這些內(nèi)部轉(zhuǎn)發(fā)都不會被過濾,但是有時候我們需要 forward的時候也用到Filter。
?
因此,為了兼容各種不同的運(yùn)行環(huán)境和版本,默認(rèn)filter繼承OncePerRequestFilter是一個比較穩(wěn)妥的選擇。
總結(jié)
以上是生活随笔為你收集整理的Spring的OncePerRequestFilter的作用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从Thread.start()方法看Th
- 下一篇: java线程之InheritableTh