ServletContext
Servlet引擎为每个Web应用程序都创建一个对应的ServletContext对象, ServletContext对象被包含在ServletConfig对象中, 调用ServletConfig.getServletContext方法可以返回ServletContext对象的引用.
由于一个WEB应用程序中的所有Servlet都共享同一个ServletCOntext对象, 所以ServletContext对象被称之为application对象(Web应用程序对象).
功能:
1> 获取WEB应用程序的初始化参数
2> 记录日志
3> application域范围的属性
4> 访问资源文件
5> 或许虚拟路径所映射的本地路径
6> WEB应用程序之间的访问
7> ServletContext的其他方法
配置方式
<context-param>
<param-name></param-name>
<param-value></param-value>
</context-param>
获得参数方法
获得servletcontext对象
ServletContext servletContext = servletConfig.getServletContext();
通过key获得value
servletContext.getInitParameter("")
获得keys
获取当前web应用的某一个文件的真实路径(绝对路径)--是获取的服务器上的物理路径
getRealPath();
获得当前web应用的名称
getContextPath
获得当前web应用的某一个文件对应的输入流
getResourceAsStream(String path) path的/为当前web应用的根目录
1> 需要处理异常
ClassLoader classLoader = getClass().getClassLoader();
InputStream is = classLoader.getResourceAsStream("文件");
2> 需要抛出异常
InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/文件");
实现实例
新建动态web工程-> 新建包 com.xiaoan.test->新建类TestContext
注意代码中红色部分, 为需要创建文件的时间节点
1 package com.xiaoan.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Enumeration; 6 7 import javax.servlet.Servlet; 8 import javax.servlet.ServletConfig; 9 import javax.servlet.ServletContext; 10 import javax.servlet.ServletException; 11 import javax.servlet.ServletRequest; 12 import javax.servlet.ServletResponse; 13 14 public class TestContext implements Servlet{ 15 16 @Override 17 public void destroy() { 18 // TODO Auto-generated method stub 19 20 } 21 22 @Override 23 public ServletConfig getServletConfig() { 24 // TODO Auto-generated method stub 25 return null; 26 } 27 28 @Override 29 public String getServletInfo() { 30 // TODO Auto-generated method stub 31 return null; 32 } 33 34 @Override 35 public void init(ServletConfig arg0) throws ServletException { 36 ServletContext servletContext = arg0.getServletContext(); 37 //通过key获得value 38 String username = servletContext.getInitParameter("username"); 39 System.out.println("username: " + username); 40 41 //获得参数key列表 42 Enumeration<String> keys = servletContext.getInitParameterNames(); 43 while(keys.hasMoreElements()){ 44 String key = keys.nextElement(); 45 String val = servletContext.getInitParameter(key); 46 System.out.println("key: " + key + ", val: " + val); 47 } 48 //在WebContent下新建 test.txt文件 49 //获取当前web应用的某一个文件的真实路径(绝对路径)--是获取的服务器上的物理路径 50 String filePath1 = servletContext.getRealPath("/test.txt"); 51 System.out.println(filePath1); 52 53 //获得当前web应用的名称 54 String webName = servletContext.getContextPath(); 55 System.out.println("当前应用名为: " + webName); 56
//在src下(与包同级)创建testStream.txt文件, 作为流输入文件 57 //获得当前web应用的某一个文件对应的输入流 58 //第一种 59 try { 60 ClassLoader classLoader = servletContext.getClassLoader(); 61 InputStream is = classLoader.getResourceAsStream("/testStream.txt"); 62 System.out.println(is); 63 } catch (Exception e) { 64 // TODO Auto-generated catch block 65 e.printStackTrace(); 66 } 67 //第二种 68 try { 69 InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/testStream.txt"); 70 System.out.println(is2); 71 } catch (Exception e) { 72 // TODO Auto-generated catch block 73 e.printStackTrace(); 74 } 75 } 76 77 @Override 78 public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { 79 // TODO Auto-generated method stub 80 81 } 82 83 }
web.xml文件配置
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>testcontent</display-name> 4 5 <context-param> 6 <param-name>username</param-name> 7 <param-value>xiaoan</param-value> 8 </context-param> 9 10 <context-param> 11 <param-name>password</param-name> 12 <param-value>123456</param-value> 13 </context-param> 14 15 16 <servlet> 17 <servlet-name>tc</servlet-name> 18 <servlet-class>com.xiaoan.test.TestContext</servlet-class> 19 </servlet> 20 <servlet-mapping> 21 <servlet-name>tc</servlet-name> 22 <url-pattern>/</url-pattern> 23 </servlet-mapping> 24 </web-app>