struts.xml中package元素的namespace屬性用法(struts2.2.1.1)


關於struts.xml中package元素的namespace屬性的,這是一個大多數項目開發都會用到的東西。

但在它的使用上,我卻也碰到了不少問題,下面與大家分享一下我所得出的三種使用方法。

其間涉及到3個文件:struts.xml、input.jsp(自己編寫的輸入頁面)、output.jsp(自己編寫的輸出頁面)。

說明一下,跳轉中的action設置的是默認都是成功,直接跳轉到output.jsp,而output.jsp頁面只有簡單的一個單詞“output"。

1、第一種方法,也是我覺得最巧妙和最簡單的方法,具體如下:

配置struts.xml

1 <struts>
2     <package name="hello" extends="struts-default" namespace="/theNamespace">
3         <action name="namespaceAction" class="com.shengsiyuan.struts2.NamespaceAction">
4             <result name="success">output.jsp</result>
5         </action>
6     </package>
7     
8 </struts>

頁面input.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title></title>
  </head>
  
  <body>
    <form action="namespaceAction.action">
        <input type="submit">
    </form>
  </body>
</html>

 

此時input.jsp和output.jsp都放在WebRoot下的theNamespace文件夾下面,值得注意的是此時struts.xml中package元素的namespace屬性值與此文件夾theNamespace同名。在這種情況下,在瀏覽器中輸入http://localhost:8080/struts2/theNamespace/input.jsp將訪問輸入頁面input.jsp(此URL中struts2是我為此項目設置的Context path,而此中的theNamespace為文件夾的名字,下URL同),然后再點擊input.jsp中的提交按鈕,則轉到http://localhost:8080/struts2/theNamespace/namespaceAction.action(此中strut2同上,而theNamespace則為namespace屬性值)。此處頁面跳轉后的URL基於的原理是:input.jsp中的action值("namespaceAction.action")並末在前面添加”/“符號("/namespaceAction.action")。因為,若添加”/“則在形成URL(上面第二個)時,會以”服務器路徑“為地址(http://localhost:8080),並把action值看成是相對路徑,得到的URL為http://localhost:8080/namespaceAction.action。顯然是不對的。而不加”/“則不同,這時會以當前路徑(http://localhost:8080/struts2/theNamespace/)<本來此中的theNamespace由文件夾名取得,但在URL中被當作namespace屬性值看待,因為它們同名,完成了這一巧妙的轉換>為地址,並加上action值,這就得到了上面第二個URL(正確的)。

 

2、第二種方法,此方法與第一種類似,靈感也來自於第一種方法。

同樣首先是struts.xml,同上的主要區別在於namespace的屬性值與文件夾不同名,我用的是"/test"。

而input.jsp中當然也需相應的改動,與上面的區別是action值,現為"/struts2/test/namespaceAction.action"(分別代表的是Context path、namespace屬性值、最終的action名)。從第一種方法的分析可知,這里action的值中前面有加”/“符號,故為”服務路徑“(http://localhost:8080),加上action值。得http://localhost:8080/struts2/test/namespaceAction.action。此為正確的URL。

 

3、第三方法,又是在第二種方法的基礎上得到。

struts.xml與第二種方法中的一樣。

在input.jsp求URL的方法上,略有不同。需在input.jsp的<head>與<title>標簽之間添加代碼<base href="<%=basePath%>">。當添加此base標簽之后,計算URL的方法就有所變化,添加之后,在此例中action的值就需改為"test/namespaceAction.action分別代表的是namespace屬性值、最終的action名)。因為當添加base標簽之后,URL就是以base為相對路徑,從input.jsp頂部的JSP代碼中的path和basePath可知,此時的base值為http://localhost:8080/struts2/。因此從第二種方法中正確的URL可知,我們只需將action值寫為"test/namespaceAction.action就行,因為base中只缺此部分。

 

以上即為我對struts.xml中package元素的namespace屬性的理解,若有不對或不足之處,還請大家指出,相互交流,謝謝!

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM