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

Java 为什么我应该对ServletContext使用setInitParameter()而不是setAttribute()?,java,servlets,servletconfig,Java,Servlets,Servletconfig,如果必须在运行时定义context visib参数,我不会使用ServletContext.setInitParameter(),因为init参数在部署描述符中一次性定义,我认为ServletContext().setAttribute()更合适 说, 我的方法正确吗?在这种情况下,我应该使用ServletContext.setInitParameter()而不是ServletContext().setAttribute() 为什么该方法被称为setInitParameter()?Init参数实

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

说,

  • 我的方法正确吗?在这种情况下,我应该使用
    ServletContext.setInitParameter()
    而不是
    ServletContext().setAttribute()
  • 为什么该方法被称为
    setInitParameter()
    ?Init参数实际上是为web.xml文件中的
    ServletConfig
    定义的,我正在设置/获取上下文参数(由于
    ServletContext
  • 是的,你的方法是正确的。使用
    ServletContext::setAttribute
    是正确的方法。如果查看
    ServletContext::setInitParameter
    的javadoc,您会看到它说:
  • IllegalStateException-如果此ServletContext已初始化

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

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

  • 在这一点上我有点困惑。。。在Servlet中,我可以调用getServletContext().setInitParameter(“e-mail”、“e-mail”)-mail@email.com)而没有获得异常,但上下文是否已在该阶段初始化?