playframework--helloworld程序编写
本文参考官方http://www.playframework.org/documentation/1.0/firstapp教程,基本上是翻译
在安装完playframework框架后,我们就可以编写一个helloworld程序来看看playframework框架是如何工作的了。
我是在C:盘的当前用户目录下,建立了一个playframework目录。在命令窗口,进入这个目录
在c:usersbaboplayframework目录下输入下面命令,创建项目
- play new helloworld
然后play框架会提示你输入程序的全名称,这里就输入helloworld即可
play new helloworld会在当前目录下,创建一个helloworld目录,用来保存项目的全部文件。
下面运行我们新创建的项目,进入项目的目录helloworld,输入play run
当看到入上图提示,证明项目已经跑在9000端口等我们访问了。让我们打开浏览器输入http://localhost:9000访问下看看
看到上图显示的默认欢迎界面,说明我们的项目已经成功创建。下面我们看看play框架是如何显示出这个页面的
play框架里,你创建项目以后,程序的入口点在 conf/routes 文件。这个文件定义了程序全部可以被访问的URL地址。如果你打开 conf/routes 文件,你会看到第一个‘route’信息就是如下语句
- GET / Application.index
以上语句,告诉play框架,当web服务器收到一个访问 / 路径的的GET请求,就调用Application.index的java方法。实际上Application.index方法是controllers.Application.index的简写,因为controllers package 已经被import进来。
一个play框架程序的每个URL都会有入口点,我们叫这些方法Action。定义这些方法的类,我们叫做 'controllers'。
下面我们看看 controllers.Application controller。 打开helloworld/app/controllers/Application.java 文件:
- package controllers;
- import play.mvc.*;
- public class Application extends Controller {
- public static void index() {
- render();
- }
- }
我们可以看到Application的父类是 play.mvc.Controller 类。这个类为controllers提供了很多有用的方法, 像render() 方法,我们用在index action里。
这个index action 被定义为一个 'public static void' 方法. action方法是static的, 因为controller类从来都不会有实例. 总是返回void类型.
默认的index action 很简单: 它调用render() 方法告诉Play框架去返回一个模板页面.用一个模板生成http响应是最常见的方法(但不是就这一个种方法)。
模板是在 /app/views 目录下的一个简单的text文件. 因为我们没有指定一个模板, 所以这个action将用一个默认的模板: Application/index.html
让我们看下模板文件的内容,打开helloworld/app/views/Application/index.html 文件:
- #{extends 'main.html' /}
- #{set title:'Home' /}
- #{welcome /}
模板的内容看起来很简洁。实际上你看到的全是Play标签。它常接近JSP标签。上面的 #{welcome /}标签,就是生成我们在浏览器看到的默认欢迎页面。
这个#{extends /} 标签告诉Play框架这个模板继承于另外一个叫 main.html的模板文件。模板继承是一个很棒的概念,在用于创建复杂网页的共用部分重用上。
打开 helloworld/app/views/main.html 模板:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>#{get 'title' /}</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <link rel="stylesheet" type="text/css" media="screen"
- href="@{'/public/stylesheets/main.css'}" />
- <link rel="shortcut icon" type="image/png"
- href="@{'/public/images/favicon.png'}" />
- </head>
- <body>
- #{doLayout /}
- </body>
- </html>
看到#{doLayout /} 标签了吧,它就是Application/index.html 文件内容被插入的位置
创建一个表单
下面我们将从一个可以输入我们名字的表单来开始写我们的程序。
编辑 helloworld/app/views/Application/index.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>
我们使用@{...} 符号让Play框架自动生成可以调用Application.sayHello action的URL。现在,刷新下我们的浏览器。
我们得到了一个错误,因为我们引用的 Application.sayHello action不存在。让我们在helloworld/app/controllers/Application.java文件里创建它。
- package controllers;
- import play.mvc.*;
- public class Application extends Controller {
- public static void index() {
- render();
- }
- public static void sayHello(String myName) {
- render(myName);
- }
- }
我们在action方法里声明了myName参数,它将被自动填充上来自表单提交的HTTP myName 参数。
现在我们在访问http://localhost:9000显示如下
在文本框输入你的名字,然后提交,你会发现一个新的错误。
这个错误显而易见,Play框架调用sayHello action方法的默认模板,但是这个模板不存在。让我们创建helloworld/app/views/Application/sayHello.html文件
- #{extends 'main.html' /}
- #{set title:'Home' /}
- <h1>Hello ${myName ?: 'guest'}!</h1>
- <a href="@{Application.index()}">Back to form</a>
然后刷新浏览器页面,显示如下
我们看到了sayHello.html文件里使用了groovy的'?:'操作符。当我们myName没有没有被填充的时候,它默认用'guest'填充myName。
到这里,我们的HelloWorld程序已经可以正常运行了。但是我们还有几个问题需要解决。
如何显示更好的URL,这个对于SEO还是比较重要的。
如何自定义LayOut
如何对输入的字符进行验证
如何自动测试。
后面我们慢慢实现。


bo-blog 2.1.
哀悼日网站和bo-blo
