【问题标题】:Use cases for @WebInitParam@WebInitParam 的用例
【发布时间】:2011-12-25 06:10:50
【问题描述】:

自从 Servlet 3.0 规范以来,就有可能将 servlet 映射元数据声明为 servlet 类的注解:

@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="admin@example.com"))
public class AppInfoServlet extends HttpServlet {

}

但我不明白将 init 参数保存在与 servlet 相同的类中的用例。据我了解,这些参数应与类分开并放入部署描述符中。

在@WebServlet 注解中指定初始化参数有哪些用例?

【问题讨论】:

    标签: java jakarta-ee servlets annotations


    【解决方案1】:

    注解用于给出默认值。

    在 JavaEE 中,也可以使用注解来提供部署属性。给定注解的值,部署描述符(即 web.xml)仍可用于覆盖注解提供的默认值。


    在上面的示例中,init-param 可以通过在 web.xml 中配置具有匹配名称的 servlet 来覆盖:

      <servlet>
        <servlet-name>appInfoServlet</servlet-name>
        <init-param>
            <param-name>ocwd.deployer.email</param-name>
            <param-value>noreply@example.com</param-value>
        </init-param>
      </servlet>
    

    【讨论】:

    • 感谢您的回答。我在您的答案中添加了一个关于覆盖如何工作的示例。
    【解决方案2】:

    我可以想到一个:提供默认值(即由类设计器提供)。

    如果这个类的用户对默认值没问题,他不需要添加任何东西,直接使用它。如果不是 - 他可以使用 DD 对其进行修改。

    【讨论】:

      【解决方案3】:

      我认为该用例类似于各种框架中其他注释的其他用例,我们在注释之前使用单独的 XML。

      您可以对 JAXB 注释说同样的话。实际上,您可以实现一个类并使用多种策略将其映射到 XML。但是一旦你转向注解,你就会在类和元数据之间创建一种紧密的耦合。这同样适用于 Spring 注释。等等。

      实际上,我们很少使用不同的配置两次部署相同的 servlet,或者两次使用相同的 EJB,或者将类映射到不同的 XML 模式。但在这种情况下,将元数据与代码一起存储非常方便。这个问题在java中用注解解决了。

      底线:在具体应用程序中使用此定义,其中每个 servlet 具有特定的功能和角色,并且根据定义是不可重用的,并且与其 URL 映射和配置紧密耦合。如果您是像 Struts 或 Spring 控制器这样的创建环境,请不要使用它。在这种情况下,应用程序程序员应该能够配置 servlet。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2013-04-06
        • 1970-01-01
        • 2022-11-09
        • 2021-10-18
        • 2019-06-17
        • 2013-11-09
        相关资源
        最近更新 更多