Java ServletContext詳解
什么是ServletContext?
根據字面意思即Servlet背景關系

服務器會為每一個工程創建一個物件,這個物件就是ServletContext物件,這個物件是
全域唯一的,工程內部的所有servlet都共享這個物件,所有應用程式共享物件

下面用一段簡單的代碼來證明一下
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);
}
}
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() 獲取檔案的真實路徑
不同目錄下訪問資源的方式不同
//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);
代碼
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)
代碼如下
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物件的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以點贊呀,也可以關注我,我會經常跟新文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114404.html
標籤:Java
