文档章节

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

理工男海哥
 理工男海哥
发布于 2013/12/27 10:51
字数 1240
阅读 478
收藏 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名字。

© 著作权归作者所有

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

理工男海哥

粉丝 864
博文 37
码字总数 36137
作品 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.5 发布,Java 常用工具包

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

zqq90
2014/02/22
2.6K
11
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
657
0
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
jodd mvc框架 madvoc 教程(2):Actions 介绍

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

理工男海哥
2013/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PHP生成CSV之内部换行

当我们使用PHP将采集到的文件内容保存到csv文件时,往往需要将采集内容进行二次过滤处理才能得到需要的内容。比如网页中的换行符,空格符等等。 对于空格等处理起来都比较简单,这里我们单独...

豆花饭烧土豆
今天
1
0
使用 mjml 生成 thymeleaf 邮件框架模板

发邮件算是系统开发的一个基本需求了,不过搞邮件模板实在是件恶心事,估计搞过的同仁都有体会。 得支持多种客户端 支持响应式 疼彻心扉的 outlook 多数客户端只支持 inline 形式的 css 布局...

郁也风
今天
5
0
让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字

让哲学照亮我们的人生——读《医务工作者需要学点哲学》有感2600字: 作者:孙冬梅;以前读韩国前总统朴槿惠的著作《绝望锻炼了我》时,里面有一句话令我印象深刻,她说“在我最困难的时期,...

原创小博客
今天
4
0
JAVA-四元数类

public class Quaternion { private final double x0, x1, x2, x3; // 四元数构造函数 public Quaternion(double x0, double x1, double x2, double x3) { this.x0 = ......

Pulsar-V
今天
17
0
Xshell利用Xftp传输文件,使用pure-ftpd搭建ftp服务

Xftp传输文件 如果已经通过Xshell登录到服务器,此时可以使用快捷键ctrl+alt+f 打开Xftp并展示Xshell当前的目录,之后直接拖拽传输文件即可。 pure-ftpd搭建ftp服务 pure-ftpd要比vsftp简单,...

野雪球
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部