Argo源码阅读(二):Controller的使用

本文通过分析Argo框架中的HelloController.java示例,揭示了如何使用Controller来处理动态内容。当writer().write()设置页面内容时,对于非静态内容,控制器会捕获表单数据和URL参数,并将它们作为键值对添加到模板模型中。使用Velocity模板如postForm.html展示这些信息。阿argo启动时会扫描所有以Controller结尾的类,这些控制器用于处理不同视图的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以附带的Hello world为例

view/index.html 内容如下

<html>
<head>
    <title>Argo sample page</title>
</head>
<body>
<h2>Samples</h2>
<ul>
    <li><a href="$__beat.servletContext.contextPath/hello/world">根据url获得参数的hello world</a></li>
    <li><a href="$__beat.servletContext.contextPath/1.html">静态文件显示</a></li>
    <li><a href="$__beat.servletContext.contextPath/form.html">区分queryString和form参数</a></li>
    <li><a href="$__beat.servletContext.contextPath/upload-form.html">文件上传展示</a></li>
</ul>
</body>
</html>

当点击第一个链接的时候,跳转到hello/world路径,这是Argo做了什么处理?


找到一个HelloController.java类,内容如下

public class HelloController extends AbstractController {

    @Path("hello/{name}")
    public ActionResult hello(String name) {

        return writer().write("hello %s", name);

    }
}

@Path 注解将url的路径名与方法hello关联起来了

writer().write()则直接设定页面显示的内容。


如果要显示非静态的内容呢?

再看例子postForm.html

    @Path("post.html")
    @POST  // 只处理post的请求
    public ActionResult postForm() {

        BeatContext beat = beat();

        ClientContext client = beat.getClient();

        Preconditions.checkState(Strings.isNullOrEmpty(client.form("company")));
        Preconditions.checkState(Strings.isNullOrEmpty(client.form("address")));

        client.queryString("name");

        Preconditions.checkState(Strings.isNullOrEmpty(client.queryString("name")));
        Preconditions.checkState(Strings.isNullOrEmpty(client.queryString("phone")));
        Preconditions.checkState(Strings.isNullOrEmpty(client.queryString("submit")));


        beat.getModel()
                .add("company", client.queryString("company"))
                .add("address", client.queryString("address"))

                .add("name", client.form("name"))
                .add("phone", client.form("phone"))
                .add("submit", client.form("submit"));

        return view("post"); // resources/views/post.html velocity模板
    }


程序获得表单提交内容以及url参数,然后以<key,value>的形式添加到beat的model中,然后用对应的view/post的velocity模版显示页面。

<h3>queryString parameter</h3>
<ul>
    <li>company: $company</li>
    <li>address: $address</li>
</ul>
<h3>form parameter</h3>
<ul>
    <li>name: $name</li>
    <li>phone: $phone</li>
    <li>submit: $submit</li>
</ul>

$company显示company变量的值。


这些view是用Velocity语言写的,语法可以参考http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html


controller:

Argo启动时扫描Controller,所有Controller必须是Controller结尾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值