If I had to define a context-visib parameter at runtime, I wouldn't use ServletContext.setInitParameter() because init parameters are defined in the deployment descriptor once for all, and I suppose that ServletContext().setAttribute() would be more appropriate.
Said that,
- is my approach correct? In which case should I use
ServletContext.setInitParameter()instead ofServletContext().setAttribute()? - why is the method called
setInitParameter()? Init parameters are actually defined forServletConfigin the web.xml file, I'm setting/getting context parameters (owning toServletContext) instead.
ServletContext::setAttributeis the correct way to do what you're doing. If you look at the javadoc forServletContext::setInitParameter, you'll see it says:So once the context has started up, you won't be able to call that method any more.
setInitParameterwas introduced with Servlet 3.0, which introduces annotation-based config as an alternative to XML config. I assume this method was added to allow annotation-based config to populate the init params via a Java method call.