jsp頁面中有三句java代碼,使用和不使用的區別很大,使用過後會有什麼不同尼?請看下面詳細分析。
這是我寫的一個jsp頁面中一段代碼,分析其中三句java語言。
一、<% String path = request.getContextPath();%>jsp裏面用到意思是:
1. request.getContextPath() 獲得當前的項目根目錄路徑,假設項目名爲library,那麼獲得的地址就是http://localhost:8080/library/;2.聲明一個字符串變量path;
3.將當前項目的根目錄複製給變量path。
request.getContextPath()是在開發web項目時,經常用到的方法,其作用是獲取當前系統路徑。
當使用Tomcat作爲web服務器時,項目一般部署在tomcat下的webapps的目錄下,具體來說有兩種部署路徑:
一是將web項目中的webRoot下的文件直接拷貝到webapps/ROOT下,刪除ROOT下的原文件。
二是在tomcat下的webapps中創建以項目名稱命名的文件夾(或者也可以自行命名),並將webRoot下的文件直接拷貝到該文件夾下。
方法一中request.getContextPath()的返回值爲空,即“”,中間無空格,區分null;
方法二中其返回值爲:/[創建的文件夾的名稱]。
二、<% String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %>在裏面的意思是:
將“項目路徑basePath”放入pageContext中
另外,對於SmartUpload.downloadfile()方法,其文件名參數中的路徑部分是一個相對路徑,並不包含由request.getContextPath()函數讀取的部分,而僅僅包含該路徑下的路徑。
getContextPath效果:
path IS: /jspSmartUpLoad
basePath IS:http://localhost:8080/jspSmartUpLoad/
request.getScheme() IS:http
request.getServerName() IS:localhost
request.getServerPort() IS:8080
三、<%=basePath%>
base標記是一個基鏈接標記,是一個單標記。用以改變文件中所有連結標記的參數內定值。它只能應用於標記<head>與</head>之間。
你網頁上的所有相對路徑在鏈接時都將在前面加上基鏈接指向的地址。
base 元素可規定頁面中所有鏈接的基準 URL
我們可以使用 <base>標籤中的href屬性來設置,所有的“相對基準 URL”。如下代碼段:
<html><head>
<base href="<%=basePath%>">
</head>
<a href="jsp/login.jsp">login</a>
</html>
base只能應用於標記<head></head>之間,後面就可以直接使用相對路徑(即相對於base標籤),如<a href="jsp/login.jsp">login</a>。
這是設置基礎路徑的basepath爲變量
簡單的靜態網頁的話你設置比如:<base href="http://www.baidu.com">,那你下面的href屬性就會以你上面設的爲基準,如:<a href="http://www.baidu.com/xxx.htm"></a>你現在就只需要寫<a href="xxx.htm"></a>
當我們執行上述JSP後,所返回的html代碼如下:
<html><head>
<base href="http://localhost:8080/library/">
</head>
//從這以後開始,設置了<base>後,相對路徑就是相對於base中的路徑,而不再是瀏覽器地址的請求路徑。
<a href="jsp/login.jsp">login</a>
</html>
我們可以看到JSP返回的html代碼中,包含了<base href="http:/localhost:8080/library/">的內容。也就是說在本html代碼中,遇到的所有“相對鏈接”都是相對於base的路徑。
如下圖在開發工具中很好的展示了路徑的變化(我設置的端口號爲80,故沒有顯示端口號):