如何在Eclipse中创建servlet过滤器?

时间:2015-06-24 14:21:04

标签: java eclipse servlets tomcat8

我是servlet技术的新手。我设置了Java 7,Tomcat8和Eclipse。我在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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

过滤器位于servlet前面。在您的注释中,您指定过滤器应仅过滤转到/FilterDemo的请求。您需要做的是将过滤器映射到与您的一个servlet相同的URL,或者指定希望过滤器为其处理的servlet的名称(使用{的servletNames参数{1}}注释。

答案 1 :(得分:1)

您必须在web.xml中声明过滤器映射,尽管您使用的是@WebFilter注释。

答案 2 :(得分: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

答案 3 :(得分: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>  

这里/ servlet1是你的servlet的url模式(你要执行它)。