0

Servlet API 3.0 中引入的新注解对于配置自己实现的 servlet/过滤器非常有用。但是......有什么方法可以配置依赖项提供的servlet/filter?

例如,使用 Resteasy(实际上是很多框架)很常见,需要类似以下内容:

<web-app version="3.0"
     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">

  <listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
  </listener>

  (...)

</web-app 

因此,您不能在那里使用注释。由于一些分布问题,我希望能够使用一个空的 web.xml,所以很高兴找到如何以编程方式声明此类映射。

4

2 回答 2

0

检查规范,第 8.1 节“注释和可插拔性”:

在 Web 应用程序中,使用注解的类只有在它们位于 WEB-INF/classes 目录中,或者如果它们被打包在应用程序内的 WEB-INF/lib 中的 jar 文件中时,才会处理它们的注解。

还有关于metadata-complete.

于 2013-10-14T14:43:16.950 回答
0

你可以这样做——但这并不一定意味着你应该:)。

如果您不需要创建任何 ServletContextListeners,那么您可以编写一个 ServletContextListener 并使用 ServletContext 的编程 API 将 Servlet、Filters、HttpSessionListeners 等添加到您的 Web 应用程序中。用 @WebListener 注释你的 ServletContextListeners,你就完成了。

如果您需要创建 ServletContextListeners,那么您必须使用 ServletContainerInitializer。再次使用 ServletContext 的编程 API。在这种情况下=,您不妨在 ServletContainerInitializer 中做所有事情。

于 2013-10-14T19:25:07.867 回答