文档章节

YMP框架学习笔记(三)------处理器、控制器、拦截器

小樓聽風雨
 小樓聽風雨
发布于 2014/07/14 20:10
字数 763
阅读 1.3K
收藏 16

一、处理器

    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.WebEventHandler
ymp.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

@Controller
public class DemoController {
	
	@RequestMapping("hello")
	@RequestMethod
	public IView hello(){
		return new TextView("Hello,world!");
	}
}

     2、发布到tomcat并启动,通过浏览器访问:

        http://localhost:8080/ympWeb/hello

        

    3、控制器参数绑定。

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

@RequestMapping("/hello/sayHi")
@RequestMethod
public 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}")
@RequestMethod
public 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 exception
net.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岁,代码如下:

@Bean
public 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、通过浏览器访问:

    

    


打完,收工!

© 著作权归作者所有

小樓聽風雨
粉丝 3
博文 3
码字总数 1971
作品 0
沈阳
私信 提问
加载中

评论(0)

YMP 的 Maven 扩展工具--YMP-Maven-Extension

YMP-Maven-Extension(YMP Maven扩展工具) 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具集合,主要包括和两部分。 YMP框架项目地址:https://gitee.com/suninformation/ym...

有理想的鱼
2016/03/16
633
1
有理想的鱼/ymate-maven-extension

YMP-Maven-Extension(YMP Maven扩展工具) 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具集合,主要包括和两部分。 YMP框架项目地址:https://gitee.com/suninformation/ym...

有理想的鱼
2017/11/03
0
0
YMP Maven 扩展工具 v1.0 发布,快速搭建 Java 项目

YMP-Maven-Extension(YMP Maven扩展工具) 帮助您快速搭建基于YMP框架的各种Java工程结构的Maven扩展工具集合,主要包括项目模板和Maven插件命令两部分。 YMP框架项目地址:https://gitee.c...

有理想的鱼
2017/11/03
1.3K
6
YMP 框架示例项目--YMPv2-Example

YMP是一个非常简单、易用的一套轻量级JAVA应用开发框架,设计原则主要侧重于简化工作任务、规范开发流程、提高开发效率,让开发工作像搭积木一样轻松是我们一直不懈努力的目标! YMPv2 示例项...

有理想的鱼
2016/03/16
851
0
YMP v2.0.2 发布,轻量级 Java 应用开发框架

本次版本更新主要针对性能优化、BUG修复以及增添了更易于使用的新特性. 新版本已提交至Maven中央库,可以通过以下配置获取各模块依赖: 请将替换为具体模块名,模块详见: The Central Repos...

有理想的鱼
2017/09/11
1.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

.NET Core 3 WPF MVVM框架 Prism系列之命令

原文: .NET Core 3 WPF MVVM框架 Prism系列之命令 本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的命令的用法 一.创建DelegateCommand命令# 我们在上一篇.NET Core 3 WPF MVVM框架 Pr...

osc_4dady4pk
18分钟前
15
0
Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手

原文: Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手 概述 ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行。 它的项目...

osc_3grma05a
19分钟前
20
0
php数组转字符串 加单双引号和逗号

$Arr = array(a,b,c,d,e,f,g) #join$str = " ' " . join("','", array_values($Arr) ) . " ' "; // 使用需要的符号拼接#str_replace$str = " ' ".str_replace( ",","','", impl......

啥都不会的程序员
20分钟前
21
0
性能计数器在.NET Core中的新玩法

原文: 性能计数器在.NET Core中的新玩法 传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于Performan...

osc_dg21zk4i
20分钟前
14
0
【WPF学习】第六十三章 理解WPF中的自定义元素

原文: 【WPF学习】第六十三章 理解WPF中的自定义元素   尽管可在任意WPF项目中编写自定义元素,但通常希望在专门的类库程序集(DLL)中放置自定义元素。这样,可在多个WPF应用程序之间共享自...

osc_5h77wdgp
21分钟前
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部