SpringMVC表單提交Action的路徑問題
阿新 • • 發佈:2019-01-30
最近在學習SprigMVC, 今天在做一個登陸Demo時遇到一個路徑問題:
專案名稱:SpringMVC_Test
做了一個登陸頁面,程式碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="<%=basePath%>user/login" method="POST"> <table> <tr> <td>username</td><td><input type="text" name="username"/></td> </tr> <tr> <td>password</td><td><input type="password" name="password"/></td> </tr> <tr> <td><input type="submit" value="提交"/></td> </tr> </table> </form> </body> </html>
這個login.jsp在webcontent/jsp/user下。
action中的路徑,本來應該是要跳轉到controller中login的方法,實現使用者登入,然而我一點選提之後報錯404,
路徑變成了 http://localhost:8080/SpringMVC_Test/jsp/user/user/login,顯然不正確,
一番嘗試過後,我發現把login.jsp這個頁面放在webcontent根目錄下就不會有問題。
為什麼?
本來應該正確跳轉的路徑為http://localhost:8080/SpringMVC_Test/user/login,但此時卻多了/jsp/user,這個/jsp/user顯然是login.jsp在webcontent下的目錄啊!
原來SpringMVC在action的跳轉時,會自動加上你當前頁面的根目錄,結果就導致多了/jsp/user,所以這也解釋了為什麼我把login.jsp放在根目錄下就沒事!
解決辦法:將action改為 action=”http://localhost:8080/SpringMVC_Test/user/login”,或者 action=”<%=basePath%>user/login”,在jsp檔案的開頭加上<%
String path = request.getContextPath();
String basePath = request.getScheme()+”://”+request.getServerName()+”:”+request.getServerPort()+path+”/”;
%>來獲取絕對路徑!