2015-06-24 28 views
0

我是servlet技術的新手。我建立了Java 7,Tomcat8和Eclipse。我已經在Eclipse 上創建了幾個servlet,並且一切正常。如何在Eclipse中創建servlet過濾器?

今天我創建了一個簡單的servlet過濾器。但是它沒有在任何servlet之前執行。我可以看到使用 控制檯消息執行init方法。根據servlet 3.0,我沒有使用web.xml,而是使用@WebFilter(「/ FilterDemo」)註釋。

這裏是Servlet過濾器的代碼,

package net.codejava; 

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 

/** 
* Servlet Filter implementation class FilterDemo 
*/ 
@WebFilter("/FilterDemo") 
public class FilterDemo implements Filter { 

/** 
* Default constructor. 
*/ 
public FilterDemo() { 
    // TODO Auto-generated constructor stub 
} 

/** 
* @see Filter#destroy() 
*/ 
public void destroy() { 
    // TODO Auto-generated method stub 
    System.out.println("Destroy is called."); 
} 

/** 
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 
*/ 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    // TODO Auto-generated method stub 
    // place your code here 

    String ipAddress = request.getRemoteAddr(); 
    System.out.println("Do Filter is called."); 
    System.out.println(ipAddress); 

    // pass the request along the filter chain 
    chain.doFilter(request, response); 
} 

/** 
* @see Filter#init(FilterConfig) 
*/ 
public void init(FilterConfig fConfig) throws ServletException { 
    // TODO Auto-generated method stub 
    System.out.println("Filter Init is called."); 
} 

} 

截圖工作區: enter image description here

任何幫助將不勝感激。

+0

請分享映射的過濾器觸發的servlet – Mudassar

+0

@Mudassar:我知道我們需要添加過濾器將觸發的servlet。我想Eclipse會爲我自動創建。你能告訴我在哪裏需要添加映射 – user3427540

+0

:)是的,我們確實需要映射爲這樣的servlet @WebServlet(「/ FilterDemo」) 公共類AnyServlet擴展HttpServlet – Mudassar

回答

1

過濾器位於servlet之前。在您的註釋中,您指定過濾器應該只過濾請求到/FilterDemo。您需要做的是將過濾器映射到與您的一個servlet相同的URL,或者指定您希望過濾器進行處理的servlet的名稱(使用@WebFilter註釋的servletNames參數

+0

非常感謝伊恩,我用' @WebFilter(filterName =「/ FilterDemo」,urlPatterns =「/ HelloServlet」)',現在一切按預期工作。 – user3427540

1

你儘管在web.xml聲明你的過濾器映射您正在使用@WebFilter註釋

+1

Web.xml不是強制性的,這對我有幫助'@WebFilter(filterName =「/ FilterDemo」,urlPatterns =「/ HelloServlet」)' – user3427540

+0

不,你沒有。如果您需要按特定順序執行過濾器,則只需* web.xml文件。 –

+0

是的,但我認爲這是推薦的,因爲當你有多個過濾器時,你在web,xml中列出過濾器的順序就是它們被執行的順序。 – Szarpul

0

瞭解如何Servlet的映射到過濾器

web.xml中:

<filter> 
<filter-name>f1</filter-name> 
<filter-class>MyFilter</filter-class> 
</filter> 

<filter-mapping> 
<filter-name>f1</filter-name> 
<url-pattern>/servlet1</url-pattern> 
</filter-mapping> 

here/servlet1是您的servlet(您要執行的)的url模式。

1

按servlet的3.0

@WebServlet("/LoginServlet") 
public class LoginServlet extends HttpServlet{...} 

@WebFilter(filterName="filter1", urlPatterns={ "/LoginServlet" }) 
public class AuthenticationFilter implements Filter {..} 

,但你還是應該保持<url-pattern>在web.xml中,因爲它需要按照XSD,雖然它可以是空的:

<filter-mapping> 
    <filter-name>filter1</filter-name> 
    <url-pattern /> 
</filter-mapping> 

參見使用Tomcat,@WebFilter doesn't work with inside web.xml