二. play开发Hello World

这一节, 我们利用Play框架一步步开发一个Hello world应用。
首先,请保证你的机器正确安装配置了play框架,并且有eclipse。

1.项目创建

play new helloworld 

成功执行后,在执行:

play eclipsify helloworld

成功后,导入到eclipse中,目录结构如下图:
这里写图片描述
该目录包含以下几个重要部分:

  1. app/目录:包含了应用的核心部分,默认分为models,controllers,views三个子目录,当然也能够包含其他Java包。app各个子目录中存放的是*.java源文件以及页面模版文件。
  2. conf/目录:包含了应用的所有配置文件,特别是主配置文件application.conf,定义路由规则的配置文件routes和用于国际化配置的文件messages。
  3. lib/目录:包含了所有可选的标准Java类库(*.jar)。
  4. public/目录:包含了所有公用资源,主要有javascripts,stylesheets和images三个子目录。
  5. test/目录:包含了所有的应用测试,框架集成了JUnit和Selenium测试工具。

2. 运行项目

回到命令行,进入helloworld目录,然后输入:

play run

play run命令运行后,Play开始加载应用并通过9000端口开放Web服务,在浏览器中打开http://localhost:9000就能查看刚发布的helloworld应用。如下图:
这里写图片描述
我们看看这个新的应用是如何显示这个页面的。Play应用的主入口conf/routes文件,该文件定义了所有可访问的URL。打开默认生成的conf/routes路由文件,可以看到:

GET     /             Application.index

当Web服务器接收到客户端以GET方式请求根路径时,会调用Application.index方法。Application.index其实是controllers.Application.index的缩略写法,因为controllers包是被默认引入的。
Play应用拥有多个入口点,每个入口点对应一个URL。对应的Java方法称之为Action,Action定义在特殊的类中,称之为控制器(Controller)。查看controller.Application,打开helloworld/app/controllers/Application.java源文件:

public class Application extends Controller {

    public static void index() {
        render();
    }

}

Application控制器继承于play.mvc.Controller。
index()方法(即Action方法)被声明为public static void,而且Play中所有这些Action方法都必须这样定义。
默认的index()方法很简单,仅仅调用render()方法让框架使用HTML模板进行渲染。模板是简单的文本文件,保存在app/views/目录下,由于render()方法中没有指定渲染的目标模板,所以框架默认使用与Action同名的HTML模板文件渲染(上例中为:Application/index.html)。
再来看下模板文件,打开helloworld/app/views/Application/index.html文件:

#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}

模板内容看起来非常简洁,只有少量的Play标签。#{welcome /}标签生成了在浏览器中看到的欢迎信息。#{extends /}标签告诉Play此模板是从另外的模板(main.html)继承而来。

2. 创建表单

编写helloworld/app/views/Application/sayHello.html文件,为模板添加表单功能,用户可以在表单中输入名字:

#{extends 'main.html' /}
#{set title:'Home' /}

<form action="@{Application.sayHello()}" method="GET">
    <input type="text" name="myName" /> 
    <input type="submit" value="Say hello!" />
</form> 

form表单中使用@{…}标签请求Play自动生成URL,以便调用Application.sayHello()方法。但是我们的sayHello(),还没有写,返回Application类,完成此方法。

public class Application extends Controller {

    public static void index() {
        render();
    }

    public static void sayHello(String myName) {
        render(myName);
    }

}

再编写sayHello.html模板:

扫描二维码关注公众号,回复: 1903242 查看本文章
#{extends 'main.html'/}
#{set title:'Home'/}
<h1>Hello ${myName ?:'游客'}!</h1>
<a href="@{Application.index()}">返回</a>

3. 修改路由配置

看一下我们的请求地址:
http://localhost:9000/application/sayhello?myName=werw
这样的URL看起来并不简洁。这是因为Play使用了catch all默认路由规则:

*    /{controller}/{action}     {controller}.{action}

那么,我们修改一下:

GET     /hello          Application.sayHello

共有三列参数,第一个GET, 表示请求的方法,一般不是get就是post。第二个/hello,表示请求的地址,这个可以自定义。第三个Application.sayHello,表示请求地址对应的java方法。开发者可以自定义。
ok, 简单的hello world项目开发完成了。

猜你喜欢

转载自blog.csdn.net/maodou95838/article/details/53008502