@WebInitParam的用例

时间:2011-11-09 11:44:25

标签: java java-ee servlets annotations

从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注释中指定init参数有哪些用例?

3 个答案:

答案 0 :(得分:17)

注释用于提供默认值。

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


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

  <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>

答案 1 :(得分:3)

我可以从头脑中想到一个:提供默认值(即由班级设计师提供)。

如果这个类的用户没有使用默认值,他就不需要添加任何东西而只是使用它。如果他不是 - 他可以使用DD修改它。

答案 2 :(得分:2)

我认为用例就像其他用法中的其他用例一样,我们在注释之前使用了单独的XML。

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

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

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