1. 程式人生 > >jsp、servlet、form表單提交過程中的地址(相對和絕對)

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