日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

秒懂servletContext对象

發(fā)布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秒懂servletContext对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

servletContext對象

ServletContext對象,官方稱為servlet上下文;服務(wù)器會為每一個web應(yīng)用創(chuàng)建一個servletContext對象,它具有全局唯一性,web應(yīng)用中的所有servlet都共享這個對象,所以也稱之為全局應(yīng)用程序共享對象;


作用


1.相對路徑轉(zhuǎn)為絕對路徑;
2.獲取容器的附加信息;
3.讀取配置信息;
4.全局容器;

相對路徑轉(zhuǎn)為絕對路徑

servletContext.getRealPath(“path”);
該方法可以將相對路徑轉(zhuǎn)為絕對路徑,在文件的上傳與下載的時候需要用到該方法進行路勁的轉(zhuǎn)換;

案例:通過服務(wù)器下載圖片到本機;

package com.bjsxt.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream;/**** 文件下載* */ public class DownFileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 當前沒有這個方法,但是父類有,調(diào)用父類的方法!在GenericServlet類中 // 獲取servletContext對象ServletContext servletContext = this.getServletContext(); // 路徑轉(zhuǎn)換String realPath = servletContext.getRealPath("image/我妻善逸.jpg");System.out.println(realPath);// 讀文件 // File file = new File("D:\\我妻善逸.jpg");File file = new File(realPath);FileInputStream fis = new FileInputStream(file);byte[] buff = new byte[fis.available()];fis.read(buff); // 在響應(yīng)中添加附加信息 // 正常情況下 // resp.addHeader("Content-Disposition","attachment;filename="+file.getName()); // 圖片為中文名字的時候(本來應(yīng)該用gbk的但是本機為日文系統(tǒng)所以用Shift_JIS)resp.addHeader("Content-Disposition","attachment;filename="+new String(file.getName().getBytes("Shift_JIS"),"iso-8859-1"));OutputStream os = resp.getOutputStream();os.write(buff);os.flush();os.close();} }

Xml配置文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>downFileServlet</servlet-name><servlet-class>com.bjsxt.servlet.DownFileServlet</servlet-class></servlet><servlet-mapping><servlet-name>downFileServlet</servlet-name><url-pattern>/down.do</url-pattern></servlet-mapping> </web-app>

獲取容器的附加信息(基本信息)

1.獲取servlet容器的名稱以及版本號
ServletContext.getBaseInfo();(返回string類型)
2.獲取容器所支持servlet的主版本號;
servletContext.getMajoyVersion();(返回int類型)
3.獲取容器所支持servlet的副版本號;
servletContext.getMinorVersion();(返回int類型)
案例:查看當前servlet容器的版本號、名稱,以及其所支持的servlet的版本號;

package com.bjsxt.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;/*** 獲取容器附加信息** */ public class GetBaseInfoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 設(shè)置響應(yīng)的編碼類型resp.setContentType("text/html;charset=utf-8");// 獲取ServletContext對象ServletContext servletContext = this.getServletContext(); // 獲取servlet容器的名稱和版本號String serverInfo = servletContext.getServerInfo(); // 獲取servlet容器所支持的servlet的主版本號;int majorVersion = servletContext.getMajorVersion(); // 獲取servlet容器所支持的servlet的副版本號;int minorVersion = servletContext.getMinorVersion(); // 輸出(響應(yīng))給客戶端瀏覽器 (利用字符輸出流進行拼接)PrintWriter out = resp.getWriter();out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");out.println("<HTML>");out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");out.println("<BODY>");out.println("servlet容器的名稱以及版本:"+serverInfo+"<br/>");out.println("容器所支持的servlet的版本號:"+majorVersion+"\t"+minorVersion+"<br/>");out.println("</BODY>");out.println("</HTML>");out.flush();out.close();} }

Xml配置文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>getBaseInfoServlet</servlet-name><servlet-class>com.bjsxt.servlet.GetBaseInfoServlet</servlet-class></servlet><servlet-mapping><servlet-name>getBaseInfoServlet</servlet-name><url-pattern>/getBaseInfo.do</url-pattern></servlet-mapping> </web-app>

獲取配置信息

<context-param> <param-name>key</param-name> <param-value>value</param-value> </context-param>

1.獲取xml文件中的context-param標簽的配置信息;
ServeltContext.getInitParameter(“key”);
2.獲取xml文件中所有param-name的值;
ServletContext.getInitParameterNames();(返回一個枚舉類型);
案例:獲取web.xml中context-param標簽下所有param-name的值以及其配置信息;

package com.bjsxt.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumeration;/*** ServletContext對象讀取web.xml文件中的信息;* */ public class ContextReadInfoServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 獲取ServletContext對象ServletContext servletContext = this.getServletContext(); // 獲取所有的param-name的值Enumeration<String> initParameterNames = servletContext.getInitParameterNames();PrintWriter out = resp.getWriter();out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");out.println("<HTML>");out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");out.println("<BODY>");while(initParameterNames.hasMoreElements()){String name = initParameterNames.nextElement();out.println("Name:"+name+"Value:"+servletContext.getInitParameter(name)); // 通過param—name的值獲取其配置信息}out.println("</BODY>");out.println("</HTML>");out.flush();out.close();} }

Xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><context-param><param-name>key1</param-name><param-value>value1</param-value></context-param><context-param><param-name>key2</param-name><param-value>value2</param-value></context-param><servlet><servlet-name>contextReadInfoServlet</servlet-name><servlet-class>com.bjsxt.servlet.ContextReadInfoServlet</servlet-class></servlet><servlet-mapping><servlet-name>contextReadInfoServlet</servlet-name><url-pattern>/context.do</url-pattern></servlet-mapping> </web-app>

全局容器

?可以向ServletContext對象中緩沖一些數(shù)據(jù),緩沖數(shù)據(jù)是,存儲數(shù)據(jù)結(jié)構(gòu)為key:value;

?向ServletContext對象中緩沖數(shù)據(jù)后,其對應(yīng)的web應(yīng)用中的所有servlet都可以通過ServletContext對象獲取該數(shù)據(jù);

1.向ServletContext對象中存儲數(shù)據(jù);
ServletContext.setAttribute(“key”,ObjectValue);
2.從全局容器中獲取數(shù)據(jù);
servletContext.getAttribute(“key”);
3.根據(jù)key從全局容器中刪除數(shù)據(jù);
servletContext.removeAttribute(“key”);
案例:向ServletContext對象中存儲數(shù)據(jù),并在客戶端瀏覽器上響應(yīng);

package com.bjsxt.servlet;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter;/*** 全局容器* */ public class GlobalContainerServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 獲取ServletContext對象ServletContext servletContext = this.getServletContext(); // 向全局容器中存放數(shù)據(jù);servletContext.setAttribute("key1","value1");servletContext.setAttribute("key2","value2");PrintWriter out = resp.getWriter();out.println("<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0 Transitional//EN'>");out.println("<HTML>");out.println("<HEAD><TITLE> ITBZ </TITLE></HEAD>");out.println("<BODY>"); // 從全局容器中獲取信息,獲得的是object類型,需要進行強制類型轉(zhuǎn)換(添加數(shù)據(jù)的時候,加入的是object類型);String value1 = (String)servletContext.getAttribute("key1");String value2 = (String)servletContext.getAttribute("key2");out.println("value1:"+value1+"<br/>");out.println("value2:"+value2+"<br/>");out.println("</BODY>");out.println("</HTML>");out.flush();out.close();} }

Xml文件

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>globalContainerServlet</servlet-name><servlet-class>com.bjsxt.servlet.GlobalContainerServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>globalContainerServlet</servlet-name><url-pattern>/global.do</url-pattern> </servlet-mapping> </web-app>

ServletContext對象的生命周期


Servlet容器啟動,創(chuàng)建ServletContext對象,servlet容器關(guān)閉,ServletContext對象的生命周期結(jié)束;
這樣看來ServletContext對象的生命周期非常長,所以不建議存放一些(經(jīng)常改動的數(shù)據(jù)例如:業(yè)務(wù)數(shù)據(jù));(可以存儲一些幾乎不改動的信息例如:配置信息;)

感謝您的觀看;

總結(jié)

以上是生活随笔為你收集整理的秒懂servletContext对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。