初學java web,在使用servlet處理jsp時發現很多送出表單時發生的錯誤都是因為送出路徑出錯造成的。
現以自己為例說明:
項目目錄結構如下:
web.xml檔案主要内容如下:
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>RegisterLoginServlet</servlet-name>
<servlet-class>RegisterLoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterLoginServlet</servlet-name>
<url-pattern>/servlet/RegisterLoginServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
1、在首頁index.jsp或者pages/login.jsp中
使用如下語句:
<form action="servlet/RegisterLoginServlet" method="post">
...
</form>
都可以正常跳轉到目标servlet,連結如下:
2、而如此使用則會報404錯誤(在最前面加了一個 : /):
<form action="/servlet/RegisterLoginServlet" method="post">
...
</form>
浏覽器報錯如下(重點注意連結):
連結中缺失了項目名!
3、再将代碼改為:
<form action="/SDUMap/servlet/RegisterLoginServlet" method="post">
...
</form>
測試通過,與第1次測試相同
出錯原因分析:
/代表根目錄,如果使用/開頭,對于Tomcat而言就是webApp那個目錄,直接找相應的servlet當然找不到,隻要再加上項目名即可。
總結:
JSP頁面送出表單給servlet時有兩種寫法:
(一). 相對路徑: <form action=servlet/RegisterLoginServlet method=post>...</form>
(二). 絕對路徑:
1) <form action="/項目名/servlet/RegisterLoginServlet " method=post>...</form>
其實絕對路徑還有第二種方法:
2) <formaction="<%=request.getContextPath()%>/servlet/RegisterLoginServlet " method=post>...</form>
關于Servlet中轉發和重定向的路徑問題還可參考該文:http://m.blog.csdn.net/article/details?id=51802534