我是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.");
}
}
工作区的屏幕截图:
非常感谢任何帮助。
答案 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模式(你要执行它)。