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>