Struts2 中路徑問題

 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 也一樣 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章