1. 程式人生 > >關於jsp表單提交中action所指向Servlet路徑問題的總結

關於jsp表單提交中action所指向Servlet路徑問題的總結

初學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>