Servlet初始化参数与上下文初始化参数的获取

有些时候,书再厚也无法涵盖一切细节。 比如说今天我在学习过程中遇到这样的一个问题:Servlet初始化参数与上下文初始化参数的获取方法,在书中略为带过而已。但调试的时候总是报错,步骤一致,结果却不一样。后来经过自己不断测试和查找相关文章阅读,总算是解决了这个问题。以下对问题解决方法的描述基于网络上已有的文章,这里感谢他们的工作。

Servlet初始化参数:
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>对。

怎样取得Servlet初始化参数?
A 单个参数值的获取

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

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

B 多个参数值的获取
需要注意:

1 web.xml的写法:
<servlet>
        <servlet-name>testContextParam</servlet-name>
        <servlet-class>testContextParam</servlet-class>

        <init-param>
            <param-name>nameInit</param-name>
            <param-value>nameInit</param-value>
        </init-param>
        <init-param>
            <param-name>ageInit</param-name>
            <param-value>ageInit</param-value>
        </init-param>
        <init-param>
            <param-name>sexInit</param-name>
            <param-value>sexInit</param-value>
        </init-param> 

</servlet>

这里我犯了两个错误:首先,我将<init-param>标签置于<servlet>标签之外,结果获取的结果总是null。其次,我将多个初始化参数错误地写成:

         <init-param>
            <param-name>nameInit</param-name>
            <param-value>nameInit</param-value>
           <param-name>ageInit</param-name>
            <param-value>ageInit</param-value>
            <param-name>sexInit</param-name>
            <param-value>sexInit</param-value>
        </init-param> 

结果使用以下的获取方式总是只能读到最后一个参数的信息。


2 获取方式:

public void service(ServletRequest req,ServletResponse res) throws

ServletException,IOException{
... 
     out.println("init parameters");
     Enumeration myEnum=getInitParameterNames();
     while(myEnum.hasMoreElements()){
        String name=(String)myEnum.nextElement();//取得参数名
        out.println(name+":"+getInitParameter(name));//获取参数值
     }
...
}


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上下文初始化参数:

上下文初始化参数与Servlet初始化参数类似,区别是上下文初始化参数对整个web应用而不是Servlet初

始化参数只对应一个servlet。
在web应用的整个生命周期中上下文初始化参数都存在,任意的servlet和jsp都可以随时随地的访问它。
在web.xml中的配置例子如下:
<context-param>
 <param-name>default-time</param-name>
 <param-value>60</param-value>
</context-param>
上下文初始化参数对应于整个web应用,因此它不在某个servlet元素内。一个web应用有一个ServletContext,而一个servlet有一个ServletConfig。


怎样取得上下文初始化参数?

servlet的ServletConfig对象拥有该servlet的ServletContext的一个引用,所以可这样取得上下文初始化参数;
getServletConfig().getServletContext().getInitParameter()
也可以在servlet中直接调用getServletContext().getInitParameter(),两者是等价的。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值