請參考Day05創建module
並在webapp下創建upload資料夾與空檔案userFile.txt
我們在某些情況下會需要知道web部署所在的資料夾目錄,比如我們接收檔案上傳時的存檔路徑,或是需要讀取檔案作為response內容。我們知道在intellij開發的目錄結構與佈署的目錄結構不同,要是我們讀取開發的目錄結構再到佈署環境運行肯定是有問題的,下面我們就來進行測試吧
@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透過servletContext api取得佈署路徑
什麼是contextPath呢,就是我們在佈署時設定的url路徑,在intellij設定的application context應用程式上下文,請參考下圖。我們可以試想你把contextPath寫死在程式當中,但如果今天一旦有所異動就是翻片所有程式進行修改,所以我們會透過servletContext的getContextPath獲取該資訊。
@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());
}
}
在Java Web中有三個重要的Scope Object,它們作用在於共享數據與數據傳遞,後續會有一天專門來談談這個部分。
Scope | class |
---|---|
Web context | jakartax.servlet.ServletContext |
Session | jakartax.servlet.http.HttpSession |
Request | Subtype of jakartax.servlet.ServletRequest |