ServletConfig和ServletContext以及读取资源的方法

ServletConfig对象

当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

//获得配置文档中<init-param>标签下name对应的value
this.getServletConfig().getInitParameter("name");
//获取所有初始化参数
Enumeration e = this.getServletConfig().getInitParameterNames();
while(e.hasMoreElements()){
    String name = (String) e.nextElement();
    String value = this.getServletConfig().getInitParameter(name);
    System.out.println(name + "=" + value);
}

一般应用于
1.获取字符集编码
String charset = this.getServletConfig().getInitParameter("charset");
2.获得数据库连接信息
String url = this.getServletConfig().getInitParameter("url");
String username = this.getServletConfig().getInitParameter("username");
String password = this.getServletConfig().getInitParameter("password");
3.获得配置文件
String configFile = this.getServletConfig().getInitParameter("config");

ServletContext对象

web容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。当应用关闭(或reload tomcat)时,自动销毁。
1.多个servlet通过ServletConfig()实现数据共享
由于一个web应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

//servletContext域对象
ServletContext servletcontext = this.getServletContext();
//向域中存了一个属性
servletcontext.setAttribute("String",object);

//另一个servlet
ServletContext servletcontext = this.getServletContext();
//获取域中的属性
String value = (String) context.getAttribute("String"); 

2.通过servletContext对象获取到整个web应用的配置信息
获取单个servlet配置信息用servletConfig,当配置信息是全体时:

<context-param>
    <param-name>name</param-name>
    <param-value>huangxin</param-value>
</context-param>

那么用 this.getServletContext().getInitParameter("name"),可以取出配置信息。
3.通过servletContext对象实现转发
this.getServletContext().getRequestDispatcher("/...").forward(request, response);
4.通过servletContext对象读取资源文件
在web工程中,我们一般来说,是不能采用传统方式读取配置文件的,因为相对的是jvm的启动目录(tomcat的bin目录),所以我们要使用web绝对目录来获取配置文件的地址。
1)使用ServletContext的getResourceAsStream方法:返回资源文件的读取字节流

//db.properties在webRoot目录下
InputStream in = this.getServletContext().getResourceAsStream("/db.properties");
Properties prop = new Properties();  
prop.load(in);
String url = prop.getProperty("url");

2)使用ServletContext的getRealPath方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件(除了可以获取数据,还可以获取资源文件的名称)

//文件imgs在webRoot目录下
String path = this.getServletContext().getRealPath("/imgs/Sunset.jpg");
FileInputStream in = new FileInputStream(path);
Properties prop = new Properties();
prop.load(in);
String url = prop.getProperty("url");

3)当资源文件放在src路径下,上述方法不可行,应该用类加载器读取

类名.class.getClassLoader().getResource("db.properties");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值