YMP架構學習筆記(三)------處理器、控制器、攔截器

來源:互聯網
上載者:User

標籤:des   style   http   java   color   os   

一、處理器

    1、事件處理器

        添加類WebEventHandler.java並繼承IWebEventHandler

        

public class WebEventHandler implements IWebEventHandler {public void onInitialized() {}public void onRequestReceived(IRequestContext context) {}public void onRequestCompleted(IRequestContext context) {}public void onDestroyed() {}public void onStartup(ServletContextEvent event) {}public void onShutdown(ServletContextEvent event) {}public void onSessionCreated(HttpSessionEvent event) {}public void onSessionDestroyed(HttpSessionEvent event) {}public void onRequestInitialized(ServletRequestEvent event) {}public void onRequestDestroyed(ServletRequestEvent event) {}}

    

    2、異常處理器

        添加類ErrorHandler.java並繼承IWebErrorHandler

       

public class WebErrorHandler implements IWebErrorHandler {public void onError(Throwable e) {}public IView onConvention(String requestMapping) {return null;}public IView onValidation(Set<ValidateResult> results) {return null;}}

     3、修改ymp-conf.properties,添加相關配置

ymp.configs.webmvc.base.event_handler_class=com.demo.WebEventHandlerymp.configs.webmvc.base.error_handler_class=com.demo.WebErrorHandler

     註:ymp-conf.properties中,ymp.module_list(模組列表)配置項如下

ymp.module_list=configuration|logger|webmvc

二、控制器

    1、修改ymp-conf.properties,添加控制器包掃描路徑

ymp.configs.webmvc.base.controller_packages=com.demo.controller

      建立控制器包和類對象com.demo.controller.DemoController

    

      DemoController.java

@Controllerpublic class DemoController {@RequestMapping("hello")@RequestMethodpublic IView hello(){return new TextView("Hello,world!");}}

     2、發布到tomcat並啟動,通過瀏覽器訪問:

        http://localhost:8080/ympWeb/hello

        

    3、控制器參數綁定。

        在控制器中添加如下代碼:

@RequestMapping("/hello/sayHi")@RequestMethodpublic IView sayHi(@RequestParam String name) {    return new TextView("Hi, " + name);}

        部署到tomcat並啟動,通過瀏覽器訪問:

        http://localhost:8080/ympWeb/hello/sayHi?name=xiaoming

        

    4、綁定URL參數

        在控制器中添加如下代碼:

@RequestMapping("/hello/sayHi/{name}")@RequestMethodpublic IView sayHi2(@PathVariable String name) {    return new TextView("Hi, " + name);}

        部署到tomcat並啟動,通過瀏覽器訪問:

        http://localhost:8080/ympWeb/hello/sayHi/xiaoming

        

    5、控制器實現參數驗證。

        在控制器中添加如下代碼:

@RequestMapping("/valid/{name}/{age}")@RequestMethod@Validation(fullMode = true)public IView paramValidator(    @Validate({        @ValidateRule(RequriedValidator.NAME),        @ValidateRule(value = LengthValidator.NAME, params = { "min=3", "max=6" }) })    @PathVariable String name,     @Validate({        @ValidateRule(RequriedValidator.NAME),        @ValidateRule(value = NumericValidator.NAME, params = { "min=18",   "max=20" }) })    @PathVariable String age) {    return new TextView("");}

        通過瀏覽器訪問http://localhost:8080/ympWeb/hello/sayHi/xiaoming/13,控制台拋出如下異常:

2014-7-14 16:21:39 org.apache.catalina.core.StandardWrapperValve invoke嚴重: Servlet.service() for servlet default threw exceptionnet.ymate.platform.validation.ValidationException: [{ fieldName : ‘age‘, message : ‘長度必須介於18和20之間‘ }, { fieldName : ‘name‘, message : ‘長度必須介於3和6之間‘ }]at net.ymate.platform.mvc.support.RequestExecutor.execute(RequestExecutor.java:151)at net.ymate.platform.mvc.web.support.DispatchHelper.doRequestProcess(DispatchHelper.java:119)at net.ymate.platform.mvc.web.DispatcherFilter.doFilter(DispatcherFilter.java:92)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)at java.lang.Thread.run(Unknown Source)

       若希望將驗證資訊輸出到瀏覽器,可以通過WebErrorHandler類中onValidation方法實現,代碼如下:

public IView onValidation(Set<ValidateResult> results) {    StringBuilder _sb = new StringBuilder();    for (ValidateResult _result : results) {        _sb.append(_result.getMessage()).append("<br/>");    }    return new TextView(_sb.toString());}

      再次通過瀏覽器訪問:

      

三、攔截器

  1、建立攔截器類,用於攔截年齡大於19歲,代碼如下:

@Beanpublic class DemoFilter implements IFilter {    public IView doFilter(RequestMeta meta, String params) throws Exception {        Integer _age = Integer.parseInt(StringUtils.defaultIfEmpty((String) WebContext.getContext().get("age"), "0"));        if (_age > 19) {            return new TextView("年齡大於19歲,被攔截");        }        return null;    }}

    工程視圖如下:

          

  2、將@Filter添加到DemoControl類中的paramValidator方法中,修改後代碼如下:

        @RequestMapping("/valid/{name}/{age}")@RequestMethod@Validation(fullMode = true)@Filter(DemoFilter.class)public IView paramValidator(    @Validate({        @ValidateRule(RequriedValidator.NAME),        @ValidateRule(value = LengthValidator.NAME, params = { "min=3", "max=6" }) })    @PathVariable String name,     @Validate({        @ValidateRule(RequriedValidator.NAME),        @ValidateRule(value = NumericValidator.NAME, params = { "min=18",   "max=20" }) })    @PathVariable String age) {   return new TextView("你好," + name + ", 你今年" + age + "歲了!");}

  3、通過瀏覽器訪問:

    

    


打完,收工!

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.