Servlet(3)ServletConfig接口的介绍(获取web.xml中某个Servlet中的初始配置参数)

23 篇文章 0 订阅
8 篇文章 0 订阅

什么是ServletConfig?

当web容器在创建servlet实例对象时,可以给每一个servlet设置初始化信息,而这些初始化信息会被自动封装到ServletConfig中。

当在调用servletinit方法时,会将ServletConfig对象传递给servlet。因此通过ServletConfig对象就可以得到当前servlet的初始化参数信息。


为什么要设置初始化信息?

在实际开发中,有一些东西不适合在servlet程序中写死,这类数据就可以通过配置方式配给servlet,如:

servlet采用哪个编码表,连接什么数据库等


原DemoServlet.java在web.xml中的相关配置为:

<servlet></servlet>

<servlet-mapping></servlet-mapping>

上边两个是一组,不能缺少!


<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>cn.flying.servlet.DemoServelt</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
 </servlet-mapping>

如何设置初始化信息?(写在某个Sevlet的web.xml中对应的配置中)

直接在web.xml中的servlet标签中进行配置(设置初始化信息),(带注释的,方便理解)如下:

<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>cn.flying.servlet.DemoServelt</servlet-class>
    <!-- 为该servlet设置初始化信息:以key和value的形式存储数据 -->
    <init-param>
    	<!-- 设置初始化信息的key -->
    	<param-name>name</param-name>
    	<!-- 设置初始化信息的value -->
    	<param-value>张三</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
  </servlet-mapping>

不要注释(注意与原来的对比一下):

<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>cn.flying.servlet.DemoServelt</servlet-class>
    <init-param>
    	<param-name>name</param-name>
    	<param-value>张三</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo</url-pattern>
 </servlet-mapping>


如何获取初始化信息?

 

获取初始化信息的常用方法:

1、getInitParameter(String name):通过key获取value值(适合单个key和value,如有n个,需要重复n遍部分代码)

DemoServlet.java完整代码如下:

package com.flying.servlet;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		ServletConfig servletConfig = this.getServletConfig();
		
		String name = servletConfig.getInitParameter("name");
		
		System.out.println("name的值是:"+name);
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

1 把项目/工程(servlet)发布到到tomcat中启动

2 在地址栏中输入:http://localhost:8080/servlet/hello  回车确认


控制台显示:

name的值是:张三


2、getInitParameterNames():获取所有初始化信息的key,返回的是一个枚举,然后可以通过遍历枚举获取所有的key,在通过key来获取value。

DemoServlet.java完整代码如下:

package com.flying.servlet;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		ServletConfig servletConfig = this.getServletConfig();
		
		Enumeration<String> names = this.getInitParameterNames();
		while (names.hasMoreElements()) {
			String name = (String) names.nextElement();//此时name(就相当于key)的值是web.xml中的name字符串,不是:张三
			System.out.println(name+"的值是:"+servletConfig.getInitParameter(name));
		}
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}



1 把项目/工程(servlet)重新启动

2 在地址栏中输入:http://localhost:8080/servlet/hello  回车确认

【结果和上面的一样】

控制台显示:

name的值是:张三


【注意】

若web.xml中配置了多个初始化信息,采用2、getInitParameterNames()方法

如下:

<servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>com.flying.servlet.DemoServlet</servlet-class>
    <init-param>
	<param-name>name</param-name>
    	<param-value>张三</param-value>
    </init-param>
    <init-param>
	<param-name>name2</param-name>
    	<param-value>李四 </param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
</servlet-mapping>


1 把项目/工程(servlet)重新启动

2 在地址栏中输入:http://localhost:8080/servlet/hello  回车确认


控制台显示:

name的值是:张三

name2的值是:李四




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值