是否可以在 EE 6 中使用 @ApplicationPath 和 @Path 注释来模拟 servlet 过滤器链?
例子:
@ApplicationPath("/api")
class Filter extends Application {
@Path("/*")
public void filter() {
log.info("Request to API");
}
}
...
@Path("/foo")
class Foo {
@GET
@Path("/bar")
@Produces("text/plain")
public String bar() {
return "Hello World";
}
}
URL 的位置 http://foobar.com/api/foo/bar但是“filter”方法将被调用,就好像它是一个 servlet 过滤器链一样。我知道上面的方法行不通,但是同类中是否有带注释的方法可以实现与从 web.xml 文件配置“过滤器”一样的效果?
最佳答案
JBoss 7(甚至 JBoss 6 已经)支持 Java EE 6,后者又涵盖了 Servlet 3.0。也许您的 web.xml
被错误地声明为符合 Servlet 2.5,这导致 @WebFilter
根本无法工作。确保您的 web.xml
的根声明被声明为符合 Servlet 3.0,如下所示:
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
然后你可以使用@WebFilter
:
@WebFilter("/api/*")
public class FooFilter implements Filter {
// ...
}
您在那里展示的示例是 JAX-RS 的一部分,JAX-RS 是另一个构建在 Servlet 之上的 API(RESTful 网络服务 API)。要了解有关 JAX-RS 的更多信息,请访问 Jersey user guide可能会有用。
另见:
关于java - 使用 Java EE 6 注释的 Servlet 过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8146530/