Struts, Namespace用法

最近在用SSH框架作一個項目,在使用Struts 的namespace時遇到很多問題,如今就對struts namespace 作一個簡單的介紹吧.(本文從項目結構展開敘述)web

(第1次寫博客, 寫的很差,請見諒,望你們多提寶貴意見~)ajax

 1.  新建一個項目工做叫作eczone,  WebRoot的文件目錄結構以下spring

    

  • 其中index.jsp是用來作歡迎界面的(見web.xml的<welcome-file>配置)
  • /WEB-INF/web.xml (這個你們都懂,具體配置請baidu / google)
  • /WEB-INF/pages/failure.jsp (登陸失敗的跳轉頁面)
  • /WEB-INF/pages/success.jsp (登陸成功的跳轉頁面)

2.  在web.xml中,歡迎頁面的配置以下:apache

 <display-name>Eczone</display-name>
  <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

若是,index.jsp在/WebRoot/pages/下面,  上面的配置則須要修改成: /pages/index.jsptomcat

3.  訪問方式:  http://localhost:8080/eczone/    app

    其中eczone爲項目名稱,也就是發佈到tomcat的webapp下面的項目名。 (到如今彷佛還沒進來主題,別急讓咱們繼續往下看-----》》)框架

4.   URL的組成結構以下:(如下爲最簡單的用戶登陸後的url)webapp

    

(關於.action,何時須要指定,何時不須要,將在後面解釋)jsp

5.   先看Struts.xml的配置測試

 1 <struts>
 2     <constant name="struts.devMode" value="true"></constant>
 3     <!--Spring plus 經過overriding struts objectFactory 來增強框架核心對象的建立 -->
 4     <constant name="struts.objectFactory"
 5         value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
 6     <package name="mypkg2" extends="struts-default">
 7         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
 8             <result name="success">/pages/success2.jsp</result>
 9             <result name="failure">/pages/failure.jsp</result>
10         </action>
11     </package>
12     <package name="mypkg1" namespace="/" extends="struts-default">
13         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
14             <result name="success">/pages/success1.jsp</result>
15             <result name="failure">/pages/failure.jsp</result>
16         </action>
17     </package>
18     <package name="user" namespace="/user" extends="struts-default">
19         <action name="userLogin" class="com.dragon.eczone.action.user.UserAction"        method="login">
20             <result name="success">/pages/success.jsp</result>
21             <result name="failure">/pages/failure.jsp</result>
22         </action>
23     </package>
24 </struts>

 說明: 1.  success1.jsp, success2.jsp能夠加入到/pages/ 目錄下進行測試,到底請求了那個action. (在success.jsp, success1.jsp, success2.jsp上呈現不一樣內容來區別)

          2.  Struts在處理請求時,若是請求指定了namespace , struts 會根據指定的namespace去查找action;

                                          若是請求沒有指定namespace, Struts則從默認namespace的根目錄去查找acton

          3.  在 Struts.xml中namespace="/" 爲默認的根目錄, 若是不指定namespace的值則也等同於namespace="/".

6. 在看index.jsp的 代碼

<s:form name="loginForm" action="userLogin"  method="POST"  namespace="/user">
                <s:textfield name="userName"    label="Login name" />
                <s:password  name="passWord"      label="Password" />
                <s:submit      value="Login"      align="center" />
</s:form>

  說明:1. namespace 若是不指定, 默認爲 namespace="/" 更目錄

          2.  action爲Struts.xml中定義的action的名稱.

          3. 有的地方會指定action爲如下值:

              》    /user/userLogin 這種方式,頁面能夠跳轉成功, 可是控制檯會拋異常或警告 :

    No configuration found for the specified action: '/user/userLogin' in namespace: '/user'. Form action defaulting to 'action' attribute's literal value.

             》   /user/userLogin.action  這種方式頁面能跳轉成功,出現以下警告:                      

No configuration found for the specified action: '/user/userLogin.action' in namespace: '/user'. Form action defaulting to 'action' attribute's literal value.

     4.  最後來講.action的事情 , <s:form>使用的是Struts標籤,會自動添加.action,  若是是ajax等本身拼裝URL的時候,必須加上.action.

 

小結:

 1.   struts.xml中儘可能顯示的指明page, 和namespace  (建議將page和namespace設置成同一值)

 2.   若是本身拼裝URL,則按照上面第4點中URL的結構拼裝。

 3.   若是使用struts 標籤方式<s:form>,  則建議顯示的指定action, namespace(參照Struts.xml中配置)

相關文章
相關標籤/搜索