play framework学习(一)

来源:互联网 发布:网络极客是什么 编辑:程序博客网 时间:2024/06/02 19:27

首先明白一点,play framework采用的是MVC模式,很类似于php框架中的thinkphp


在app/conf/routes中配置的是url路由。

HTTP方滕可以是任何HTTP所支持的有效的方滕。GET,POST,PUT,DELETE,HEAD
如果使用*作为方法,则这个route可以和任何请求的方法相匹配

*       /clients/{id}       Clients.show
这个例子中,{id}是变量,如果请求的url符合/clients/{id} 则调用Clients.show这个方法。

控制器,controller

在 Play 框架中,控制器其实就是一个 Java 类,位于 controllers 包中,继承了父类 play.mvc.Controller。
在这个示例控制器中,每一个被声明为 public static 的方法被称为 Action,通过调用render方法来结束执行并显示一个页面模版

POST请求来自某个表单提交,数据编码方式为:x-www-urlform-encoded.

play框架把GET或者POST提交的参数保存在Map<String,String []>类型的数据中,Map的key就是参数名。


有两中取得参数的方式:            /client?id=123

       一、params.get('id),如果要做类型转化可以是,Long id=params.get('id',Long.class)

                          需要提到一点,java中的基本数据类型都play都可以帮我做转换。日期的话,只有如下几中类型  

                          日期数据(Date)支持以下几种格式的自动转换(需要在conf的application.conf文件中配置):
                              yyyy-MM-dd’T’hh:mm:ss’Z' // ISO8601 + timezone
                             yyyy-MM-dd’T’hh:mm:ss" // ISO8601
                             yyyy-MM-dd
                             yyyyMMdd’T’hhmmss
                             yyyyMMddhhmmss
                             dd'/‘MM’/'yyyy
                             dd-MM-yyyy
                             ddMMyyyy
                             MMddyy
                             MM-dd-yy
                             MM'/‘dd’/'yy

       二、直接在Action中,

public static void show(Long id){//参数名必须是id,得和url中的一样       System.out.println(id);}
如果某个参数有多个值,可以用数组的形式,比如是
public static void show(Long[] id)//也可以是集合。List<Long> id


文件的上传
在 Play 框架中处理文件上传是非常简单的事,一个 multipart/form-data 编码的请求发送到 Play 服务器,Play 框架会自动为该上传文件生成一个 File 对象:

public static void create(String comment, File ttachment) {          String s3Key = S3.post(attachment);          Document doc = new Document(comment, s3Key);   。。。。。。。


POJO 对象的绑定
Play 可自动将模型类(model,数据库有关的阿)与请求参数绑定,绑定的规则是类属性名与参数名一致:
public static void create(Client client ) {      client.save();      show(client);}
例如一个用来创建客户的请求链接如:
?client.name=Zenexity&client.email=contact@zenexity.fr
Play 会自动创建一个 Client 的实例,并将对应的参数赋值给该实例的属性

render方法。执行完Action之后需要页面模版来输出。
模板文件是需要数据来执行的,我们可以通过 renderArgs 方发来向模板输送对象:
public class Clients extends Controller {       public static void show(Long id) {       Client client = Client.findById(id);       renderArgs.put("client", client);//"client"是为这个数据命名。//除此之外,还可以用render(client)的方式传递数据,不过就没法命名了,默认为"client"       render();}
然后在模版中,我们就可以用${params}来取数据。

你可以自己手动指定被用来渲染的模版

render("Clients/showClient.html", id, client);//多个参数哦

重定向:redirect("http://blog.csdn.net/gausszh");



conf/application.conf这个文件要好好看,有很多很NB的运用都在这里配置。

数据库配置方面,可以使用内存数据库、文件数据库、mysql、postgresql

天然就带数据库连接池。还有强大的Hibernate

memcached也有

设置页面缓存时间


JPA Java Persistence API 定义了很多ORM,play 框架用的JPA是很著名的Hibernate

package models; import java.util.*;import javax.persistence.*; import play.db.jpa.*; @Entitypublic class Post extends Model {     public String title;    public Date postedAt;        @Lob    public String content;//lob提示play        @ManyToOne    public User author;//多个Post对应一个author        public Post(User author, String title, String content) {        this.author = author;        this.title = title;        this.content = content;        this.postedAt = new Date();    } }

现在说说play的模版。play的模版使用groovy作为表达式语言

<p>%{name="张晓"+"润";}% ${name[0..2]}</p>
其中,%{ groovy code}%   ${params}。groovy也有形似python的数组切片,name[0..3]从下标开始到下标2,是包含关系。

发送邮件

在app下创建一个notifiers文件夹,必须是play.mvc.Mailer的子类。(用html发送邮件)发送邮件的模版位于views下

//       app/controllers/application.javapackage notifiers;import play.*;import play.mvc.*;import java.util.*;public class sendMail extends Mailer {public static void welcome(String name,String email){setSubject("Welcome %s",name);addRecipient(email);setFrom("gausszh<gauss.zh@gmail.com>");send(name);//类似与controllers中的render,}}
//         app/views/welcome.html<html><body><p>Welcome ${name}</p></body></html>
然后我们在controllers中调用

package controllers;import play.*;import play.mvc.*;import java.util.*;import notifiers.sendMail;//引入邮件定义的那个文件import models.*;public class Application extends Controller {    。。。。。    public static void trySendMail(String name,String email){    sendMail.welcome(name, email);    }}

创建模版tag,位于views/tags/XXX.html