https://github.com/playframework/playframework

https://github.com/playframework/playframework.com

1.语言部分
1.1.文档中说每个视图视图就是函数,个人以为,从声明的方式来看视图更像是类,因为其中可以定义重用的方法,也能插入别的视图。从调用的方式来看的确很像函数。

2.play特性
2.1.使用SBT编译系统
以前开发bs程序都是由控制台执行

eclipsify with-source=true

否则eclipse不会自动加包,当然了你也可以不用指令手工设置。

2.4.ehcache缓存
play 2自带ehcache,无需编写ehcache.servlet版本有要求等等。

2.8.升级play工程
升级了play版本后(只是2.x版本之间的升级,1.x到2.x升级并不适用),工程中执行play会出现提示信息

Update the Play sbt-plugin version to 2.0.3 (usually in project/plugins.sbt)

你需要

a.修改project/plugins.sbt,把其中的版本号改成最新的版本号
b.执行update命令
c.重新执行eclipse with-source=true


3.表现层部分
3.1.视图是需要编译的
视图是需要编译的,和java文件一样,也是由SBT来编译,然后通过控制器来调用和渲染。和JSP有点像。

3.2.视图的使用需要注意
刚刚接触scala template,在使用视图的语法困惑了一阵子

@main(title="home"){
<h1>hello world</h1>
}


明明main.scala.html里面定义了@title和@content两个参数,怎么这里只使用了一个?而且@content参数是如何传入的?
后来琢磨了一下,总算是弄清楚了,视图的参数传递很灵活,可以和python一样用指定名字传参数title="hme",也可以按照参数顺序来传递,其实上面的代码参数传递应该是这样的

@main(title="home")(content="<h1>hello world</h1>")

下面的几种写法都是正确的

@main(content="<h1>hello world</h1>")(title="home")
@main{home}{<h1>hello world</h1>}

甚至可以写成

@p1={home}
@p2={<h1>hello world</h1>}
@main(title=p1)(body=p2)


3.3.控制器中调用视图的方法
例如视图的名字叫做demo1.scal.html,其中有一个name参数
那么在Controller中,直接用views.html.demo1.render("jim")来打开views/demo1.scala.html视图并渲染,其中的参数和视图中声明的一致。
如果在也挺简单的。

3.7.Scala视图里对XML的处理
视图里也可以直接处理XML,根本不用拼字符串,很方便。

3.8.自带缓存功能
用法特简单
缓存数据:

Cache.set("name", "jim");
String name = Cache.get("name");
Cache.remove("name");


缓存http响应:

@Cached("homepage")
public static Result index(){
  return ok("hello world");
}

缓存视图

@cache.Cace.getOrElse("cache-content", 3600){
i'm cached for an hour

} 3.9.LESS Less是一种动态样式表语言,扩展名是less,里面可以用变量,继承,运算等编程语言中常见的内容编译生成css。play framework2支持less作为样式表 3.9.1.几个要点

a.less必须放在app/assets/stylesheets目录下 b.编译后的样式表会输出到target/scala-x.x.x/resource_managed/main/public/stylesheets目录下,如果你的less文件是demo1.less,那么会生成demo1.css和demo1.min.css。 c.执行play compile不会编译less,只有运行时才会编译(至少play 2.0.2是这样的) d.在*.scala.html中像正常那么引入css就可以了,而不用管css有没有生成 个人感觉less对于需要大量编写css的开发者比较好使,但对于奉行拿来主义的开发者来说,除了能检查css是否有错和生成的css体积较小外,没什么特别的优点。

3.10.twitterbootstrap twitterbootstrap是twitter团队写的一套css框架包,基本上你想做网页外观样式,他们都提供了,你只要设置一下class就可以了,很省事,但是twitterbootstrap并不适合中国国情,因为国内仍然有着大量的ie6用户,twitterbootstrap对ie系列支持的比较糟糕,个人认为,在现阶段最好不要用twitterbootstrap,可以考虑别的一些框架,比如jquery ui,blueprint,960 grid system,yui css framework之类,这些框架对ie支持的不错。 3.11.图片的引用 在css中往往会引用一些图片,比如设置个背景图什么的,像这种情况一定要用相对路径,例如路径如下

public/ public/stylesheets/main.css public/javascripts public/images

图片统一放到images目录下,css中声明如下

 background: url('../images/back_enabled.png')

这样就可以正常访问了。

3.12.样式表/图片/js提供缓存处理
play的服务器是采用Apache Mina网络框架开发的,提供了很多友好的功能,比如自带缓存功能,自动重新载入class。
不过,play服务器是否能用于生产环境还有待进一步观察。

3.13.实现Servlet里Filter的功能
有两种方法

方法1:继承GlobalSettings类,重写onRequest()方法,return super.onRequest(request, actionMethod)即可执行原方法,否则就不执行。
方法2:使用@With也可以实现Filter的功能


3.14.实现Servlet里Listener的功能
继承GlobalSettings类,实现onStart()方法和onStop()方法

4.持久层部分
4.1.Play里的持久层
目前Play提供可用的持久层有三个
第一个是早期提供的Anorm,提供简单的SQL数据访问功能,这个框架功能类似spring的jdbctemplate。
第二个是从Play2.0开始提供的ORM框架EBean,用法和JPA差不多。
第三个是JPA。
说实话,个人认为,持久层框架的选择依据应该是选你最熟悉和最了解的,别追求什么高科技。而且play并没有限制你必须用什么持久框架。
比如我对mybatis情有独钟,个人感觉mybatis做sql优化非常容易,这对于复杂的查询来说特别重要。只是mybatis和play2集成的文章挺少的,我做了一个demo,请参看我的另一篇文章play2+guice+mybatis+ehcache+mmysql范例(java版)j2ee 

5.测试
5.1.单元测试很方便
只要把基于junit的单元测试类都放到test目录下,在控制台运行play test就能自动执行所有测试了,很方便。
play2甚至已经集成了HttpMock功能,用法很简单

public class FakeAppTests {
    @Test
    public void t1(){
       running(fakeApplication(), new Runnable() {
            public void run() {
                Result result = callAction(controllers.routes.ref.Application.index());
                Assert.assertEquals(OK, status(result));
                System.out.println(Helpers.contentAsString(result));
            }
         });
    }

play2的控制台,而对ide要求不好,甚至你用记事本就可以做play开发。
而且调试比较费劲,必须开启调试模式,然后在eclipse远程调试attach9999端口才能调试,而且eclipse控制台里还不显示日志信息,总之就是一个不习惯。其实这是因为play更多的依重单元测试来完成开发工作的,一般的play开发流程是这样的
开发流程主要分三大块

一.编写单元测试->修改routes文件->修改Controller->编写*.scala.html 到了这里,其实程序都还没有运行过一次,代码里面也是有很多错误,eclipse红色的错误一大片,视图模板也没法预览,显示成什么样子都不知道。
二.开始运行单元测试,调试业务功能,调试视图输出,不断的迭代修改,直到测试通过为止。
三.然后再正式运行服务,在浏览器里查看页面显示格式,修改*.scala.html页面模板,修改显示直到符合要求。基本上就是这么个流程,和以前在tomcat下开发是有很大不同的,如果不按照测试驱动的开发思路做play项目的话,只能起到事倍功半的效果。

单元测试程序,这些单元测试程序对于保证你项目的稳定性和强壮性有者至关重要的价值,尤其是大项目重构时,其价值尤其重要。


总结
play 2功能还是很强悍的,非常适合快速开发B/S应用,而且内置了常用的框架和组件,上手挺快,比J2EE简单多了。

相关文章:

  • 2022-12-23
  • 2021-12-21
  • 2021-04-29
  • 2021-12-03
  • 2021-11-06
  • 2022-01-17
  • 2021-08-06
猜你喜欢
  • 2021-07-29
  • 2022-12-23
  • 2021-08-24
  • 2021-05-27
  • 2021-11-19
  • 2022-02-03
  • 2021-09-26
相关资源
相似解决方案