@WebInitParam有什么意义?

时间:2018-09-06 22:44:04

标签: servlets java-ee

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

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

将k / v对定义为@WebInitParams有什么作用,而如果您声明了静态变量,那将无法做到?

我已经看过,我所能找到的只是一百万人在说如何定义@WebInitParams。是的,这很容易。我可以做的就是真正引起您的兴趣。

非常感谢。

1 个答案:

答案 0 :(得分:3)

从“存在理由”的角度来看,注释的存在是一种更好的设计和体系结构替代,而不仅仅是在静态字段中添加类。 @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的实例才能在其中获取静态字段。

另外,人们可能会提出一种论点,即人们应该更倾向于使用上下文参数而不是servlet-params,因为这样一来,您可以获得与任何给定servlet无关的更大灵活性。完全是另一回事:)