WebWork2源碼分析續三

來源:互聯網
上載者:User
web
最後我打算分析一下WebWork2.x中的輸入校檢部分,校檢資料通常包括用戶端檢查和服務端檢查兩種,在WebWork2.x中都有很好的支援,首先來分析服務端,服務端的校檢類全部來自於com.opensymphony.xwork.validator包,服務端的所有校檢工作都是通過一個ValidationInterceptor攔截器來進行攔截的,所以說Interceptor在WebWork2.x中的地位就相當於我們心中的“神”,他是用來拯救一切的,有點誇張了,哈哈!



下面請欣賞ValidationInterceptor攔截器的代碼




 


public class ValidationInterceptor extends AroundInterceptor {



    protected void after(ActionInvocation dispatcher, String result) throws Exception {



    }



    //擷取Action,然後調用ActionValidatorManager來進行檢查工作



    protected void before(ActionInvocation invocation) throws Exception {



        Action action = invocation.getAction();



        String context = invocation.getProxy().getActionName();



        …



        ActionValidatorManager.validate(action, context);



    }



}



別走開,接著看ActionValidatorManager,由於這個類有點複雜,只做主要的分析,其他則忽略



public class ActionValidatorManager {



   protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml";




 


//用於將校檢資訊緩衝起來



    private static final Map validatorCache = Collections.synchronizedMap(new HashMap());



    private static final Map validatorFileCache = Collections.synchronizedMap(new HashMap());



    private static final Log LOG = LogFactory.getLog(ActionValidatorManager.class);







//建立一個DelegatingValidatorContext,用於擷取設定資源,如:錯誤提示資訊等



public static void validate(Object object, String context) throws ValidationException {



        ValidatorContext validatorContext = new DelegatingValidatorContext(object);



        validate(object, context, validatorContext);



    }



//



public static void validate(Object object, String context, ValidatorContext validatorContext) throws ValidationException {



//建立一個校檢列表



        List validators = getValidators(object.getClass(), context);



        Set shortcircuitedFields = null;



//遍曆這個列表



        for (Iterator iterator = validators.iterator(); iterator.hasNext();) {



            Validator validator = (Validator) iterator.next();



            validator.setValidatorContext(validatorContext);



            …



        //調用校檢類,注意所有的自訂校檢類必須從validator介面中實現



validator.validate(object);



            }



            …



    }




 


至於用戶端校檢,由於操作全部來自於com.opensymphony.webwork.validators包,其他的所有校檢類都從ScriptValidationAware介面下繼承,由於時間的關係我在這裡不做分析了,各位如有興趣,自己去研究吧!




 


其實WebWork2.x裡面還有很多相關的細節調用,在此我不能一一描述,各位如果有興趣的話,也不妨來看看源碼。




 


今天就到這裡了啊,至於WebWork2.x的標籤我就不想看了,不知道是什麼原因我就是不太喜歡標籤啊,下個Java Web應用我一定用WebWork2.x來進行開發,這麼好的一個Framework不用太可惜了啊!








 


Email: zhuam@StudyJava.com



  zhuaming@Gmail.com


 


    Blog: http://blog.csdn.net/zhuam




相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。