PlayFramework第一个工程

这篇博客详细介绍了如何在Windows环境下通过cmd使用Play Framework创建一个名为helloworld的工程,包括工程目录结构解析、应用运行、编辑程序以及自动化测试的步骤。在运行应用后,通过编辑控制器和视图文件实现交互功能,并进行测试验证。

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

一、打开 cmd ,进入要创建工程的目录下,我这里是:D:\Play学习项目


二、创建一个工程:

执行:play new helloworld        (helloworld是工程名)

到此工程创建成功!!!

看一下工程目录:


app:包含应用核心,分为models,controllers和views目录。.java生活的地方^_^

conf:包含应用的所有配置。application.conf应用主配置.routes定义url路由规则,messages国际化用。

lib: 包含应用依赖的标准.jar文件。

public:包含所有外部可访问的资源:js,css和image。

test:包含所有应用的测试程序。测试程序基于JUnit或Selenium。

注:Play要求所有文件必须是UTF-8编码。


三、运行应用:

执行:play run helloworld

在浏览器中进入:http://localhost:9000


应用的主入口点配置在conf/routes文件中。它定义了应用所有可访问的URL。打开routes文件,会看到第一个route:

GET     /    Application.index

它告诉Play,当/路径收到GET请求后调用Application.indexJava方法。它是controllers.Application.index的缩写,因为controllers包是隐式的附加的。


看一下helloworld/app/controllers/Application.java:

package controllers;

import play.*;
import play.mvc.*;

import java.util.*;

import models.*;

public class Application extends Controller {

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

}
看到Application扩展了play.mvcController类。它提供了所有Controller需要使用的方法,如index动作中使用的render方法。


再看helloworld/app/views/Application/index.html:

    #{extends 'main.html' /}  
    #{set title:'Home' /}  
     
    #{welcome /} 
其中的内容是Play tag,类似JSP taglib.#{welcome/}tag生成了之前看到的欢迎消息。#{extends/}tags告诉Play此模板集成另一个main.html的模板.模板继承可用来创建复杂的web也并重用公共部分。


再看helloworld/app/views/main.html模板:

    <!DOCTYPE html> 
     
    <html> 
        <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'}"> 
            #{get 'moreStyles' /}  
            <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}"> 
            <script src="@{'/public/javascripts/jquery-1.4.2.min.js'}" type="text/javascript" charset="utf-8"></script> 
            #{get 'moreScripts' /}  
        </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动作的方法

既然请求了Application.sayHello(),就要在helloworld/app/controllers/Application.java中创建sayHello():

    package controllers;  
     
    import play.mvc.*;  
     
    public class Application extends Controller {  
     
        public static void index() {  
            render();  
        }  
          
        public static void sayHello(String myName){  
            render(myName);  
        }  
    } 

刷新浏览器:

这时在输入框中输入内容提交,会报错:


因为Play渲染此动作的缺省模板时,没有找到它。我们创建文件helloworld/app/views/Application/sayHello.html:

    #{extends 'main.html' /}  
    #{set title:'Home' /}  
     
    <h1>Hello ${myName ?: 'guest'}!</h1>  
       
    <a href="@{Application.index()}">Back</a> 

这时再在输入框中填写内容提交:


添加编辑框为空的验证:

编辑helloworld/app/controllers/Application.java:

package controllers;

import play.*;
import play.mvc.*;

import java.util.*;

import models.*;
import play.data.validation.*;

public class Application extends Controller {

    public static void index() {
        render();
    }
    /**
     * 记得加上import play.data.validation.*。
     * @Required告诉Play自动检查myName字段是否填写。
     * 如果验证失败,我们加入一条消息到flash scope中并重定向到index动作。
     * flash scope允许在重定向时保持消息。
     */
    public static void sayHello(@Required String myName) {  
        if (validation.hasErrors()) {  
            flash.error("please enter your name!");  
            index();  
        }  
        render(myName);  
    }   

}

编辑helloworld/app/views/Application/index.html显示错误消息:

    #{extends 'main.html' /}  
    #{set title:'Home' /}  
       
    #{if flash.error}  
        <p style="color:#c00">  
            ${flash.error}  
        </p>  
    #{/if}  
     
    <form action="@{Application.sayHello()}" method="GET">  
        <input type="text" name="myName" />   
        <input type="submit" value="Say hello!" />  
    </form> 

输入框为空提交时:


五、自动化测试

在cmd中输入play test helloworld。


打开浏览器,输入http://localhost:9000/@tests启动测试器。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值