是否可以使用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文件配置“过滤器”相同的方法?
答案 0 :(得分:13)
JBoss 7(甚至已经是JBoss 6)支持Java EE 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的一部分,它是在Servlets之上构建的另一个API(RESTful webservice API)。要了解有关JAX-RS的更多信息,Jersey user guide可能很有用。