深入了解Java ServletContext
什么是ServletContext?
根據(jù)字面意思即Servlet上下文

服務(wù)器會(huì)為每一個(gè)工程創(chuàng)建一個(gè)對(duì)象,這個(gè)對(duì)象就是ServletContext對(duì)象,這個(gè)對(duì)象是
全局唯一的,工程內(nèi)部的所有servlet都共享這個(gè)對(duì)象,所有應(yīng)用程序共享對(duì)象

下面用一段簡(jiǎn)單的代碼來證明一下
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對(duì)象的生命周期
誕生:web部署到服務(wù)器上,啟動(dòng)服務(wù)器,此時(shí)上下文環(huán)境對(duì)象創(chuàng)建,只要tomcat服務(wù)器不關(guān)閉,上下文環(huán)境對(duì)象就一直
存在
銷毀:關(guān)閉服務(wù)器或者是從web服務(wù)器上卸載該程序的時(shí)候,該對(duì)象銷毀
怎么創(chuàng)建ServletContext對(duì)象?
方法一:
javax.servlet.ServletContext servletContext = this.getServletContext();
方法二:
javax.servlet.ServletContext servletContext1 = req.getServletContext();
方法三:
javax.servlet.ServletContext servletContext3 = this.getServletConfig().getServletContext();
ServletContext對(duì)象的作用與相關(guān)方法
1.是一個(gè)域?qū)ο?
什么是域:域其實(shí)就是一個(gè)map結(jié)構(gòu),及存入一個(gè)鍵值對(duì),來存儲(chǔ)獲取數(shù)據(jù)
作用范圍:本工程內(nèi)部
域?qū)ο罂梢员槐竟こ虄?nèi)所有的servlet對(duì)象共享,因?yàn)橐粋€(gè)工程只有一個(gè)servletcontext對(duì)象
方法介紹:
存儲(chǔ)數(shù)據(jù): void setAttribute(String var1, Object var2);
移除數(shù)據(jù): void removeAttribute(String var1);
獲取數(shù)據(jù): Object getAttribute(String var1);
1.由于取出的是一個(gè)Object類型,需要強(qiáng)轉(zhuǎn)
2.如果指定的屬性名不存在,則返回null
2.可以獲取文件的真實(shí)路徑
真實(shí)路徑:即部署在服務(wù)器是的路徑
String getRealPath() 獲取文件的真實(shí)路徑
不同目錄下訪問資源的方式不同
//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);
}
}
結(jié)果

3.獲得MIME類型
s什么是MIME類型,是在互聯(lián)網(wǎng)通信過程中定義等等一種文件數(shù)據(jù)類型
格式:大類型/小類型 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);
}
}
結(jié)果

以上就是ServletContext對(duì)象的一些基礎(chǔ)知識(shí),如有錯(cuò)誤還請(qǐng)各位批評(píng)指正,喜歡我的文章可以點(diǎn)贊呀,也可以關(guān)注我,我會(huì)經(jīng)常跟新文章
以上就是深入了解Java ServletContext的詳細(xì)內(nèi)容,更多關(guān)于Java ServletContext的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MyBatis實(shí)現(xiàn)多表聯(lián)查的詳細(xì)代碼
這篇文章主要介紹了MyBatis如何實(shí)現(xiàn)多表聯(lián)查,通過實(shí)例代碼給大家介紹使用映射配置文件實(shí)現(xiàn)多表聯(lián)查,使用注解的方式實(shí)現(xiàn)多表聯(lián)查,需要的朋友可以參考下2022-08-08
java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例
這篇文章主要介紹了java求數(shù)組元素重復(fù)次數(shù)和java字符串比較大小示例,需要的朋友可以參考下2014-04-04
基于String不可變字符與StringBuilder可變字符的效率問題
這篇文章主要介紹了String不可變字符與StringBuilder可變字符的效率問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
java如何判斷一個(gè)數(shù)是否是素?cái)?shù)(質(zhì)數(shù))
這篇文章主要介紹了java如何判斷一個(gè)數(shù)是否是素?cái)?shù)(質(zhì)數(shù)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
使用Hibernate根據(jù)實(shí)體類自動(dòng)生成表的方法
這篇文章主要介紹了使用Hibernate根據(jù)實(shí)體類自動(dòng)生成表的方法,該篇提供了兩種方法,可以根據(jù)需要選擇其一,希望對(duì)你有所幫助,如有不對(duì)的地方還望指正2023-03-03
Mybatis-plus對(duì)單表操作的封裝實(shí)現(xiàn)
本文詳細(xì)介紹了MyBatis-Plus單表操作,包括自定義SQL、邏輯刪除、樂觀鎖、全局?jǐn)r截器和代碼生成器等,具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12
Java通過JsApi方式實(shí)現(xiàn)微信支付
本文講解了Java如何實(shí)現(xiàn)JsApi方式的微信支付,代碼內(nèi)容詳細(xì),文章思路清晰,需要的朋友可以參考下2015-07-07

