javaweb各種路徑的總結
以/開始表示相對於當前應用下的絕對路徑。
加不加應用名?給瀏覽器用的 要加 :給 tomcat內部用的 不加。
1.1 表單:
1.1.1 表單地址的寫法
Form action:
1. 全地址:
寫法1:
http://localhost/Day11ServletRequest/servlet/RegisterServlet
2. 寫相對路徑
寫法2:相對於當前的頁面的相對位置去寫
/jsp/xxx/login.jsp
/jps/pages/login.html
當相對位置發生變化的時候,會有問題。
寫法3:以/+當前的專案名為開始,寫相對於當前專案的根路徑的位置
缺點:應用名被寫死。
使用哪種寫法比較好?寫法3.
改進寫法:
<form action="${pageContext.request.contextPath }
增加寫法4: 該頁面有設定basepath的情況。
相對於這個路徑寫
跟當前頁面的路徑沒關係。
A href
Link
瀏覽器發出的請求 以/開始加應用名。
1.1.2 表單思考題
/servlet/serletA
servlet考慮如下url的寫法:
上面這個如果去掉反斜槓
變成相對路徑,則相當於在當前的servlet路徑的基礎上增加,最後變成如下:
當然是不對的。
還可以這麼寫
自帶表示跟的 /
The path starts with a "/" character but does not end with a "/" character
1.2 轉發跟包含
//以'/'開頭,表示 以當前的WebRoot為起點。
//不以/開頭,直接寫路徑 表示相對當前的路徑
1.2.0.1 相對路徑
1.2.0.2 以/開始的絕對路徑
RequestDispatcher dispater= request.getRequestDispatcher("/servlet/ServletB");
Tomcat容器的web應用內部。不用寫應用名。當前就在應用內部。
所以不寫應用名
1.2.0.3 轉發包含標籤
同轉發給包含的程式碼里路徑
根目錄01.jsp
<jsp:forward page="/servletB"></jsp:forward>
根目錄/servletB
1.3 Refresh的url
給瀏覽器用的,以/開始,需要寫應用名。
ServletA頁面。
response.setHeader("refresh","2;url='/Day12_ServletResponse/01.html'");
response.setHeader("refresh","2;url=01.html");
http://localhost/app/ServletA
http://localhost/app/servlet/01.html
這個路徑:
給瀏覽器看 寫相對於專案的絕對路徑。
也可以寫相對路徑。但要知道相對於誰。
//response.setHeader("refresh", "2;url='/Day12_ServletResponse/01.html'");
寫完整路徑也可以。
1.4 重定向
也可以寫相對路徑,但是需要知道相對於誰。
1.5 Context getRealpath
Context.getRealpath(“/mm/jpg”)
已經定義到當前的WEB-ROOT下,所以 該路徑寫相對於WEB-ROOT的相對路徑
String realPath = getServletContext().getRealPath("WEB-INF/mm.jpg");
注意:前面加斜槓也可以。
getServletContext().getRealPath("/WEB-INF/mm.jpg");
這裡如果不知道,不確定打印出來即可!!!