Java @WebInitParam的用例
由于Servlet 3.0规范,有可能将Servlet映射元数据声明为Servlet类上的注释:Java @WebInitParam的用例,java,jakarta-ee,servlets,annotations,Java,Jakarta 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 { } 但是,我
@WebServlet(name="appInfoServlet", urlPatterns ="/appInfo", initParams = @WebInitParam(name="ocwd.deployer.email", value="admin@example.com"))
public class AppInfoServlet extends HttpServlet {
}
但是,我不理解的是将init参数保持在与servlet相同的类中的用例。据我所知,这些参数将与类分开保存,并放置在部署描述符中
在
@WebServlet
注释中指定init参数有哪些用例?我可以从脑海中想到一个:提供默认值(即由类设计器提供)
如果这个类的用户对默认值没有问题,他不需要添加任何东西,只需要使用它。如果他没有-他可以使用DD修改它。我认为该用例与各种框架中其他注释的其他用例类似,在这些框架中,我们在注释之前使用单独的XML 对于JAXB注释,您也可以这样说。实际上,您可以实现一个类并使用多种策略将其映射到XML。但是,一旦移动到注释,就会在类和元数据之间创建某种紧密耦合。这同样适用于Spring注释。等等 实际上,我们很少使用不同的配置两次部署同一个servlet,或者两次使用同一个EJB,或者将类映射到不同的XML模式。但在这种情况下,将元数据与代码一起存储非常方便。这个问题在java中通过注释解决
一句话:在具体的应用程序中使用这个定义,其中每个servlet都有特定的功能和角色,并且根据定义是不可重用的,并且与URL映射和配置紧密耦合。如果要创建Struts或Spring controller之类的环境,请不要使用此选项。在这种情况下,应用程序程序员应该能够配置servlet 注释用于给出默认值 在JavaEE中,还可以使用注释提供部署属性。给定注释的值,部署描述符(即web.xml)仍然可以用于覆盖注释提供的默认值
在上面的示例中,可以通过在
web.xml
中配置具有匹配名称的servlet
来覆盖init参数
:
<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>
appInfoServlet
ocwd.deployer.email
noreply@example.com
谢谢你的回答。我在您的答案中添加了一个关于覆盖如何工作的示例。