在使用servlet處理jsp時發現很多提交表單時發生的錯誤都是因為提交路徑出錯造成的。
就是一直報404,的問題。
web.xml配置如下:
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>Com.Ren.Servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/Servlet/LoginServlet</url-pattern>
</servlet-mapping>
(1)當login.jsp和login.html中form表單配置如下
<form action="Servlet/LoginServlet" method="get">
用戶名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
是可以正常訪問
(2)當login.jsp和login.html中form表單配置如下時(多加了一個/):
<form action="/Servlet/LoginServlet" method="get">
用戶名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
就無法訪問,報404
(3)當login.jsp中form表單配置如下時:
<form action="${pageContext.request.contextPath}/Servlet/LoginServlet" method="get">
用戶名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
或者 login.html中表單為:
<form action="/虛擬目錄/Servlet/LoginServlet" method="get">
用戶名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
或者(前面加一個.)
<form action="./Servlet/LoginServlet" method="get">
用戶名:<input type="text" name="userName" checked>
<input type="submit" value="提交">
</form>
都是可以正常訪問的
總結:
(1) / 代表根目錄(就是tomcat軟件中webapps目錄)
(2) . 代表當前目錄(個人設置的虛擬目錄其實就等於idea中webapp目錄)
補充:
關於重定向和轉發遇到的路徑問題
有一個很好地觀點:https://blog.csdn.net/qq_42744046/article/details/105110803
是說:在用地址的時候,需要判斷是給瀏覽器用還是給服務器用。如果是給瀏覽器用需要加上虛擬地址;如果是給服務器用就不需要加上虛擬地址;
這也很好理解:瀏覽器是訪問別人的資源,地址當然要詳細,“/” 所代表的根目錄是tomcat服務器下的webApps目錄。
而服務器的轉發只是轉發自己內部的資源,所以它的"/"根目錄就是代表虛擬目錄;
簡而言之:就是服務器項目中使用的根目錄“/”就是虛擬目錄;瀏覽器使用的根目錄“/”是tomcat下webapps目錄;
今天練習文件上傳,關於Io流中“/”路徑問題,因為我做的事WEB項目,所以該處的“/”根路徑表示tomcat所安裝目錄的根路徑,此處是D盤;
還是,看路徑的時候,需要想到是誰在用,就能想明白根路徑在哪了;