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");