[技术分享] ActFramework 入门指南——Controller 与 Action

AppEntry 这个启动类本身就是一个 Controller。 ActFramework 的 Controller 不要求标注任何注解,也不要求继承或实现任何一个类。 只要 Controller 含有 Action,那么它就是一个 Controller 。(这时作者说的,但是我也不知道含有拦截器的算不算Controller,但是问题不大,这个并不影响)

让我们来关注一下 AppEntry 的 home 方法。

@GetActionpublic void home(@DefaultValue("World") @Output String who) {
}

方法不长,但是却是一个非常标准的 Action 。 @GetAction 注解 代表了 这是一个 Get 方法。 同理还有 @PostAction 、 @PutAction 、 @DeleteAction 。 还有一个 @Action 注解,用来定义全部或指定 HTTP 请求方法的路由。 @DefaultValue 代表了 当 who 为 null 时的默认值。 @Output 则代表了这个参数会被带到模板。

用过 Spring 的同学可能可以理解 who 变量具体的含义,以及值来源。 这里简要的解释一下 who 变量的值来源。 在 Action 方法参数内的变量,一般会被匹配请求参数。 如变量名为 who 则会匹配 名为 who 的请求参数。 不信邪的同学可以尝试访问下 http://127.0.0.1:5460/?who=ActFramework 来验证下结果。

当然,参数不仅仅能用String,还可以使用Integer 等等,以及可以使用Java 实体类。 ActFramework 会根据请求头来区分请求内容。表单请求,或是 application/json 又或者是其他什么,一视同仁。 不需要 @RequestBody 。

同时,ActFramework 支持匹配url路径,让我们写一个简单的 Action 。

@GetAction("test/{name}")public String test(String name){    return name;
}

Spring 的同学可能会非常感动,终于不用写烦人的@PathVariable了! 同时 ActFramework 会根据你方法的返回值类型来确定该怎样渲染页面。 如果你的方法是 void 的,ActFramework 则会自动去寻找模版文件。 如果是其他类型,ActFramework 则会选择一个合适的方式将你的返回值渲染出去。 也就是说,我们也不再需要 @ResponseBody 了!

此时,先不要着急点击你的重启按钮,直接访问下 http://127.0.0.1:5460/test/wow 试试! 是不是wow! ActFramework 的 热加载 完全不需要你进行任何操作(虽然我还是会习惯性的点一下重启)。 你只需要编码 然后 查看结果就好啦。

使用 Spring 的同学可能会非常感动,终于不用等一两分钟的重启时间了。 这时候要吐槽一下,IDEA启动 build 项目,加上启动 Tomcat 最后算上 Spring 启动,我的天啊,这个启动时间。 有了Spring Boot 之后稍微改善了一点,项目一大,启动还是得一分多钟,改一点一分钟,改一点一分钟,工作效率就是在这没得。

有些同学可能想说,单单这些,也不全够啊。 有些时候还是需要 Request 和 Response 啊。

别急,你在方法的参数里面写上 H.Request 和 H.Response 就行了。 其实在 Http协议 下,大家都差不多。 这块我就不复制了,建议直接查看文档(在Gitee的,方便国内的同学查看)。

同时 ActFramework 提供了很多非常方便的方法。 如:

 image.png

 大家可以选择 import static act.controller.Controller.Util.*; 或者 Controller extends Controller.Util 来食用。 当然你也可以选择不用。