从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参数有哪些用例?
答案 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。