iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Software Development

從Servlet到Spring MVC系列 第 10

Day09 Servlet - ServletContext API

  • 分享至 

  • xImage
  •  

0、創建module

請參考Day05創建module
並在webapp下創建upload資料夾與空檔案userFile.txt
https://ithelp.ithome.com.tw/upload/images/20240924/20128084WULbofJNRh.png

一、servletContext.getRealPath

我們在某些情況下會需要知道web部署所在的資料夾目錄,比如我們接收檔案上傳時的存檔路徑,或是需要讀取檔案作為response內容。我們知道在intellij開發的目錄結構與佈署的目錄結構不同,要是我們讀取開發的目錄結構再到佈署環境運行肯定是有問題的,下面我們就來進行測試吧

創建PathTestServlet

@WebServlet(urlPatterns = "/TestPath")
public class PathTestServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        //開發路徑檔案的絕對路徑
        //String path = "H:\\workspace_idea\\ironman-2024\\day09\\target\\day09\\upload\\usrFile.txt\"";
        //透過Servlet api取得佈署路徑
        String path = getServletContext().getRealPath("upload");
        res.setContentType("text/plain;charset=utf-8");
        File file = new File(path);
        res.getWriter().println("讀取userFile是否存在:"+file.exists());

    }
}

Demo

demo使用絕對路徑的方式
https://ithelp.ithome.com.tw/upload/images/20240924/20128084INImYkoob8.png
demo透過servletContext api取得佈署路徑
https://ithelp.ithome.com.tw/upload/images/20240924/201280846wzh6HVgNd.png

二、servletContext.getContextPath

什麼是contextPath呢,就是我們在佈署時設定的url路徑,在intellij設定的application context應用程式上下文,請參考下圖。我們可以試想你把contextPath寫死在程式當中,但如果今天一旦有所異動就是翻片所有程式進行修改,所以我們會透過servletContext的getContextPath獲取該資訊。
https://ithelp.ithome.com.tw/upload/images/20240924/20128084QQLc7Hv4bo.png

@WebServlet(urlPatterns = "/TestPath")
public class PathTestServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
        //略

        //獲取Appllication context 路徑
        res.getWriter().println("Appllication context Path:"+getServletContext().getContextPath());

    }
}

Demo get application context

https://ithelp.ithome.com.tw/upload/images/20240924/20128084cqvviRDHap.png

三、Scope Object

在Java Web中有三個重要的Scope Object,它們作用在於共享數據與數據傳遞,後續會有一天專門來談談這個部分。

Scope class
Web context jakartax.servlet.ServletContext
Session jakartax.servlet.http.HttpSession
Request Subtype of jakartax.servlet.ServletRequest

Reference


上一篇
Day08 Servlet - ServletConfig and ServletContext
下一篇
Day10 Servlet - HttpServletRequest and HttpServletResponse
系列文
從Servlet到Spring MVC36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言