1. 程式人生 > >SpringMVC表單提交Action的路徑問題

SpringMVC表單提交Action的路徑問題

最近在學習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+”/”;
%>來獲取絕對路徑!