1. 程式人生 > >ServletContext物件--三大域物件

ServletContext物件--三大域物件

Servlet三大域物件的應用 request、session、application(ServletContext)

ServletContext是一個全域性的儲存資訊的空間,伺服器開始就存在,伺服器關閉才釋放。

request,一個使用者可有多個;session,一個使用者一個;而servletContext,所有使用者共用一個。所以,為了節省空間,提高效率,ServletContext中,要放必須的、重要的、所有使用者需要共享的執行緒又是安全的一些資訊。

1.獲取servletcontext物件:

ServletContext sc = null; sc = request.getSession().getServletContext(); //或者使用 //ServletContext sc = this.getServletContext(); System.out.println(“sc=” + sc); 2.方法:

域物件,獲取全域性物件中儲存的資料:

所有使用者共用一個

servletDemo1

複製程式碼 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(“處理前的名稱:” + filename);

    ServletContext sc = this.getServletContext();
    sc.setAttribute("name", "太谷餅");
    
}

複製程式碼 然後再servletDemo2中獲取該servletcontext物件

複製程式碼 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ServletContext sc = request.getSession().getServletContext();
    String a = (String)sc.getAttribute("name");
    response.getWriter().write(a);
}

獲取資原始檔

1.採用ServletContext物件獲取

特徵:必須有web環境,任意檔案,任意路徑。

複製程式碼 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //拿到全域性物件
    ServletContext sc = this.getServletContext();
    //獲取p1.properties檔案的路徑
    String path = sc.getRealPath("/WEB-INF/classes/p1.properties");
    System.out.println("path=" + path);
    //建立一個Properties物件
    Properties pro = new Properties();
    pro.load(new FileReader(path));
    
    System.out.println(pro.get("k"));
}

複製程式碼 2.採用resourceBundle獲取

只能拿取properties檔案,非web環境。

//採用resourceBundle拿取資原始檔,獲取p1資原始檔的內容,專門用來獲取.properties檔案 ResourceBundle rb = ResourceBundle.getBundle(“p1”); System.out.println(rb.getString(“k”)); 3.採用類載入器獲取:

任意檔案,任意路徑。

複製程式碼 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    //通過類載入器
    //1.通過類名 ServletContext.class.getClassLoader()
    //2.通過物件 this.getClass().getClassLoader()
    //3.Class.forName() 獲取  Class.forName("ServletContext").getClassLoader
    InputStream input = this.getClass().getClassLoader().getResourceAsStream("p1.properties");
    //建立Properties物件
    Properties pro = new Properties();
    
    try {
        pro.load(input);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    //拿取檔案資料
    System.out.println("class:" + pro.getProperty("k"));
}

複製程式碼