文档章节

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

理工男海哥
 理工男海哥
发布于 2013/12/27 10:51
字数 1240
阅读 471
收藏 0

    在这篇文章中,我们会介绍更多的关于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名字。

© 著作权归作者所有

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

理工男海哥

粉丝 830
博文 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是一些简单...

理工男海哥
2013/12/25
0
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
592
0
Jodd 3.5 发布,Java 常用工具包

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

zqq90
2014/02/22
2.6K
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
1K
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
3.1K
10

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
21分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
23分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
24分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部