【问题标题】:Is possible to use Servlet 3.0 annotation to configure external servlets/filters?是否可以使用 Servlet 3.0 注释来配置外部 servlet/过滤器?
【发布时间】:2013-10-22 02:21:26
【问题描述】:

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,所以很高兴找到如何以编程方式声明此类映射。

【问题讨论】:

    标签: servlets annotations web.xml servlet-3.0


    【解决方案1】:

    查看specs,第 8.1 节“注解和可插拔性”:

    在 Web 应用程序中,使用注解的类将处理其注解 仅当它们位于 WEB-INF/classes 目录中,或者它们被打包时 在应用程序的 WEB-INF/lib 中的 jar 文件中。

    还有关于metadata-complete 的东西。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-12
        • 2017-08-08
        • 2011-02-02
        • 2011-03-12
        • 2017-08-29
        • 2012-06-03
        • 2013-11-21
        • 2011-07-29
        相关资源
        最近更新 更多