天天看點

關于jsp表單送出中action所指向Servlet路徑問題的總結

初學java web,在使用servlet處理jsp時發現很多送出表單時發生的錯誤都是因為送出路徑出錯造成的。

現以自己為例說明:

項目目錄結構如下:

關于jsp表單送出中action所指向Servlet路徑問題的總結

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,連結如下:

關于jsp表單送出中action所指向Servlet路徑問題的總結

2、而如此使用則會報404錯誤(在最前面加了一個 :  /):

<form action="/servlet/RegisterLoginServlet" method="post">
...
</form>
           

浏覽器報錯如下(重點注意連結):

關于jsp表單送出中action所指向Servlet路徑問題的總結

連結中缺失了項目名!

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