016_Servlet上下文
一. Servlet上下文
1. 每個web工程都只有一個ServletContext對象。也就是在同一個web工程里, 所有的servlet獲取到的這個類的對象都是同一個。
2. 獲取上下文對象: ServletContext context = getServletContext();
3. ServletContext 的作用
3.1. 獲取全局配置參數;
3.2. 獲取web工程中的資源;
3.3. 存取數據, servlet間共享數據。
4. ServletContext何時創建: 服務器啟動的時候, 會為托管的每一個web應用程序, 創建一個ServletContext對象。
5. ServletContext何時銷毀: 從服務器移除托管或者是關閉服務器。
6. ServletContext 的作用范圍: 只要在這個項目里面, 都可以取。
二. ServletContext 獲取全局配置參數
1. 新建一個UseServletContext的Web工程
2. 在下WebContent新建一個index.html
3. 編寫index.html
<!DOCTYPE html> <html><head><meta charset="UTF-8" /><title>servlet上下文</title></head><body><a href="GetContextParam.action">獲取全局配置參數</a><br/></body> </html>4. 新建一個GetContextParam.java類
5. 編輯GetContextParam.java
package com.lywgames.myservlet;import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetContextParam extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();// 獲取全局配置參數String address = servletContext.getInitParameter("address");System.out.println("address = " + address);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }6. 編輯web.xml
7. 部署運行
8. 點擊”獲取全局配置參數”超鏈接, 控制臺打印
三. ServletContext 獲取資源
1. 在WebContent目錄下, 新建一個file目錄, 放入config.properties文件, 文件內容如下圖:
2. servletContext.getRealPath("/"): 工程(項目)在tomcat里面的根目錄。
C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\
3. 新建一個GetResources.java類
4. 編輯GetResources.java, 使用getRealPath獲取資源
package com.lywgames.myservlet;import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetResources extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目錄。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 獲取給定的文件在服務器上面的絕對路徑String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }5. 編寫web.xml
6. 編輯index.html
7. 部署運行項目
8. 點擊”獲取資源”超鏈接, 控制臺打印
9. 使用servletContext.getResourceAsStream(“資源文件路徑”)獲取資源文件輸入流, 資源文件路徑之前的路徑是工程在tomcat里面的根目錄。資源文件路徑必須存在, 否則返回null。繼續編輯我們的GetResources.java
package com.lywgames.myservlet;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetResources extends HttpServlet {private static final long serialVersionUID = 1L;public void getRealPath() throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目錄。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 獲取給定的文件在服務器上面的絕對路徑String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();// servletContext.getResourceAsStream使用工程在tomcat里面的根目錄。InputStream is = servletContext.getResourceAsStream("file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }10. 類路徑相對的是classes目錄
11. 使用類路徑獲取資源, 繼續編輯我們的GetResources.java
package com.lywgames.myservlet;import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GetResources extends HttpServlet {private static final long serialVersionUID = 1L;public void getRealPath() throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();/* servletContext.getRealPath("/"): 工程在tomcat里面的根目錄。* C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\*/// 獲取給定的文件在服務器上面的絕對路徑String realPath = servletContext.getRealPath("file/config.properties");Properties properties = new Properties();properties.load(new FileInputStream(realPath));System.out.println("name = " + properties.getProperty("name"));}public void getResourceAsStream() throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();// servletContext.getResourceAsStream使用工程在tomcat里面的根目錄。InputStream is = servletContext.getResourceAsStream("file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 類路徑相對于classes路徑:C:\Users\lywgames\Desktop\software\apache-tomcat-7.0.52\wtpwebapps\UseServletContext\WEB-INF\classesInputStream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");Properties properties = new Properties();properties.load(is);System.out.println("name = " + properties.getProperty("name"));}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }四. ServletContext存取數據, servlet間共享數據
1. 新建CunQuData.java和OutLoginCount.java
2. 編輯CunQuData.java
package com.lywgames.myservlet;import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class CunQuData extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();Object loginCount = servletContext.getAttribute("loginCount");if(loginCount != null){servletContext.setAttribute("loginCount", (((int)loginCount) + 1));}else{servletContext.setAttribute("loginCount", 1);}resp.sendRedirect("OutLoginCount.action");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }3. 編輯OutLoginCount.java
package com.lywgames.myservlet;import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class OutLoginCount extends HttpServlet {private static final long serialVersionUID = 1L;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 獲取ServletContext對象ServletContext servletContext = getServletContext();int loginCount = (int)servletContext.getAttribute("loginCount");StringBuilder sb = new StringBuilder();sb.append("<!DOCTYPE html>").append("\r\n");sb.append("<html>").append("\r\n");sb.append("<head>").append("\r\n");// 網頁編碼UTF-8sb.append("<meta charset='UTF-8' />").append("\r\n");sb.append("<title>登錄次數</title>").append("\r\n");sb.append("</head>").append("\r\n");sb.append("<body>").append("\r\n");sb.append("<h1>登錄次數:").append(loginCount).append("</h1>").append("\r\n");sb.append("</body>").append("\r\n");sb.append("</html>");// 相應客戶端的內容類型是text/html 編碼是UTF-8(包含字符編碼和網頁編碼)resp.setContentType("text/html;charset=UTF-8");// 字符流響應客戶端resp.getWriter().println(sb.toString());}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }4. 編輯index.html
5. 編輯web.xml
6. 部署運行項目
7. 多點擊幾次登錄, 顯示登錄次數
總結
以上是生活随笔為你收集整理的016_Servlet上下文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 015_请求转发和重定向
- 下一篇: 017_Cookie