看到博客園孤傲蒼狼的web系列文章中有關於URL路徑的使用文章后,感覺自己對URL的使用清楚了很多,自己再對着動手寫一遍以加深記憶。
JavaWeb開發中常看到URL以“/”開頭,但對於服務器端和瀏覽器端分別指不同的起點路徑。
如果“/”是給服務器用,則代表當前的web工程,自己理解就是指web目錄,如果“/”是給瀏覽器用,則代表webapps目錄。
一,“/”代表當前web工程的常見應用場景
1.ServletContext.getRealPath(String path)獲取資源的絕對路徑
如:this.getServletContext().getRealPath("/img/1.JPG)獲取1.JPG的絕對路徑中,img前面的“/”就是web工程。
2.在服務前端的forward轉發中
如:this.getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
客戶端請求某個web資源,服務器跳轉到另外一個web資源,這個forward也是給服務器用的,此時"/index.jsp"前面的“/”就是web工程,即web目錄。
3.使用include指令或者<jsp:include>標簽引入頁面
如<jsp:include page="/jsp/demo.jsp"/>
二.“/”代表webapps目錄的常見應用場景
1.使用sendRedirect實現請求重定向
如response.sendRedirect("/JavaWeb_Learning_Project/index.jsp");
服務器發送一個URL地址給瀏覽器,瀏覽器拿到URL地址后再次請求服務器,所以“/”是給瀏覽器使用,此時URL等價於“webapps\JavaWeb_Learning_Project\index.jsp”.
此外項目中通常用另一種更靈活的寫法代替上面的寫法,這樣在項目名稱改變時依然有效:
response.sendRedirect(request.getContextPath()+"/index.jsp");
此時request.getContextPath()獲取到的內容就是"/JavaWeb_Learning_Project”;
2.使用超鏈接跳轉,提交表單或html部分標簽中的src屬性
如:<a href="/JavaWeb_Learning_Project/index.jsp>首頁</a>,
<form action="${pageContext.request.contextPath}/demo5></form>,
<img alt="驗證碼看不清,換一張" src="${pageContext.request.contextPath}/demo4" id="validateCodeImg" onclick="changeImg()" >
訪問web資源時,絕對路徑的寫法推薦使用img標簽中src屬性的寫法改進,即:
<a href="${pageContext.request.contextPath}/index.jsp>首頁</a>
3.js腳本和css樣式文件的引用