Servlet的基本使用2
1、ServletContext基本介紹(系統上下文)
ServletContext,即 servlet 上下文。服務器會為每一個工程創建一個對象,這個對象就是 ServletContext 對象,一個web應用對應一個ServletContext。一個Web服務器可以運行一個或多個WebApp,對于每個WebApp,Web服務器都會為其創建一個全局唯一的ServletContext實例。這個對象全局唯一,而且工程內部的所有servlet都共享這個對象,所以叫全局應用程序共享對象。
1.1、servletContext的作用
servletContext 是一個域對象,它代表整個web應用,可以和程序的容器即服務器進行通信。ServletContext實例最大的作用就是設置和共享全局信息。servletContext 可以用于在不同動態資源(servlet)之間傳遞與共享數據,servletContext 可以共享所有用戶所有請求的數據。該域對象在服務器啟動時即創建,在服務器關閉時才銷毀。
- 獲取文件的 MIME 類型
- 域對象:共享數據
- 獲取文件在服務器文件系統上的絕對文件路徑
- 可以讀取全局配置參數
- 可以搜索當前工程目錄下面的資源文件
- 可以獲取當前工程名字
凡是域對象都有如下3個方法:

2、servletContext的基本使用
獲取 servletContext 對象:
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通過reque對象可以獲取 request.getServletContext(); //直接通過 HttpServlet 獲取也行。跟上面獲取到的是同一個對象 //this.getServletContext(); }
2.1、獲取文件的 MIME 類型(getMimeType())
servletContextObj.getMimeType(str) 方法返回文件的MIME類型。
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext context = this.getServletContext(); //文件名稱 String fileName = "a.jpg"; //獲取MIME類型 String mimeType = context.getMimeType(fileName); }
MIME 類型是根據文件的后綴名來進行判斷的,而且不同文件后綴名對應的 MIME 類型是在服務器內已經配置好的,比如我們可以在 tomcat 的安裝目錄下的 conf/web.xml 文件下看到配置信息,類似:

2.2、共享數據
servletContext 可以在整個服務器內共享數據,并且就算是不同用戶的數據也能夠共享。
存數據:
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //往serlvetContext里面存數據 getServletContext().setAttribute("username", "admin"); }
在另一個servlet里可以獲取數據,就算下面的 servlet 是另一用戶訪問的也可以獲取到數據,因為 servletContext 的對象范圍是所有用戶所有請求的數據。
publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取ServletContext里面的用戶名數據 String username = getServletContext().getAttribute("username"); }
2.3、獲取文件在服務器文件系統上的絕對文件路徑(getRealPath())
比如說應用中有個JSP頁面 index.jsp,調用 getRealPath("index.jsp"),則返回index.jsp文件在服務器文件系統中的絕對路徑。在windows下或許是這樣:D:\xxx\xxx\index.jsp,在linux下或許是這樣:/root/xxx/index.jsp。

運行結果:

比如:
getRealPath("/a.txt") 方法返回的是在 webcontent 目錄下的文件在服務器的絕對路徑;
getRealPath("/WEB-INF/a.txt") 方法返回的是在 webcontent/WEB-INF 目錄下的文件在服務器的絕對路徑;
getRealPath("/WEB-INF/classes/a.txt") 方法返回的是在 src 目錄下的文件在服務器的絕對路徑,因為在 src 下的文件經編譯過后都將存放在項目根目錄下的 WEB-INF/classes 文件夾下。

浙公網安備 33010602011771號