看到題目,您一定覺得很土,Struts早已風靡,而關于Stuts的文章也早已遍地都是,如果你覺得土那你就別看了,我只是把我這段時間學到的一些比較膚淺知識在這里記錄一下,如果您真在這些連載文章中獲得了您想要的知識,那么我就會很欣慰了。
        這不快畢業了嗎?我選的題目就和Struts有關,做一個關于學校的畢業設計選題系統,就是B/S結構,訪問數據庫的一些俗套的東西,為了鞏固我這段時間學習Struts,我把這個系統竟往難里做,這樣對我這個動手能力差的人,實際工作經驗少的人來說,會有點幫助吧?
        當初就是這樣想的,所以就開始了我的Struts之旅。
        那我就從我的第一頁講起吧,當然第一頁一般都是登陸,至于怎么配置Struts,您還是參考一些別人的文章吧,我覺得寫這些就夠土的了,寫怎么配置,怎么實現就更土!

        <%@ page contentType="text/html; charset=gb2312"%>
        <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
       <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
       這句是生成驗證登陸表單所需要的js代碼
       
            用戶名:
            密碼:    
                           
                           
                           
       

       把控制格式的HTML刪除掉,應該剩下這些就是主干了,對于這個畢業設計選題系統,有三種角色,管理員(Admin),教師(Teacher),學生(Student)而我把他們的登陸都做到了一起,在后臺這三種角色也是都放在了一個表中,對于他們這三種對象,都是繼承于Person的類,所以在登陸時可以忽視他們的具體角色,用多態來實現登陸。        

    action="/ajax.do?method=login" :將一些關于登陸啊,注冊的一些亂七八糟的操作我都放到了一個DispatchAction,之后可以用method的不同來分別調用不同的功能。
   onsubmit="return validateLoginForm(this)":這個是用來實現Struts自帶的validate驗證
    :是用來顯示在登陸時的錯誤信息

    在這里需要的Struts相關配置會有如下的幾個方面:
      首先是要對配置文件進行配置我們登陸時需要的FormBean和Action
       (1)struts-config.xml:
            
            
                     對于登陸失敗,我們準備返回到這里
           
     (2)validation.xml:
            
                  user
                  ^[0-9a-zA-Z]*$
               這里是常量配置,因為我們還會需要到用戶名的驗證,所以把他設置為了常量
           
          下面是對這個bean的具體嚴整手段了,按字段field分別來寫他們所依賴depaends的檢驗手段,常用的有必須填required,正則表達式驗證mask,最大maxlength和最小minlength
            
              
                   從application.properties里讀取input.user.mask           
                    從application.properties里讀取input.user
                   
                   
                  以上三部分構成了js的一條錯誤提示,以下是具體的嚴整規則了
                
                    mask
                    ${user}
                
                
                    minlength
                    1
                
                
                    maxlength
                    16
                
         
   
    
    
    
    
     mask
     ${password}
    
    
     minlength
     1
    
    
     maxlength
     16
    
   

  
 對于我們需要的FormBean是這樣寫的:
package com.boya.subject.view;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.*;

public class LoginForm extends ActionForm
{
    private static final long serialVersionUID = 1L;
    private String user = null;
    private String password = null;

    public String getPassword()
    {
        return password;
    }

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

    public String getUser()
    {
        return user;
    }

    public void setUser( String user )
    {
        this.user = user;
    }
    
    public void reset(ActionMapping mapping,HttpServletRequest request)
    {
        this.password = null;這里很重要,當用戶輸入有錯時,需要返回登陸界面給用戶,為了用戶填寫方便我們可以設置返回給用戶的哪部分信息設置為空
    }
}

我用來實現登陸的DispatchAction代碼如下:
      public ActionForward login( ActionMapping mapping, ActionForm form,
            HttpServletRequest req, HttpServletResponse res ) throws Exception
    {
         Service service = getService();調用業務邏輯
        LoginForm loginForm = (LoginForm) form;獲取formbean
        String user = loginForm.getUser();提取用戶名
        Person person = service.getUser( user );從業務邏輯中查找用戶
        ActionMessages messages = new ActionMessages();
        ActionMessage am;
        if ( person == null )如果用戶不存在,我們就返回
        {
            am = new ActionMessage( "index.jsp.fail.user", user );參數的意義:第一個是主串,而后面的作為arg數組
            messages.add( "user", am );把錯誤信息放到errors 屬性為user那里去顯示
            saveErrors( req, messages );
            form.reset( mapping, req );如果出現錯誤,調用formbean的重置功能
            return mapping.findForward( ID.FAIL );
        }
        if ( !person.getPassword().equals( loginForm.getPassword() ) )如果密碼不一致
        {
            am = new ActionMessage( "index.jsp.fail.password", user );
            messages.add( "password", am );
            saveErrors( req, messages );
            form.reset( mapping, req );
            return mapping.findForward( ID.FAIL );
        }
       
        setSessionObject( req, person.getType(), person );把用戶放到session里
        return new ActionForward( person.getType() + ".do", true );我在每個類型用戶的類中加入了一個getType來在這里調用,之后動態的去對應的admin.do,student.do,teacher.do的主頁面,并且這里實現的不是請求轉發,而是請求從定向
   }