Struts2中namespace引發的路徑問題

Path路徑問題

         1.如果在struts.xml文件中找不到與訪問路徑相對應的namespace,那麼監聽器就會把它交給tomcat處理,如tomcat就會返回<welcome-file-list>所對應的頁面,如果web.xml文件中沒有設置<welcome-file-list>元素,而且struts.xml文件中又找不到與訪問路徑相對應的namespacetomcat就會報錯。

         2. <a href="path/path.action">路徑問題說明</a>當點擊這個鏈接時,它會到struts.xml文件中找值爲“/path”的namespace,然後在該namespace下找path. Action

         3.<a href=”/index.jsp”>首頁</a>jsp文件中,絕對路徑“/”表示的是http://localhost:8080/,而不是你站點的根路徑,所以該鏈接地址爲:http://localhost:8080/index.jsp

         4.在頁面http://localhost:8080/Struts2_0400_Path/path/path.action中有一鏈接<a href=”index.jsp”>index.jsp</a>,點擊index.jsp,鏈接的地址是http://localhost:8080/Struts2_0400_Path/path/index.jsp,而不是http://localhost:8080/Struts2_0400_Path/index.jsp,即struts2中的路徑問題是根據action的路徑而不是jsp路徑來確定,所以儘量不要使用相對路徑。如果 不是struts2的應用,那麼在普通jsp頁面中的<a href=”index.jsp”>index.jsp</a><a href=”path/path.action”>路徑問題說明</a>鏈接中表示的相對路徑,就是相對於當前jsp頁面所在的路徑,一般都是web站點的根目錄的,即鏈接地址爲http://localhost:8080/Struts2_0400_Path/index.jsp

         5.在第4點的基礎上,如果jsp頁面上加上如下語句:

<%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<head><base href="<%=basePath%>" /></head>//<head>標籤下加上這一語句,那麼這個頁面上的所有鏈接都是默認指向basePath下的路徑或文件的。

那麼點擊鏈接<a href=”index.jsp”>index.jsp</a>,鏈接到的是站點根路徑下的index.jsp,即訪問的地址爲http://localhost:8080/Struts2_0400_Path/index.jsp

         6.總結:

struts2中的路徑問題是根據action的路徑而不是jsp路徑來確定,所以儘量不要使用相對路徑。 
解決辦法非常簡單,統一使用絕對路徑。
或者使用myeclipse經常用的,指定basePath

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章