隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

             Struts-config.xml是struts框架的核心配置文件,其最基本的功能是用來配置Action和ActionForm,通知Struts框架完成傳遞和頁面流轉.
             一.處理異常的exception和global-exception
             在Web應用中,對異常處理位置都是業務邏輯失敗的信息.因為異常處理還需要編寫ActionErrors,給出報錯信息將導致在Action會看到許多的ActionErrors的代碼.
             struts解決了這個問題,它允許程序員配置任何異常,并且在將異常轉化為報錯信息的時候,不必須自行使用"try catch"來捕捉,寫報錯轉發到出錯頁面.
             1.局部異常
                就是針對一個Action響應所拋出的異常,該異常將只負責Action的程序段,并且自定義在<action>元素中.

             局部異常的定義:
            <action-mapping>
             <action
                input="SampleJsp.jsp" 指定了SampleForm對象使用的ActionForrm對象名稱,與form-bean元素定義的name屬性一致
                name="SampleForm"  指定了SampleForm對象使用的ActionForm對象名稱
                path="/SampleAction" 如果使用了SampleForm.do的響應,那么ActionServlet控制器組件就會自動找到本Action對象
                scope="request"   使用ActionForm的范圍
                type="struts.sample.cap3.sample1.action.SampleAction"  解釋本Action對象的路俓
                validate="false">   定義使用的ActionForm在Action是否需要檢驗
                <expetion
                key="userNameException"  指定了在資源配置文件中報錯信息的鍵
                path="/SampleJsp.jsp"   指定了報錯之后所轉發到的JSP頁面,在該頁面中可以通過標簽庫來讀取報錯信息,并顯示
                type="struts.sample.cap3.sample1.exception.UserNameException"/> 指定了該異常類的java實體名
                <exception
                 key="SampleJsp.jsp"
                 type="java.sql.SQLException"/>
               </action>
                </action-mappings>

           2.全局異常
                 指對所有定義在Struts-config.xml的Action程序都進行處理,他定義在<global-exception>元素中
               <global-exception>
               <exception
               key="passWordException.jsp"
               path="SampleJsp.jsp"
               type="struts.sample.cap3.sample.exception.passWordException"/>
              <global-exception>
               定義全局變量時無需將<exception>元素作為任何<action>元素的子元素,而是直接作為 <global-exception>的子元素.

            簡單示例:
            (1).自定義標簽類
                UserNameException.java

          package struts.sample.cap3.sample1.exception;
          public class UserNameException extends Exception {
            public UserNameException(){
             super();
            }
            public UserNameException(String message){
             super();
            }
            public UserNameException(String message,Throwable cause){
             super(message,cause);
            }
            public UserNameException(Throwable cause){
             super(cause);
            }
            public UserNameException(Exception exc){
             super(exc);
            }

          }


          (2)業務邏輯類
          UserNameService.java

          package struts.sample.cap3.sample1.service
           import struts.sample.cap3.sample1.exception.UserNameException;
           import struts.sample.cap3.sample1.exception.UserNameException2;
          public class UserNameService {
           public void UserNameLogic() throws UserNameException{
            throw new UserNameException("UserName");
           }

          }


          (3)Action類
          SampleAction.java
           

          package struts.sample.cap3.sample1.action;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import struts.sample.cap3.sample1.exception.UserNameException;
          import struts.sample.cap3.sample1.service.UserNameService;
          public class SampleAction extends Action{
            public ActionForward execute(
              ActionMapping mapping,
              ActionForm form,
              HttpServletRequest request,
              HttpServletResponse response) throws Exception{
             UserNameService userNameService=new UserNameService();
             return  null;
            }

          }


           (4)資源配置文件
          application.properties
          userNameException=用戶名無法確定
          XXX=XXX
          ....

          (5)JSP頁面

          <%@ page contentType="text/html;charset=UTF-8" %>
          <%@ page language="java"%>

          <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
          <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
          <html>
          <head><title>JSP for SampleForm</title>
          </head>
          <body>
          <html:errors/><p/>
          <html:form action="SampleAction.do">
          userName : <html:text property="userName"/><br/>
          password : <html:password property="password"/><br/>
          sex: <html:select property="sex">
              <html:option key="F" value="F"/>
              <html:option key="M" value="M"/>
               </html:select><br/>
               age : <html:text property="age"/><br/>
               email : <html:text property="email"/><br/>
               <html:submit/><html:cacel/>
               </html:form>
          </body>
          </html>



          二:global-forwards標記與全局轉發
           1.全局轉發  
                  所謂全局轉發,就是在整個應用程序中,無論怎樣的請求者都可以使用的全局中轉.它可以僅僅通過一個請求轉發到一個JSP頁面,也可以通過另一個請求轉發到另一個已經定義的Action請求.可以理解為全局轉發就是一個控制器,它可以隨著按鈕(請求)的切換而轉換(轉發)到任何一個頻道(JSP頁面和請求).

          2. global-forward標記的配置
           <blobal-forward>
           <forward
             name="Login"
             path="/LoginSampleJSP.jsp"/>
           <forward
             name="success"
             path="/SampleAction"
             redirect="true"  屬性允許在2個Web context中進行轉發,默認為false
            contextRelative="true"/>  屬性允許在多個struts配置文件模塊中都可以識別轉發,默認為false.
            </blobal-forwards>
            name的屬性,path的屬性是必須的,它們分別表示了轉發標識和轉發定位,對于任何一個<forward>元素都可以被設置.它實現了無論是全局轉發還是局部轉發都可以在模塊間實現通訊.
           
          3.Struts-config.xml中的轉發
           (1).<action>元素結合Action bean的局部轉發
           (2).<action>元素的簡單局部轉發
           (3).Action bean中的程序轉發
           (4).<global-forwards>的全局轉發

          (1)這類轉發是在請求到來后做一些業務邏輯,然后根據業務需要將結果轉發到另一個請求或直接顯示出一個JSP頁面.
          Struts-config.xml配置
          <action-mapping>
           <action
            name="SampleForm"
            path="/SampleAction"
            scope="request"
            type="struts.sample.cap3.sample1.action.SampleAction"
            validate="false">
           <forward name="SampleAction" path="/SampleJsp.jsp"/>
           <forward name="failue" path="/Login"/>

           </action>
           </action-mapping>

          Action bean程序代碼
            public class SampleAction extends Action{
             public ActionForward execute(
             ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request ,
            HttpServletResponse response) throws Exception{
           //業務邏輯代碼................
            if(true){
            return mapping.findForward("SampleAction");
           }else{
            return mappingForward("failue")
          }
          }

           
          (2) 這類轉發只需要定義<action>元素,而不用專門的Action bean來配合工作,可以轉發到請求或JSP頁面.通常這類轉發被用作直接轉發到一個JSP顯示頁面的請求.
            <action forward="/SampleJsp.jsp" path="/Welcome"/>
            利用<action>元素的forward屬性和path屬性來完成工作,沒有定義的ActionForm的name屬性和定義Action bean Java實體名的type屬性.當請求為path屬性所定義的內容時,將直接轉發到forward屬性所指定的地方...

          (3).通過Action bean的execte方法由程序員利用代碼來制定轉發.通常這類轉發被使用在不確定轉發目的地的場合,可能會根據請求request或ActionForm傳入的內容來指定轉發
          Struts-config.xml配置
          <action-mapping>
           <action
            name="SampleForm"
            path="/SampleAction"
            scope="request"
            type="struts.sample.cap3.sample1.action.SampleAction"
            validate="false">
           <forward name="SampleAction" path="/SampleJsp.jsp"/>
           <forward name="failue" path="/Login"/>

           </action>
           </action-mapping>

          Action bean程序代碼
            public class SampleAction extends Action{
             public ActionForward execute(
             ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request ,
            HttpServletResponse response) throws Exception{
           //業務邏輯代碼................
            return new ActionForward(request.getParmeter("pageFlow"));}
          }

          返回的ActionForward類型對象可以實現動態轉發,本示例中使用JSP頁面中名為"pageFlow"的控件所指定的值作為轉發目的地."pageFlow"控件的值可以是一個請求,也可以是一個JSP頁面.這樣,轉發的目的地就完全交給進行請求的JSP頁面來指定.
           
          (4).這一類型的轉發僅僅關注在轉發這個動作上面,而不關注請求,因此全局轉發必須配合<action>元素或者Action bean來實現"請求-轉發"的整個過程.這類轉發通常被使用在有統一轉發目的地的顯式邏輯中.
          struts-config.xml配置(同上)

          Actionbean部分(同上)+
          return mapping.findForward("Login");
          return mapping.findForward("SampleAction");

          四.控制器
            Struts框架的控制器由ActionServlet(Struts Servlet) RequestProcessor(請求處理),ModoleConfig(存儲配置信息),Action,
          ActionForward(Action的轉發)5個主要對象多組成,他們完成了Struts框架服務器端表示層MVC的所有工作.
            流程如下
            1.客戶端的請求到來后發送到ActionServlet中
            2.ActionServlet調用RequestProoessor處理用戶請求
            3.RequestProcess根據Module得到請求對應的Action
            4.具體Action對象處理請求的具體工作
            5.從Action的處理返回ActionForward,轉發到指定的目的地....
          posted on 2007-09-22 17:59 冬天出走的豬 閱讀(698) 評論(0)  編輯  收藏 所屬分類: struts
          主站蜘蛛池模板: 永嘉县| 桦南县| 阳原县| 溧阳市| 石林| 呼伦贝尔市| 桓台县| 福贡县| 富锦市| 新巴尔虎右旗| 搜索| 伽师县| 克拉玛依市| 平潭县| 开平市| 望城县| 齐齐哈尔市| 正阳县| 阿拉善右旗| 原阳县| 迁西县| 淳化县| 宁津县| 许昌市| 彩票| 揭西县| 南皮县| 山丹县| 安义县| 墨脱县| 盖州市| 黔西县| 徐州市| 博爱县| 巴塘县| 通道| 宜君县| 股票| 南涧| 正定县| 神木县|