初始化参数

## Servlet初始化参数

1. Servlet初始化参数定义在web.xml中的一个servlet元素中，例如：

<servlet>

<servlet-name>test</servlet-name>

<servlet-class>com.bk.Test</servlet-class>

<init-param>

<param-name>default-time</param-name>

<param-value>60</param-value>

</init-param>

</servlet>

可以有若干个<init-param>对。

2. 怎样取得Servlet初始化参数

可以在Servlet中直接调用getInitParameterr(java.lang.String name)方法来读取初始化参数。

也可以通过ServletConfig接口的getInitParameter(java.lang.String name)方法。

getServletConfig()该方法定义在Servlet接口中，返回ServletConfig接口的引用。

所有的servlet都继承了该方法。当容器实例化一个servlet之前，会从web.xml中读取这个servlet的初始化参数，并把这些参数交给ServletConfig，然后在调用init()方法时，容器会传送这个ServletConfig的引用到servlet。每个servlet都会有一个唯一的ServletConfig引用。一旦有了ServletConfig的引用就可以调用getInitParameter()方法来取得我们在servlet中设置的初始化参数。

另外，getServletName返回Servlet的名字，初始化参数和ServletName都在配置文件中定义，打开本节代码的配置文件，下面是与本小节有关的部分：

1. <servlet>

2. <servlet-name>servletconfigcontext</servlet-name>

3. <servlet-class>

4. servletconfigcontext.ServletConfigContext

5. </servlet-class>

6. <init-param>

7. <param-name>username</param-name>

8. <param-value>testuser</param-value>

9. </init-param>

10. <init-param>

11. <param-name>password</param-name>

12. <param-value>test</param-value>

13. </init-param>

14. </servlet>

<init-param>中的内容就是初始化参数，初始化参数的设置在Servlet的设置中，因此该初始化参数属于这个Servlet。

所谓ServletName(Servlet)的名字，就是<servlet-name>中的内容，因此，ServletName不是Servlet的类名。

在ServletConfigContext的init方法中，下面的代码用于输出ServletName和所有的初始化参数：

1. System.out.println("---Test methods from Servlet Config---");

2. System.out.println("config.getServletName= " + config.getServletName());

3. try {

4. System.out.println("Config InitParameters:");

5. Enumeration initParaNames = config.getInitParameterNames();

6. while (initParaNames.hasMoreElements()) {

7. String name = (String) initParaNames.nextElement();

8. System.out.println(name + " = " + config.getInitParameter(name));

9. }

10. }

上述代码在服务器窗口中的输出如下：

---Test methods from Servlet Config---

config.getServletName= servletconfigcontext

Config InitParameters:

password = test

username = testuser

## 上下文初始化参数

上下文初始化参数与Servlet初始化参数类似，区别是上下文初始化参数对整个web应用而不是Servlet初始化参数只对应一个servlet。

在web应用的整个生命周期中上下文初始化参数都存在，任意的servlet和jsp都可以随时随地的访问它。

1. 在web.xml中的配置例子如下：

<context-param>

<param-name>default-time</param-name>

<param-value>60</param-value>

</context-param>

上下文初始化参数对应于整个web应用，因此它不在某个servlet元素内。一个web应用有一个ServletContext，而一个servlet有一个ServletConfig。

2. 怎样取得上下文初始化参数？

servlet的ServletConfig对象拥有该servlet的ServletContext的一个引用，所以可这样取得上下文初始化参数：getServletConfig().getServletContext().getInitParameter()

也可以在servlet中直接调用getServletContext().getInitParameter()，两者是等价的。