文档章节

jodd mvc框架 madvoc 教程(3):Actions 其他特点

理工男海哥
 理工男海哥
发布于 2013/12/27 10:51
字数 1240
阅读 470
收藏 0
点赞 0
评论 1

    在这篇文章中,我们会介绍更多的关于madvoc的action的其他一些特征。

自定义方法注解

        你的许多action方法会被注解上两到三个的@Action注解的值是非常常见的,比如,许多action路径会被映射到GET请求,又有许多映射为 *.do 和POST方法。许多json请求的action会被映射为*.json。所以,当你需要注解一个方法的时候,你必须一次一次的重复着一样的注解。

        幸运的是,madvoc非常聪明。它允许你在不同的默认值上自定义自己的注解。因此,我们不用继承注解,自定义action注解必须包含有相同的默认(@action)节点---即使不是全部。

让我们来为所以的表单创建一个制定一个的注解,这样我就有了扩展名为“.do”同时映射为POST方法:

@Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD})
    public @interface PostAction {

        String value() default "";

        String extension() default "do";

        String alias() default "";

        String method() default "POST";

    }

正如上面所说,没有必要重复定义alias节点,现在,让我们来为一个action方法注解上我们自定义的注解:

@PostAction
    public void someAction() {}

这样等同于以下的代码:

@Action(extension = "do", method = "POST")
    public void someAction() {}

很明显的,自顶一个一个注解可以减少许多重复的代码。

最后,我们MadvocConfig在注册上我们自定义的注解,可以是纯java,也可以是配置文件。

名字替换

        在madvoc的注解中引用一个类的名字或方法的名字是可以的。比如说,当指定一个全路径在一个action方法上面,可以引用默认的扩展,不用再在字符串上给这个方法硬编码。

@MadvocAction
    public class HelloAction {

        @Action("/bonjour-monde.[ext]")
        public void world() {
        }
    }

在这个action路径中,扩展“[ext]”讲会替换madvoc默认的扩展,默认的替换方法如下:

  • [package] - 在包注解(package-level)上替换默认的包;
  • [class] - 在类注解(class-level)上替换默认的类;
  • [method] - 在方法注解(method-level )上替换默认的方法;
  • [ext] - 在方法注解( method-level )上替换默认的扩展名;

action的补充

在默认情况下,如果有一些没有被注册的action路径被请求,madvoc则返回404错误。所有的页面,包括静态的页面,都必须注册它自己的action方法。尤其是一些静态页面,比如说文档等,每个页面都需要一个类和一个返回void的方法。

madvoc提供了一个叫做“supplement actions”的东西来解决了这样的问题,supplement actions是一个action类,它里面有默认的方法,为那些没有注册的,默认后缀的action路径注册了一个action处理器。当没有被注册的路径第一次请求的时候,madvoc会为这个路径注册一个action。但是这个特点必须在madvoc的配置里面打开。

public class MyMadvocConfig extends MadvocConfig {

        public MyMadvocConfig() {
            supplementAction = DefaultActionSupplement.class;
        }
    }

madvoc会为每一个没有被注册的路径(比如:/foo.html)注册上一个增补的action来当做处理器。默认的增补的action都返回void,所以,如果用户访问了/foo.html 则自动直接访问了/foo.jsp。

    注意:使用 supplement actions会有潜在的memory-leak问题。madvoc会默认注册之前所注册过的所有没有被我们注册的路径。一些恶意的用户无限制的请求不存在的不同路径。madvoc则会创建不同的方法来为出来这些路径,虽然每个方法都会在非常小的内存,但是无限制的请求就会导致系统内存消耗完毕。

因为以上的问题,所以在使用supplement actions的时候要非常小心,如果要解决类似的问题,我们可以使用madvoc为我们提供的其他方法 或者 url重写 等技术。

反转action路径映射

默认情况下,madvoc会在action注册的时候解析action的包,类和方法来映射action路径,那是因为在madvoc没有必要在它工作之前就注册所有的action。

madvoc提供反转action映射路径:映射action的路径到action方法。madvoc为每个请求的action路径 尝试着去寻找是否有与之匹配的类和方法。使用这个简单的预定规则,如果有这样的一个类和方法被找到,他们会注册一个方法处理器。

要开启这个功能,必须要设置一下两个地方:

public class MyMadvocConfig extends MadvocConfig {

        public MyMadvocConfig() {
            actionPathMappingEnabled = true;
            setRootPackageOf(IndexAction.class);
        }
    }

一下是ActionPathMapper的action路径映射约定:

这里,html是默认的扩展后缀,‘ext’表示任何非默认的扩展后缀。方法名字“view”和“execute”实际上是在madvoc全局配置里面定义的第一个和第二个默认的action名字。

© 著作权归作者所有

共有 人打赏支持
理工男海哥

理工男海哥

粉丝 819
博文 36
码字总数 35675
作品 5
昌平
其他
加载中

评论(1)

Manfred.Yan
Manfred.Yan
Json post action怎么注释?直接转成java对象,类似Spring 的@RequestBoday?
jodd mvc框架 madvoc 教程(1):Actions 概述

jodd的madvoc是一个使用Coc和注解(annotations)的实用的mvc框架,主要用来简化web应用开发。它有着 使用简单,学习曲线小,容易扩展等特点,同时不用实用额外的xml配置,actions是一些简单...

michaely ⋅ 2013/12/25 ⋅ 1

Jodd 3.3.4 发布,常用 Java 工具包

Jodd 3.3.4 发布,这是一个维护版本,大部分是 bug 修复,也有稍许改动: RemoveSessionFromUrlFilter and JDateTime.isInDayLightTime() were added. HtmlStapler servlet now returns cont......

oschina ⋅ 2012/06/13 ⋅ 0

Jodd 3.5 发布,Java 常用工具包

Jodd = tools + ioc + mvc + db + aop + tx + html < 1.3M 经过两个月的努力,辛酸和喜悦,新版本的Jodd闪亮登场!!这和那些无私的贡献者是分不开的,Jodd因此而更变的更好。希望你能喜欢这...

zqq90 ⋅ 2014/02/22 ⋅ 11

Jodd 3.5.1 发布,Java 常用工具包

Jodd = tools + ioc + mvc + db + aop + tx + html [2014-03-27] 3.5.1 更新记录 【变动】 `DbOom` 中移除了 *AndClose() 等方法,请使用 autoClose() 代替. 【修复】 Improved setPrepared......

zqq90 ⋅ 2014/03/28 ⋅ 10

Jodd 3.6 发布,Java 常用工具包

Jodd = tools + ioc + mvc + db + aop + tx + html + json [2014-09-05] 更新日志 [新增] Json 序列化反序列化模块 [更改] Lagarto 依据规范解析 HTML. [更改] Props 每次取值时解析宏. [更改...

zqq90 ⋅ 2014/09/06 ⋅ 10

Jodd 3.6.7 发行说明,Java 常用工具包

Jodd 3.6.7 是个非常与众不同的版本,虽然主要是 bug 修复,但是 Java 升级到了 Java 7。 新特性: [vtor] Added message to validation annotation. [util] Added method to parse internet...

oschina ⋅ 2015/11/19 ⋅ 10

Jodd MVC 例子

1.jar包 activation-1.1.jar jodd-3.4.3.jar jodd-joy-3.4.3.jar logback-classic-1.0.0.jar logback-core-1.0.0.jar mysql-connector-java-5.1.12-bin.jar simplecaptcha-1.1.1.jar slf4j-......

快慢机 ⋅ 2013/06/03 ⋅ 1

Jodd 3.6.5 发布,Java 常用工具包

Jodd 3.6.5 发布,更新内容如下: [http] now accepts local path on 30x. [http] Added default headers to . [madvoc] Fixed action string in case of proxified classes. [servlet] Res......

oschina ⋅ 2015/03/24 ⋅ 10

jodd mvc框架 madvoc 教程(2):Actions 介绍

action方法定义在action类里面,它用来映射url路径(action path),modvoc 使用命名惯例(CoC)和注解来定义action路径。默认情况下,action的路径映射由包名(package),类(class)和方法...

michaely ⋅ 2013/12/25 ⋅ 0

Jodd 3.6.6 发布,Java 常用工具包

Jodd 3.6.6 发布了,Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架。简单,却很强大! 改进记录包括: FIXED [http] Fixed special case when content-length and chunke...

oschina ⋅ 2015/05/27 ⋅ 4

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 25分钟前 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 44分钟前 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 52分钟前 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

到底会改名吗?微软GVFS 改名之争

微软去年透露了 Git Virtual File System(GVFS)项目,GVFS 是 Git 版本控制系统的一个开源插件,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。该项目公布之初就引发了争...

linux-tao ⋅ 今天 ⋅ 0

笔试题之Java基础部分【简】【二】

1.静态变量和实例变量的区别 在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变...

anlve ⋅ 今天 ⋅ 0

Lombok简单介绍及使用

官网 通过简单注解来精简代码达到消除冗长代码的目的 优点 提高编程效率 使代码更简洁 消除冗长代码 避免修改字段名字时忘记修改方法名 4.idea中安装lombnok pom.xml引入 <dependency> <grou...

to_ln ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部