1. 程式人生 > 程式設計 >深入瞭解Java ServletContext

深入瞭解Java ServletContext

什麼是ServletContext?

根據字面意思即Servlet上下文

深入瞭解Java ServletContext

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

深入瞭解Java ServletContext

下面用一段簡單的程式碼來證明一下

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,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,IOException {
    this.doPost(req,resp);
  }

  @Override
  protected void doPost(HttpServletRequest req,IOException {
    javax.servlet.ServletContext servletContext = this.getServletContext();
    System.out.println("ServletContext2的地址:");
    System.out.println(servletContext);
    RequestDispatcher servletContext2 = req.getRequestDispatcher("ServletContext2");
    servletContext2.forward(req,resp);
  }
}

可以看到二者的地址一模一樣

深入瞭解Java ServletContext

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,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);
  }
}

結果

深入瞭解Java ServletContext

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,IOException {
    javax.servlet.ServletContext servletContext = this.getServletContext();
    String filename="a.jpg";
    String mimeType = servletContext.getMimeType(filename);
    System.out.println(mimeType);
  }
}

結果

深入瞭解Java ServletContext

以上就是ServletContext物件的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以點贊呀,也可以關注我,我會經常跟新文章

以上就是深入瞭解Java ServletContext的詳細內容,更多關於Java ServletContext的資料請關注我們其它相關文章!