1 前言
本文將對近期項目練習中出現的關於文件路徑的問題進行分析和總結,主要涉及html頁面中的href及ajax指向路徑、jsp頁面中href指向路徑及servlet轉發或重定向路徑等內容,本文的分析及總結將盡量做到知其然知其所以然。
注:本文中的項目練習,是通過IDEA的MAVEN插件,部署到TOMCAT完成的。**所有html、jsp頁面都在webapp文件夾下,所有src中的java文件會由maven自動編譯為class文件,放在WEB-INF文件夾下。**
2 html頁面標簽內的路徑寫法
2.1 html頁面之間直接跳轉的路徑寫法
直接在標簽的href中寫指向的html頁面文件名即可
<a href="login.html">登錄</a>
2.2 html頁面內通過ajax跳轉到servlet的路徑寫法
直接在URL屬性處寫servlet的value值(但是最前面不要加/)即可
$.post("registerUserServlet", $(this).serialize(), function (data) {});
如果是指向servlet下的方法,寫value值(但是最前面不要加/)+"/"+方法名即可
$.post("user/register", $(this).serialize(), function (data) {});
2.3 servlet內通過java代碼書寫的html標簽的路徑寫法
直接在標簽的href中寫指向的html頁面文件名即可
<a href="login.html">登錄</a>
3 jsp頁面標簽內的路徑寫法
3.1 jsp頁面之間直接跳轉的路徑寫法
直接在標簽的href中寫指向的html頁面文件名即可
<a class="btn btn-primary" href="add.jsp">添加聯系人</a>
由於jsp頁面中可以獲取絕對路徑,加上絕對路徑也可以
<a class="btn btn-primary" href="${pageContext.request.contextPath}/add.jsp">添加聯系人</a>
若不小心在未添加絕對路徑的情況下,還在文件名前面加了個"/"符號,路徑則會直接指ip+/文件下,比如上面兩種情況的鏈接為http://localhost:8080/finalTest0/add.jsp,寫錯情況下或指向http://localhost:8080/add.jsp,錯誤寫法如下
<a class="btn btn-primary" href="/add.jsp">添加聯系人</a>
3.2 jsp頁面內跳轉到servlet的路徑寫法
直接在標簽的href中寫servlet的value值(但是最前面不要加/)即可
<a
href="FindUserByPageServlet" style="text-decoration:none;font-size:33px">查詢所有用戶信息
</a>
由於jsp頁面中可以獲取絕對路徑,加上絕對路徑也可以
<a
href="${pageContext.request.contextPath}/FindUserByPageServlet" style="text-decoration:none;font-size:33px">查詢所有用戶信息
</a>
4 servlet轉發或重定向的路徑寫法
4.1 關於重定向后和轉發后的問題
重定向后的頁面中,仍然可以使用相對路徑,但是在轉發后的頁面中,相對路徑就會失效。關於重定向后和轉發后的理解,可自行查看其他文章,下面小節內說明的只是重定向時和轉發時的路徑怎么寫。
4.2servlet重定向到html頁面的路徑寫法
需要寫成絕對路徑的形式,會正確指到http://localhost/travel/login.html;不在同一文件夾下,就使用getContextPath來查找路徑,getContextPath獲取的是webapp路徑,再需要什么文件,在后面加就行了
response.sendRedirect(request.getContextPath()+"/login.html");
如果寫成相對路徑,會錯誤指到http://localhost/travel/user/login.html
response.sendRedirect("login.html");
4.3servlet轉發到html頁面的路徑寫法
因為是服務器做轉發動作,所以要在文件名前面加"/"符號
request.getRequestDispatcher("/list.jsp").forward(request,response);
5 關於"/"符號的一些認識
轉發是在服務端完成的事情,是對客戶端的同一個request請求進行傳遞,瀏覽器並不知道(不產生新的請求)。(相當於撥打110,然后110內部給你分配到所屬轄區)
重定向是瀏覽器來做的事情,重定向時,服務器返回一個狀態是302的的response,里面包含了跳轉的地址,由瀏覽器獲得后,自動發送一個新的請求(產生新的請求)。(相當於撥打114查號台,然后根據返回的號碼再次撥打)
————————————————
版權聲明:本文為CSDN博主「擱淺淺淺丶」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhl19920118/article/details/88654078
所以只要是在同一個文件夾下的一些跳轉,路徑前面都不要加"/"符號,或者說重定向和普通的超鏈接索引是在服務器內部的文件間跑來跑去,但如果是轉發,則是站在服務器全局的角度來看待自己的這些文件,所以要在路徑前面加"/"符號