为什么我应该为 ServletContext 使用 setInitParameter() 而不是 setAttribute()?
Why should I use setInitParameter() instead of setAttribute() for ServletContext?
如果我必须在运行时定义一个 context-visib 参数,我不会使用 ServletContext.setInitParameter()
因为初始化参数在部署描述符中一次性定义,我想 ServletContext().setAttribute()
会更合适。
说,
- 我的做法正确吗?在什么情况下我应该使用
ServletContext.setInitParameter()
而不是 ServletContext().setAttribute()
?
- 为什么方法叫做
setInitParameter()
? 初始化参数实际上是在web.xml文件中为ServletConfig
定义的,我是setting/getting上下文参数(属于ServletContext
)。
- 是的,你的做法是正确的。使用
ServletContext::setAttribute
是做你正在做的事情的正确方法。如果您查看 ServletContext::setInitParameter
的 javadoc,您会看到它说:
IllegalStateException - if this ServletContext has already been initialized
因此,一旦上下文启动,您将无法再调用该方法。
setInitParameter
是在 Servlet 3.0 中引入的,它引入了基于注释的配置作为 XML 配置的替代方案。我假设添加此方法是为了允许基于注释的配置通过 Java 方法调用填充初始化参数。
如果我必须在运行时定义一个 context-visib 参数,我不会使用 ServletContext.setInitParameter()
因为初始化参数在部署描述符中一次性定义,我想 ServletContext().setAttribute()
会更合适。
说,
- 我的做法正确吗?在什么情况下我应该使用
ServletContext.setInitParameter()
而不是ServletContext().setAttribute()
? - 为什么方法叫做
setInitParameter()
? 初始化参数实际上是在web.xml文件中为ServletConfig
定义的,我是setting/getting上下文参数(属于ServletContext
)。
- 是的,你的做法是正确的。使用
ServletContext::setAttribute
是做你正在做的事情的正确方法。如果您查看ServletContext::setInitParameter
的 javadoc,您会看到它说:
IllegalStateException - if this ServletContext has already been initialized
因此,一旦上下文启动,您将无法再调用该方法。
setInitParameter
是在 Servlet 3.0 中引入的,它引入了基于注释的配置作为 XML 配置的替代方案。我假设添加此方法是为了允许基于注释的配置通过 Java 方法调用填充初始化参数。