Servlet與JSP是Java早期的網頁技術,由於許多方便的新技術、新框架崛起,現在通常不會直接使用Servlet。但其實Servlet還是留在Java中,就算是使用Spring MVC等框架,依然會見到一些蹤跡。此處介紹透過HttpServletRequest獲取當前網址的結構。

基本結構

使用HttpServletRequest可以獲得幾個參數,分別是Request URI、Context Path、Servlet Path、Path Info。基本架構如下。

requestURI = contextPath + servletPath + pathInfo

contextPath 是環境路徑(Context path),是容器用來決定該挑選哪個 Web 應用程式的依據(因為一個容器上可以部署很多個不同的Web應用程式用於不同情況)。在Tomcat等Servlet容器裡面名為ROOT的Web App不會有Context Path。
servletPath 的部份是指 Servlet 路徑(Servlet path),不包括路徑資訊(Path info)與請求參數(Request parameter)。
pathInfo 就是serlvet的url的路徑,不包括contextPath 或者servletPath。

常用的Method

HttpServletRequest提供許多方法,可以獲取URL中不同部分。

假設有一個網址為:https://klab.tw/app/resources/request.jsp,那麼透過HttpServletRequest的各種方法(Method)可以獲得的字串如下。

Method NameReturn String
getRequestURL()https://klab.tw/app/resources/request.jsp
getRequestURI()app/resources/request.jsp
getContextPath()app
getServletPath()resources/request.jsp
getPathInfo()request.jsp

Java EE與Jakarta EE

因為2017年9月甲骨文公司宣布將Java EE宣給Eclipse基金會,但Java的商標權在甲骨文公司,因此Eclipse接手後將之改名為Jakarta,以後import javax.servlet也變成import jakarta.servlet了。(從印尼爪哇島跑到印尼雅加達😂)

Jakarta Servlet API v6.0.0

甲骨文開源Java EE,花落Eclipse基金會

Eclipse基金會釋出Java EE更名後第一個真正開放且中立的Jakarta EE 8