什么是ServletContext?
根據字面意思即Servlet上下文
服務器會為每一個工程創建一個對象,這個對象就是ServletContext對象,這個對象是
全局唯一的,工程內部的所有servlet都共享這個對象,所有應用程序共享對象
下面用一段簡單的代碼來證明一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet ( "/ServletContext2" ) public class ServletContext2 extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext servletContext = this .getServletContext(); System.out.println( "ServletContext2的地址:" ); System.out.println(servletContext); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this .doGet(req, resp); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet ( "/ServletContext" ) public class ServletContext extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this .doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { javax.servlet.ServletContext servletContext = this .getServletContext(); System.out.println( "ServletContext2的地址:" ); System.out.println(servletContext); RequestDispatcher servletContext2 = req.getRequestDispatcher( "ServletContext2" ); servletContext2.forward(req,resp); } } |
可以看到二者的地址一模一樣
ServletContext對象的生命周期
誕生:web部署到服務器上,啟動服務器,此時上下文環境對象創建,只要tomcat服務器不關閉,上下文環境對象就一直
存在
銷毀:關閉服務器或者是從web服務器上卸載該程序的時候,該對象銷毀
怎么創建ServletContext對象?
方法一:
javax.servlet.ServletContext servletContext = this.getServletContext();
方法二:
javax.servlet.ServletContext servletContext1 = req.getServletContext();
方法三:
javax.servlet.ServletContext servletContext3 = this.getServletConfig().getServletContext();
ServletContext對象的作用與相關方法
1.是一個域對象*
什么是域:域其實就是一個map結構,及存入一個鍵值對,來存儲獲取數據
作用范圍:本工程內部
域對象可以被本工程內所有的servlet對象共享,因為一個工程只有一個servletcontext對象
方法介紹:
存儲數據: void setAttribute(String var1, Object var2);
移除數據: void removeAttribute(String var1);
獲取數據: Object getAttribute(String var1);
1.由于取出的是一個Object類型,需要強轉
2.如果指定的屬性名不存在,則返回null
2.可以獲取文件的真實路徑
真實路徑:即部署在服務器是的路徑
String getRealPath() 獲取文件的真實路徑
不同目錄下訪問資源的方式不同
1
2
3
4
5
6
7
8
9
|
//src下的資源訪問 String realPath = servletContext.getRealPath( "/WEB-INF/classes/a.text" ); System.out.println(realPath); //WEB-INF下的資源訪問 String realPath1 = servletContext.getRealPath( "/WEB-INF/b.text" ); System.out.println(realPath1); //web目錄下的資源訪問 String realPath2 = servletContext.getRealPath( "/c.text" ); System.out.println(realPath2); |
代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet ( "/ServletContext" ) public class ServletContext extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this .doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { javax.servlet.ServletContext servletContext = this .getServletContext(); //src下的資源訪問 String realPath = servletContext.getRealPath( "/WEB-INF/classes/a.text" ); System.out.println(realPath); //WEB-INF下的資源訪問 String realPath1 = servletContext.getRealPath( "/WEB-INF/b.text" ); System.out.println(realPath1); //web目錄下的資源訪問 String realPath2 = servletContext.getRealPath( "/c.text" ); System.out.println(realPath2); } } |
結果
3.獲得MIME類型
s什么是MIME類型,是在互聯網通信過程中定義等等一種文件數據類型
格式:大類型/小類型 image/jpeg
獲取: String getMimeType(String file)
代碼如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet ( "/ServletContext" ) public class ServletContext extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this .doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { javax.servlet.ServletContext servletContext = this .getServletContext(); String filename= "a.jpg" ; String mimeType = servletContext.getMimeType(filename); System.out.println(mimeType); } } |
結果
以上就是ServletContext對象的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以點贊呀,也可以關注我,我會經常跟新文章
以上就是深入了解Java ServletContext的詳細內容,更多關于Java ServletContext的資料請關注服務器之家其它相關文章!
原文鏈接:https://www.cnblogs.com/pjhaymy/p/13424324.html