如何在 Eclipse 中创建一个 servlet 过滤器?
How to create a servlet filter in Eclipse?
我是 servlet 技术的新手。我设置了Java7、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.");
}
}
工作区截图:
任何帮助将不胜感激。
过滤器位于 servlet 的前面。在您的注释中,您指定过滤器应该只过滤去往 /FilterDemo
的请求。您需要做的是将过滤器映射到与您的一个 servlet 相同的 URL,或者指定您希望过滤器对其进行处理的 servlet 的名称(使用 servletNames
@WebFilter
注释的参数。
尽管您正在使用 @WebFilter
注释,但您必须在 web.xml
中声明过滤器映射。
查看如何将 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 模式。
根据 servlet 3.0
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet{...}
@WebFilter(filterName="filter1", urlPatterns={ "/LoginServlet" })
public class AuthenticationFilter implements Filter {..}
但您仍应保留 web.xml 中的 <url-pattern>
,因为根据 XSD,它是必需的,尽管它可以为空:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
另请参阅使用 Tomcat、@WebFilter doesn't work with inside web.xml
我是 servlet 技术的新手。我设置了Java7、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.");
}
}
工作区截图:
任何帮助将不胜感激。
过滤器位于 servlet 的前面。在您的注释中,您指定过滤器应该只过滤去往 /FilterDemo
的请求。您需要做的是将过滤器映射到与您的一个 servlet 相同的 URL,或者指定您希望过滤器对其进行处理的 servlet 的名称(使用 servletNames
@WebFilter
注释的参数。
尽管您正在使用 @WebFilter
注释,但您必须在 web.xml
中声明过滤器映射。
查看如何将 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 模式。
根据 servlet 3.0
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet{...}
@WebFilter(filterName="filter1", urlPatterns={ "/LoginServlet" })
public class AuthenticationFilter implements Filter {..}
但您仍应保留 web.xml 中的 <url-pattern>
,因为根据 XSD,它是必需的,尽管它可以为空:
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern />
</filter-mapping>
另请参阅使用 Tomcat、@WebFilter doesn't work with inside web.xml