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中不同部分。

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

Method NameReturn String
getRequestURL()http://localhost/app/resources/request.jsp
getRequestURI()app/resources/request.jsp
getContextPath()app
getServletPath()resources/request.jsp
getPathInfo()request.jsp