Servlets @WebInitParam有什么意义?

Servlets @WebInitParam有什么意义?,servlets,jakarta-ee,Servlets,Jakarta Ee,@WebInitParam是类级别的注释。 它定义servlet的初始化参数 我想知道,这样做和使用静态变量有什么区别,为什么使用@WebInitParam方式而不是使用静态 将k/v对定义为@WebInitParams允许您执行哪些在声明静态变量时无法执行的操作 我已经看过了,我能找到的只是一百万人在说如何定义@WebInitParams。是的,这很简单。这是我能做的,这才是我真正感兴趣的 非常感谢 从“存在的理由”的角度来看,注释是一种更好的设计和体系结构,而不仅仅是在类中添加静态字段@We

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

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

将k/v对定义为@WebInitParams允许您执行哪些在声明静态变量时无法执行的操作

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

非常感谢

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

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

从纯粹的功能角度来看,除了的功能外,另一个主要原因是您有时需要从应用程序中的另一个组件获取这些初始化参数。使用注释实质上增加了参数的可见性。例如,在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;
@InitParameterMap servletParameterMap;
请记住,由于它是CDI,这意味着该功能在整个JavaEE平台上都可用,而不仅仅是在web应用程序/JSF中

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


另外,我们可以提出这样一个论点:也许我们应该支持上下文参数而不是servlet参数,因为这样,您就可以获得更多的灵活性,而不受任何给定servlet的限制。这是一个完全独立的问题:)

通常过滤器和您可以拉入的jar都是通过web paramsHi配置的,非常感谢您给出了冗长的答案,但我仍然不理解这个用例。不幸的是,您的答案和其他许多答案一样,是从代码语法的角度解释的,但没有说“这就是您可能使用它的原因”。我对servlet等的理解是有限的(我几周前才开始学习)。我想说的是,如果你有一个简单的JSP页面,称之为servlet页面,称之为服务bean(EJB),那么在servlet中定义@WebInitParams会让你做什么,而不是用静态字段?谢谢。如果你是说它对单个servlet有什么作用?没有什么是静态场无法实现的。但是,好的设计和最佳实践不仅仅着眼于所涉及的单个类,而是着眼于整个应用程序和平台。从更广泛、更全面的角度来看,initparam是最好的方法。这就像是在类中硬编码变量与将变量提取到属性文件之间进行选择:确保它们有效地以相同的方式工作,但客观上一个设计比另一个更好@JL_SOI,我想我明白了。我认为您所说的是,静态字段可以包含任何内容,用于任何目的,但是webinitparams是自文档化的字段,其目的是为servlet提供init参数,因此任何维护代码的开发人员都可以清楚地看到它们,而无需扫描可能用于任何目的的静态字段。谢谢。很好,把你自己放在@JL_SO