選擇java 進入自由開放的國度

          隨筆 - 49, 文章 - 3, 評論 - 154, 引用 - 1
          數據加載中……

          Struts學習心得之Struts流程篇(3) -示例

              上一篇我們講了Struts的配置以及運行環境,這一篇我們通過一個實例來說明Struts實現MVC的過程和Struts開發WEB應用的一般方法。
               (1)實例介紹
                 這是《論文在線提交》系統的用戶注冊部分,用戶填入用戶名(userid)和Email地址(email)后,如果Email和userid在數據庫中不存在,則注冊成功,將系統生成的8位密碼發送到用戶的信箱里。數據表定義如下:
              
          CREATE TABLE passwd (
            userid varchar(
          20) DEFAULT '' NOT NULL,       #用戶id
            password varchar(
          16) DEFAULT '' NOT NULL,     #密碼 使用PASSWORD()加密后的
            email  varchar(
          50) DEFAULT '' NOT NULL,       #email
            PRIMARY KEY (userid),
            KEY password (password)
          );

                (2)不使用MVC模式的實現
                  有過ASP設計經驗的開發人員,如果看到這樣一個功能,那簡直是太簡單了。只要設計一個表單,然后post給一個asp頁面,在這個頁面中實現數據檢查(檢查email和用戶名是否存在)及數據插入和email發送的功能。如果純用jsp實現,基本流程也是一樣的。這樣做有什么不好呢?我們先看使用Struts的MVC來實現這樣的功能,然后我們再做一下比較。
                 (3)使用Struts MVC實現
                   如果使用框架,我們就必須按照框架進行編程,而不是“自由”的編程,我們必須在實現中有M,有V、有C。下面看一下Struts實現MVC的一般流程。
                   i. 這是HTML中表單的定義,action指定要將表單中的數據提交給誰進行處理,看以下幾種情況:1. 純用jsp,action肯定是一個jsp文件;2.使用jsp/JavaBean方式,action也是一個jsp,但是它將form中的數據映射到javaBean中,然后在jsp文件中進行獲取和處理;3. 采用MVC方式,這要轉變一下思路,腦子中要時刻清醒,M是什么,V是什么,C是什么,并且要理解它們的用途,不可用錯和濫用。下面我們看一下Struts中MVC的表現方式和使用方法。
                 ii 首先我們看M、V和C的表現。在Struts中,
                    首先看viewer,這是表現層,主要有jsp、servelt和javabean組成。也就是說我們將表單的數據放到javabean中,這個過程都是viewer的工作;
                    Controller,控制器主要是實現數據的驗證,并且實現跳轉,就是要將控制權交給“誰”。譬如:在用戶注冊中,當用戶將數據傳到bean,然后到action時,action去判斷email是否存在,如果存在將頁面跳轉到error.jsp或者輸出錯誤信息,如果不存在就跳轉到注冊成功的頁面

                 
            Model,這是業務邏輯,這在Struts中沒有強制定義,主要功能就是實現業務邏輯,是功能體,譬如實現數據庫的插入,刪除等。可以是POJO,也可以是EJB等。
                  (4)用Struts實現用戶注冊。
                    第一步、實現viewer,有以下幾個部分組成,signin.jsp(顯示輸入form和錯誤顯示)、SignForm.java(一個javaBean,不過在Struts中要繼承自ActionForm,實現數據映射和簡單的驗證)。一下是關鍵代碼:
          signin.jsp
          <font color=red>
          <html:errors/>   ---錯誤處理 詳細信息見本blog《Struts中的錯誤處理流程》
          font>
            
          <html:form action="/sign.do">
            --- sign.do是一個Action,在解釋Struts
          -conf.xml時說明

                   
          <bean:message key="sign.userid"/><html:text property="userid"/><br>
                   
          <bean:message key="sign.email"/><html:text property="email"/>
                  
          <html:submit ><bean:message key="login.signup"/>html:submit>  

                
          html:form>

          說明:
          <bean:message key="sign.userid"/>從資源文件中讀取數據,詳細信息見本blog的《struts中資源文件的使用》
          SignForm.java
           1package user;
           2
           3import javax.servlet.http.HttpServletRequest;
           4
           5import org.apache.struts.action.ActionError;
           6import org.apache.struts.action.ActionErrors;
           7import org.apache.struts.action.ActionForm;
           8import org.apache.struts.action.ActionMapping;
           9
          10/**//**
          11 * @author han
          12 * @company soochow university
          13 * 注冊bean
          14 */

          15
          public class SignForm extends ActionForm {
          16   private String userid = null;
          17   private String email = null;
          18   private String password = null;
          19   
          20   
          21/**//**
          22 * @return Returns the password.
          23 */

          24
          public String getPassword() {
          25    return password;
          26}

          27
          /**//**
          28 * @param password The password to set.
          29 */

          30
          public void setPassword(String password) {
          31    this.password = password;
          32}

          33
          /**//**
          34 * @return Returns the email.
          35 */

          36
          public String getEmail() {
          37    return email;
          38}

          39
          /**//**
          40 * @param email The email to set.
          41 */

          42
          public void setEmail(String email) {
          43    this.email = email;
          44}

          45
          /**//**
          46 * @return Returns the userid.
          47 */

          48
          public String getUserid() {
          49    return userid;
          50}

          51
          /**//**
          52 * @param userid The userid to set.
          53 */

          54
          public void setUserid(String userid) {
          55    this.userid = userid;
          56}

          57
          58  public void reset(ActionMapping mapping, HttpServletRequest request){
          59         userid = null;
          60         email = null;
          61  }

          62
            //驗證
          63
            public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){
          64        ActionErrors errors = new ActionErrors();
          65        
          66        if(this.userid == null || this.userid.length()<1){
          67              errors.add("userid"new ActionError("userid.required"));
          68        }

          69        
          70        if(this.email == null || this.email.length() < 1){
          71              errors.add("email"new ActionError("email.required"));
          72        }

          73        
          74        return errors;
          75  }

          76
          }

                從代碼我們可以看出,SignForm除了實現bean的getter和setter功能外還實現了簡單的驗證,即驗證userid和email是否為空,若空則出錯!
                關于form的action,我們在講action和編輯struts-config.xml文件時會進行說明。

          posted on 2005-05-19 10:31 soochow_hhb 以java論成敗 以架構論英雄 閱讀(1639) 評論(0)  編輯  收藏 所屬分類: Struts

          主站蜘蛛池模板: 舞钢市| 桑植县| 阿拉善左旗| 江津市| 屏南县| 洞口县| 济源市| 永福县| 左贡县| 洛川县| 司法| 布尔津县| 连平县| 桃园县| 南华县| 宣威市| 靖西县| 齐齐哈尔市| 西华县| 治多县| 玉环县| 和田市| 长沙县| 都兰县| 淮滨县| 佛学| 徐州市| 城口县| 台北县| 北安市| 清新县| 揭西县| 福贡县| 康平县| 望奎县| 土默特右旗| 西华县| 建昌县| 鄂尔多斯市| 邮箱| 沙雅县|