Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @WebInitParam的用例_Java_Jakarta Ee_Servlets_Annotations - Fatal编程技术网

Java @WebInitParam的用例

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 { } 但是,我

由于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参数有哪些用例?

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


如果这个类的用户对默认值没有问题,他不需要添加任何东西,只需要使用它。如果他没有-他可以使用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

谢谢你的回答。我在您的答案中添加了一个关于覆盖如何工作的示例。