標籤: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、通過瀏覽器訪問:
打完,收工!