jsp、servlet、form表單提交過程中的地址(相對和絕對)
今天終於理解這個地址的問題,對於jsp頁面或者是servlet中的相對地址和絕對地址,這裡我需要說的幾點:
首先對於相對地址來說:
Jsp頁面
我現在有一個專案,名稱是shengsiyuan,然後webroot下面有一個資料夾session,session下面有兩個jsp頁面,一個是index.jsp,還有一個是login.jsp,在index.jsp中需要跳轉到這個login.jsp中,這個時候可以使用請求轉發或者是重定向,如果是請求轉發,那麼這個相對地址就會定位到我訪問的這個index.jsp(http://localhost:8080/shengsiyuan/session/index.jsp)的根目錄localhost:8080/shengsiyuan/session,這個時候我只需要
Request.getRequestDispatcher(“index.jsp”).forward(request,response);//相對地址
如果是重定向,那麼這個相對地址也會定位到我當前訪問這index.jsp(http://localhost:8080/shengsiyuan/session/index.jsp)的根目錄localhost:8080/shengsiyuan/session,這個時候我只需要Response.sentRedirect(“index.jsp”);//相對地址
對於Servlet
還是上面的那麼專案,有一個servlet叫UserLoginServlet.java,我新建的這個servlet的時候訪問目錄是/UerLoginServlet,如下圖
這個時候如果我訪問這個UserLoginServlet.java我只需要在位址列寫上
http://localhost:8080/shengsiyuan/UserLoginServlet,就可以訪問這個servlet,現在需要在這個servlet中進行請求轉發或者重定向,並且使用的是相對路徑,如果是請求轉發,那麼和上面一樣,他會定位到我當前訪問的這個servlet(http://localhost:8080/shengsiyuan/UserLoginServlet)的根目錄localhost:8080/shengsiyuan/,這個時候我只需要:
request.getRequestDispatcher(“session/index.jsp”).forward(request,response);
如果是重定向,那麼也是會定位到我當前訪問的這個servlet(http://localhost:8080/shengsiyuan/UserLoginServlet)的根目錄localhost:8080/shengsiyuan/,這個時候我只需要:
Response.sendRedirect(“session/login.jsp”);
絕對地址,這個就比較和上面的不一樣,請求轉發和重定向是不一樣的。在這裡我們這裡只講jsp頁面中,然後如果是在servlet,原理是一樣的,就看怎麼定位到哪個根。
Jsp頁面的絕對地址:
還是上面的這個index.jsp,和login.jsp,這個時候如果是從index.jsp請求轉發到login.jsp,這個時候定位就不是從index.jsp的這個根目錄來定位,而是定位到localhost:8080/shengsiyuan 所以這個時候你就需要
Request.getRequestDispatcher(“/session/login.jsp”).forward(request,response);//絕對路徑的請求轉發
如果是重定向,這個時候也不是從index.jsp這個根目錄來定位,衛視定位到整個專案的根目錄localhost:8080,所以這個時候你需要
Response.sendRedirect(/shengsiyuan/session/login.jsp);//絕對路徑的重定向
form表單,action裡面的路徑來說,相對路徑和絕對路徑也是不一樣的,如果寫的是相對路徑來說,我還是那上面的那個例子來說。在login.jsp中有一個form表單,那麼在這個jsp頁面沒有basePath那麼這個時候就會直接會定位到login.jsp的根目錄localhost:8080/shengsiyuan/session,所以這個時候要求需要action的地址相對路徑是以session開始的,比如我的servlet為
,這個時候提交後他就會在形成localhost:8080/shengsiyuan/session/UserLoginServlet,顯然這樣是訪問不到這個servlet的,所以這個時候可以動點小腦筋(不可取),這個時候你可以吧web.xml裡面訪問這個Servlet的路徑改了,本來是/UserLoginServlet,改成/session/UserLoginServlet,這個時候就能訪問到這個jsp頁面,不過這種方法不可取,會讓別人很難看懂,還有一種辦法,這個不是相當於你要跳出這個session,然後在後面加上UserLoginServlet,這樣一來過程就是,先返回上一層,是的定位到的根為8080/shengsiyuan/,然後再加上這個UserLoginServlet,這就需要:
action=””../UserLoginServlet”,其中../表示返回到上一層中,然後在加上UserLoginServlet
如果有這個basePath,那麼這個時候form表單提交就會定位到localhost:8080/shengsiyuan/,這樣提交後就會形成localhost:8080/shengsiyuan/UserLoginServlet這樣就能成功訪問到,如果是絕對地址這個時候就會定位到localhost:8080所以這個時候你的絕對地址action就需要:
action=””/shengsiyuan/UserLoginServlet.這樣就會形成:
localhost:8080”/shengsiyuan/UserLoginServlet