標籤:style http color io os 使用 java ar 檔案
Struts2中路徑問題是一個棘手的問題,初學時經常被路徑問題搞得很煩,通過網上尋找資料和自己實戰中遇到的問題今天來對Struts2中的路徑問題來一個總結,當然可能不會很完整,不過後續會進行補充:
1. Struts2 一個要匹配路徑的地方就是在處理完請求之後對頁面進行分發的時候,也就是 result 元素裡面的內容。
假設項目名為Struts2
在地址欄中訪問action時URL基本是以 http://localhost:8080/Struts 開頭
比如<action name="home" class="test.HomeAction" namespace="/">
< result name="success">要訪問的jsp頁面/result>
</action>
這裡有兩種方式來寫要訪問的jsp頁面,一種加“/”,另一種是不加“/”。
1)jsp頁面寫成/Pages/path.jsp,那麼就會從項目的根路徑中開始找也就是,也就是Struts所在的根目錄,在一層一層的下去找。
2)jsp頁面寫成Pages/path.jsp,那麼就會從當前路徑開始找(注意當前路徑是指當前訪問者請求的目錄),在這個例子中的我們是通過請求action,進而間接訪問到jsp檔案的,所以當前路徑應該就是action所在的路徑,在本例中也就是http://localhost:8080/Struts,從這裡可以看到當前路徑就是根路徑,所以兩種方式都可以訪問到jsp頁面,如果當前路徑不是根路徑那麼情況就不同了。
總結:為了不出錯,建議加上“/”。
2. 在頁面中涉及到匹配路徑的問題,在這裡我們要弄清楚一個小知識點:在jsp頁面中“/”指的是整個網站根路徑也就是這裡的“http://localhost:8080/”,而不是webapps所在的根路徑。
在頁面中涉及到的路徑問題,看似很複雜,但是解決起來很簡單。就是統一用絕對路徑,
在jsp檔案中可以這樣寫來統一路徑:
<%
String contextPath=request.getContextPath();
String basePath=requset.getScheme()+"://"+requset.getServerName()+":"+
request.getServerPort()+path+"/";
%>
在<head></head>中寫成這樣
<base herf="<%=basePath>">
這說明在該頁面中的所有路徑都是於項目的WebRoot為相對路徑,如項目的WebRoot下的Images/xxx.jpg ,在頁面中就直接這樣訪問。
在頁面中的路徑問題看似很複雜,但是解決起來相當的簡單。
注意:路徑最後有“/”。
比如
在地址欄中輸入http://localhost:8080/Struts2/path/path.action訪問到了my.jsp
在my.jsp的頁面中有這樣的一個連結:< a href="index.jsp">並且兩者在同一個目錄下,按道理說直接點就可以訪問的,但是事實上訪問不到,地址欄中變成
http://localhost:8080/Struts2/path/index.jsp,為什麼為變成這樣呢?因為:在my.jsp頁面裡它不會去看jsp的真正路徑在哪裡,它只會去看這個jsp映射到我們的伺服器的URL地址。
所以訪問就不成功。
總之,用了struts2來實現跳轉的話想對的就是地址欄中action的訪問地址,是以這個地址為標準的。這裡強調一下
Html代碼
-
<base href=”<%=basePath%>”/>
<base href=”<%=basePath%>”/>
這個意思是指這個jsp頁面裡所有的<a href=“”/>串連都會在前面加上basePath,不僅僅是這對於<head></head>中的:
Html代碼
-
<link rel="stylesheet" href="style/css/index.css" type="text/css"
-
media="screen" charset="utf-8" />
-
<script src="style/js/jquery.js" type="text/javascript"></script>
<link rel="stylesheet" href="style/css/index.css" type="text/css" media="screen" charset="utf-8" /> <script src="style/js/jquery.js" type="text/javascript"></script>
也是起作用的。
我在網上看到有個使用這樣解決的,這裡也記錄一下:
Java代碼
-
結構:
-
WebRoot
-
|
-
common
-
|
-
css
-
|
-
common.css
-
|js
-
|common.js
-
-
-
<link rel="stylesheet" type="text/css"
-
href="<c:url value=‘/common/css/common.css‘ />" />
-
-
<script language="javascript" type="text/javascript"
-
src="<c:url value=‘/common/js/common.js‘/>"></script>
-
-
然後在jsp 頁面中用<c:url>的方式匯入css 就永遠沒有存在跳轉後css 無效了,同理js 也一樣
Struts2中的路徑問題總結