Java ServletContext詳解


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對象的一些基礎知識,如有錯誤還請各位批評指正,喜歡我的文章可以點贊呀,也可以關注我,我會經常跟新文章


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM