首先,这两个都叫做初始化参数,只不过servlet初始化参数才在DD配置中包含“init”一词。
上下文初始化参数:
在<web-app>元素中,但不在具体的<servlet>元素中。比如:<web-app>
<context-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</context-param>
<!-- other stuff including servlet declarations-->
</web-app>
Servlet初始化参数:
在每个特定的Servlet的<servlet>元素中,比如:<servlet>
<servlet-name>BeerParamTests</servlet-name>
<servlet-class>TestInitParams</servlet-class>
<init-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</init-param>
</servlet>
在Servlet代码中调用初始化参数:
上下文初始化参数调用: getServletContext().getInitParameter("foo"); 对Web应用的所有servlet和JSP都可用。Servlet初始化参数调用:getServletConfig().getInitParameter("foo"); 只对配置了<init-param>的相应servlet可用。
注意:每个servlet有一个ServletConfig,每个Web应用有一个ServletContext.要把初始化参数认为是部署时常量,可用在运行时得到这些初始化参数,但不能设置初始化参数,根本没有setInitParameter().如果修改XML来改变一个初始化参数的值,只有当Web应用重新部署时Web应用其他部分才会看到,因为servlet只会初始化一次,在初始化时会为它提供ServletConfig和ServletContext。