【问题标题】:What is the point of @WebInitParam?@WebInitParam 的意义何在?
【发布时间】:2018-09-06 22:44:03
【问题描述】:

@WebInitParam 是类级别的注释。 它定义了 servlet 的初始化参数。

我想知道,这样做和使用静态变量有什么区别,为什么使用@WebInitParam 方式而不是使用静态变量?

将 k/v 对定义为 @WebInitParams 允许您做哪些如果您声明静态变量则无法做到的事情?

我已经看过了,我只能找到一百万人在说如何定义 @WebInitParams。嗯,是的,这很容易。这就是我能做的,这才是真正令人感兴趣的。

非常感谢。

【问题讨论】:

  • 通常过滤器和你可以拉入罐子的过滤器是通过网络参数配置的

标签: servlets jakarta-ee


【解决方案1】:

从“存在理由”的角度来看,注释作为一种更好的设计和架构替代方案而存在,而不是仅仅在一个类中添加静态字段。 @WebInitParam 是 servlet 或过滤器类所需的初始化参数的自记录方法,也可通过 web.xml 获得。它为最终开发人员以及整个 JavaEE 平台服务。

这样想:在普通项目中,您可以选择将类中的一堆参数硬编码为静态字段,或者在属性文件中定义相同的参数。你会选哪个?什么情况下?

从纯粹的功能角度,除了using the annotation to override defaults set in web.xml 的功能之外,另一个主要原因是您有时需要从应用程序中的另一个组件获取这些初始化参数。使用注释本质上增加了参数的可见性。例如,在 JSF 中,API 允许您通过以下方式检索 FacesServlet 初始化参数:

 //get all the parameters
FacesContext.getCurrentInstance().getExternalContext().getInitParameterMap()

//get a specific parameter 
 FacesContext.getCurrentInstance().getExternalContext().getInitParameter("aParameter");

在 JSF-2.3 中,使用以下启用 CDI 的注入变得更加方便:

 @InitParameterMap Map<String,String> servletParameterMap;

请记住,因为它是 CDI,这意味着该工具在整个 JavaEE 平台中都可用,而不仅仅是在 Web 应用程序/JSF 中。

如果唯一可用的机制是 servlet 类中的静态字段,那么检索 init 参数会很麻烦——您需要获取过滤器或 servlet 的实例才能获取其中的静态字段。

另外,人们可能会提出这样的论点:也许应该更喜欢 context-params 而不是 servlet-params,因为那样的话,您将获得更多的灵活性,而不受任何给定的 servlet 的约束。这完全是另一回事:)

【讨论】:

  • 嗨,非常感谢您的冗长回答,但我仍然不明白用例。不幸的是,您的答案像许多其他人一样在代码语法方面进行了解释,但没有说“这就是您可能使用它的原因”。我对 servlet 等的理解是有限的(我几周前才开始学习)。我要说的是,如果您说一个简单的 JSP 页面,该页面称为一个称为服务 bean (EJB) 的 servlet 页面,那么在 servlet 中定义 @WebInitParams 将允许您执行静态无法执行的操作字段代替?谢谢。
  • 如果您的意思是它对单个 servlet 有什么作用?没有什么是您无法使用静态字段实现的。但好的设计和最佳实践超越了所涉及的单个类,而是着眼于整个应用程序和平台。从更广泛、更全面的角度来看,initparam 是最好的方法。这就像在类中的硬编码变量与将它们提取到属性文件之间进行选择:确保它们以相同的方式有效地工作,但客观上一个比另一个更好@JL_SO
  • 我想我明白了。我认为您所说的是静态字段可以出于任何目的包含任何内容,但是 webinitparams 是自记录的字段,其目的是为 servlet 提供初始化参数,因此任何维护代码的开发人员都可以清楚地看到它们而无需在可能用于任何目的的静态字段中进行扫描。谢谢。
  • 非常适合自己@JL_SO
猜你喜欢
  • 2011-12-25
  • 2013-01-30
  • 1970-01-01
  • 2020-11-10
  • 2023-03-29
  • 2012-12-09
  • 2016-04-14
  • 2010-10-27
  • 2023-03-04
相关资源
最近更新 更多