天天看點

Servlet跳轉失敗問題:HTTP Status 404 not found

背景:

1、servlet Java檔案路徑:src/com.Servlet/xx.java

url-pattern路徑:/RegisterServlet

2、jsp頁面路徑:Webcontent/thirdTest/register.jsp

<form action="RegisterServlet" method="post" name="registerForm">
		<table align="center">
			<tr>
				<td colspan="4"><p style="font-size:24px;text-align:center">綠葉網上書店會員資訊注冊</p></td>
			</tr>
			<tr>
				<td rowspan="4"><img alt="logo" src="../img/blueball.jpg" width="150px"></td>
				<td>使用者名:</td>
				<td><input type="text" name="userName" οnblur="checkUserName();" /></td>
				<td><span id="userNameError" class="error">使用者名不能為空!</span></td>
			</tr>
			<tr>
				<td>密碼:</td>
				<td><input type="password" name="password" οnblur="checkPw();" /></td>
				<td><span id="passwordError" class="error">密碼不能為空!</span></td>
			</tr>
			<tr>
				<td>年齡:</td>
				<td><input type="number" name="age" value="0" οnblur="checkAge();" /></td>
				<td><span id="ageError" class="error">請保持年齡在3~149之間!</span></td>
			</tr>
			<tr>
				<td>電郵:</td>
				<td><input type="email" name="email" οnblur="checkEmail();" /></td>
				<td><span id="emailError" class="error">電郵格式錯誤!</span></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" name="submit" value="注冊"></td>
				<td colspan="2"><input type="reset" name="reset" value="取消"></td>
			</tr>
		</table>
	</form>
           
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
 //doGet
 //doPost
 //...
}
           

解決過程:

1、運作Servlet檔案,得到浏覽器的位址欄上的位址:localhost:8080/Javaee/RegisterServlet

2、運作jsp檔案,得到浏覽器位址欄上的位址:localhost:8080/Javaee/thirdTest/register.jsp

3、跳轉失敗的位址(出現404的位址):localhost:8080/Javaee/thirdTest/RegisterServlet

這裡可以注意到,第一個位址和第三個位址不同,這就是導緻了not found問題:本來jsp要跳轉的是第一個位址,但是跳轉到了第三個位址,是以當然找不到servlet了。是以,如果第一和第三個位址是相同的則不會出現not found問題了,這樣看來就找到了解決問題的方法了。

解決方法:

1、修改jsp頁面<form>的action屬性的路徑(此例:設定action="/RegisterServlet")

2、修改servlet檔案的url-pattern 映射位址

3、若使用servlet注解,同理修改映射位址(此例:設定注解@WebServlet("/thirdTest/RegisterServlet"))

三者取一即可。