Struts2中的路徑問題總結

來源:互聯網
上載者:User

標籤: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代碼
  1. <base href=”<%=basePath%>”/>

<base href=”<%=basePath%>”/>

這個意思是指這個jsp頁面裡所有的<a href=“”/>串連都會在前面加上basePath,不僅僅是這對於<head></head>中的:

Html代碼
  1. <link rel="stylesheet" href="style/css/index.css" type="text/css"

  2.            media="screen" charset="utf-8" />

  3. <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代碼
  1. 結構:  

  2.    WebRoot  

  3.    |  

  4.     common  

  5.     |  

  6.      css  

  7.      |  

  8.           common.css  

  9.         |js  

  10.           |common.js  

  11.  

  12.  

  13.    <link rel="stylesheet" type="text/css"

  14.            href="<c:url value=‘/common/css/common.css‘ />" />  

  15.  

  16.        <script language="javascript" type="text/javascript"

  17.            src="<c:url value=‘/common/js/common.js‘/>"></script>  

  18.  

  19. 然後在jsp 頁面中用<c:url>的方式匯入css 就永遠沒有存在跳轉後css 無效了,同理js 也一樣  

Struts2中的路徑問題總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.