2015-06-24 32 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