@WebInitParam 的用例

发布于 2024-12-14 06:09:31 字数 517 浏览 2 评论 0原文

自 Servlet 3.0 规范以来,可以将 servlet 映射元数据声明为 servlet 类上的注释:

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

}

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

在 @WebServlet 注释中指定 init 参数有哪些用例?

Since the Servlet 3.0 specification there is the possibility of declaring servlet mapping metadata as annotation on the servlet class:

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

}

What I do not understand though is the use case for keeping init parameters in the same class as the servlet. As far as I understand these parameters are to be kept separate from the class and placed into the deployment descriptor.

What use cases are there for specifying init parameters within the @WebServlet annotation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

因为看清所以看轻 2024-12-21 06:09:31

注释用于给出默认值。

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


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

  <servlet>
    <servlet-name>appInfoServlet</servlet-name>
    <init-param>
        <param-name>ocwd.deployer.email</param-name>
        <param-value>[email protected]</param-value>
    </init-param>
  </servlet>

The annotations are used to give the default values.

In JavaEE the deployment properties can also be provided using annotations. Given the values for annotations, the deployment descriptor i.e, web.xml can still be used to override the default values provided by the annotations.


In the example above, the init-param can be overriden by configuring a servlet with a matching name in web.xml:

  <servlet>
    <servlet-name>appInfoServlet</servlet-name>
    <init-param>
        <param-name>ocwd.deployer.email</param-name>
        <param-value>[email protected]</param-value>
    </init-param>
  </servlet>
猫瑾少女 2024-12-21 06:09:31

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

如果此类的用户可以接受默认值,则他不需要添加任何内容,只需使用它即可。如果他不是 - 他可以使用 DD 对其进行修改。

I can think of one, from the top of my head: provide the default value (i.e. by the class designer).

If the user of this class is fine with the default value, he don't need to add anything and just uses it. If he's not - he can modify it using the DD.

莫言歌 2024-12-21 06:09:31

我认为这个用例就像各种框架中其他注释的其他用例一样,我们在注释之前使用单独的 XML。

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

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

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

I think the use case is like other use cases for other annotations in various frameworks where we used separate XML prior to annotations.

You can say the same about JAXB annotations. Really, you can implement one class and use multiple strategies of its mapping to XML. But once you move to annotations you create kind of tight coupling between class and metadata. The same is relevant for Spring annotations. Etc.

In practice we rarely deploy the same servlet twice using different configuration or use the same EJB twice or map class to different XML schemas. But in this case it is very convenient to store metadata together with code. This problem is solved in java with annotations.

Bottom line: use this definition in concrete application where each servlet has certain functionality and role and by definition is not reusable and tightly coupled with its URL mapping and configuration. Do not use this if you a creating environment like Struts or Spring controller. In this case the application programmer should be able to configure the servlet.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文