2011-04-04 35 views

回答

6

您可能希望設置servlet過濾器映射,以便在完全請求特定的servlet時不會觸發它。

示例配置可能看起來像這樣,假設有一個DefaultServlet不應受過濾器和其他兩個受影響的servlet FirstServlet和SecondServlet的影響。

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <servlet-name>FirstServlet</servlet-name> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <servlet-name>SecondServlet</servlet-name> 
</filter-mapping> 
+0

不幸的是,我想忽略的servlet是默認的servlet,它處理所有未在別處處理的URL。這意味着它會有一個非常複雜的URL模式。 – tomdee 2011-04-04 10:03:39

+0

您可以將過濾器不僅映射到URL模式,而且還映射到特定的servlet。這意味着您可以僅爲您希望應用過濾器的servlet定義映射。 – 2011-04-04 10:06:19

0

可以分配這些要被過濾 例如網址模式

<filter> 
     <filter-name>Admin</filter-name> 
     <filter-class>com.nil.FilterDemo.AdminFilter</filter-class> 
</filter> 

<filter-mapping> 
     <filter-name>Admin</filter-name> 
     <url-pattern>/admin/*</url-pattern> 
</filter-mapping> 

此過濾器將針對servlet引擎使用/ admin映射處理的每個請求運行。

+0

他想做相反的事。 – BalusC 2011-04-04 13:31:24

0

我一直認爲你應該能夠在web.xml中例如url-patterns。如果你可以這樣做:

<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern> 
     <match>/resources/*</match> 
     <except>/resouces/images/blah.jpg</except> 
    </url-pattern> 

但你不能這樣對你沒有幫助!

你顯然必須通過請求對象訪問URL的過濾器,所以你可以做這樣的事情:

public void doFilter(ServletRequest sRequest, ServletResponse sResponse, 
         FilterChain chain) throws IOException, ServletException { 

    HttpServletRequest request = (HttpServletRequest)sRequest; 

    if(!request.getRequestURI.equals("/resources/images/blah.jpg")) { 
     doLogging(); 
    } 

    chain.doFilter(); 
} 

(這裏硬編碼的,但你很可能從屬性文件中讀取)儘管這可能對您沒有用處,因爲您在查詢中提到了servlet,而不是URL模式。

編輯:另一種想法。如果你不介意做你的記錄在servlet完成後,你可以做這樣的事情:

public void doFilter(ServletRequest sRequest, ServletResponse sResponse, 
         FilterChain chain) throws IOException, ServletException { 

    sRequest.setAttribute("DO_LOGGING", new Boolean(true)); 
    chain.doFilter(); 

    Boolean doLogging = (Boolean)sRequest.getAttribute("DO_LOGGING"); 
    if(doLogging) { 
     doLogging(); 
    } 
} 

,並要伐木排除可以只該屬性設置爲false,你的servlet。

public void doGet(HttpServletRequest req, 
        HttpServletResponse res) throws IOException { 

    req.setAttribute("DO_LOGGING", new Boolean(false)); 
    // other stuff 
} 
相關問題