關於jsp表單提交中action所指向Servlet路徑問題的總結
阿新 • • 發佈:2019-02-07
初學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>