为什么我应该为 ServletContext 使用 setInitParameter() 而不是 setAttribute()?

Why should I use setInitParameter() instead of setAttribute() for ServletContext?

如果我必须在运行时定义一个 context-visib 参数,我不会使用 ServletContext.setInitParameter() 因为初始化参数在部署描述符中一次性定义,我想 ServletContext().setAttribute() 会更合适。

说,

  1. 我的做法正确吗?在什么情况下我应该使用 ServletContext.setInitParameter() 而不是 ServletContext().setAttribute()
  2. 为什么方法叫做setInitParameter()初始化参数实际上是在web.xml文件中为ServletConfig定义的,我是setting/getting上下文参数(属于ServletContext)。
  1. 是的,你的做法是正确的。使用 ServletContext::setAttribute 是做你正在做的事情的正确方法。如果您查看 ServletContext::setInitParameter 的 javadoc,您会看到它说:

IllegalStateException - if this ServletContext has already been initialized

因此,一旦上下文启动,您将无法再调用该方法。

  1. setInitParameter 是在 Servlet 3.0 中引入的,它引入了基于注释的配置作为 XML 配置的替代方案。我假设添加此方法是为了允许基于注释的配置通过 Java 方法调用填充初始化参数。