今天我们接着来讲Servlet,昨天我们主要讲了Servlet的简介和他的一些细节,今天我们主要说说他的对象以及对象的应用,ServletConfig对象和ServletContext对象。
ServletConfig对象:
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
ServletContext对象:
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
servletContext对象的获取:
<1> ServletContext对象被包含在ServletConfig对象中 所以可以通过ServletConfig 对象调用ServletConfig.getServletContext()获得对ServletContext对象的引用。
<2>在继承了HttpServlet对象的类中 可以通过this.getServletContext来获取。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
读取资源文件有三种方式,我们一般不用第三种,所以我们现在就说前两种
// 第一种方式读取外部的资源文件
InputStream is = context
.getResourceAsStream("/WEB-INF/classes/res/0266-10583g.jpg");
// response.getWriter().write(realPath);
response.setHeader("Content-Type", "image/jpeg"); OutputStream os =
response.getOutputStream(); byte buffer[] = new byte[1024]; int len =
0; while ((len = is.read(buffer)) != -1) { os.write(buffer, 0, len);
}
os.close(); is.close();
//第二种方式
String path = context.getRealPath("WEB-INF/classes/db.properties");
File file = new File(path);
InputStream is = new FileInputStream(file);
//解析properties的文件
Properties prop = new Properties();
prop.load(is);
Set<String> set = prop.stringPropertyNames();
//遍历Set集合
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.next();
String value = prop.getProperty(key);
System.out.println(key+"....."+value);
}
response.getWriter().print("ha");