`
xiejuntao
  • 浏览: 8122 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

play笔记

阅读更多

 

注:此为个人学习笔记,内容可能有些杂乱,仅供参考。

以下内容使用 play-1.2.4 版本

1、常用命令

1)、 play  new  < 项目名 >

2)、 play  run   < 项目名 >

3)、 play  eclipsify  < 项目名 >

4)、 play  war  < 项目名 >  -o <war 包名,需加 .war,, 如   webplay.war  --zip

生成webplay.war.war

2、在 eclipse 中调试

Play转换eclipse项目时,在eclipse目录中生成了三个启动配置:

1)、 JPDA:连接到已经启动的Play Server,实现alive调试

2)、webplay :本地运行

3)、 Test:测试

选中它们,右键执行Run As ,即可完成相应的任务。

直接Debug As  执行 webplay 会报错:

Error occurred during initialization of VM

agent library failed to init: jdwp

ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.

需要:

打开webplay.launch, 找到

<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dplay.id= -Dapplication.path  …/>

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n  去掉。

然后Debug As, 即可成功启动调试。附加 Play 源码后,即可调试 Play 本身。

3 play 模式

Play分为开发模式和生产模式两种,而切换的配置在 application.conf 中:

  Application.mode=dev 生产模式请改为 :prod

  主要区别在于开发模式中您无需重启server ,每次请求都会查看是否有文件发生改变,改变即编译,这对于传统 Java EE 开发人员无疑是相当敏捷的。而这种方式同样会导致性能下降,所以生产模式中就不会这样了,而是采用预编译机制。

开发模式要有第一次http 请求,才启动 application

4 controller

controller中的几个作用域 :

    1) session 这儿的 session 只支持您放里面放 String 类型,而不是和传统 JEE 中任何对象都可以放到 session 中。这儿的 session rails 的类似。

    2) flash  跨请求的存储对象 

    3) params   基本相当于 request.getParameters();

    4) renderArgs   渲染到模板的数据 , 上面代码中您看到的 render 里面的就是放到了这个 renderArgs 里面了。还有个 validation 存放验证数据。 

  基类Controller 里定义了很多好用的方法 : 如果想使用 ajax 返回 JSON ,则使用 renderJSON()  play 使用的 json 序列化工具是 gson.jar, 。想返回一个文件流 , 使用 renderBinary(File f,String name) 方法

5、工具包

play.libs.*

6 play session

Play框架认为一边是数据库保存状态,一边是浏览器也可以保存状态,那么还要中间件 MVC 保存 Session 状态干什么呢?

HttpSession有很多问题,虽然可以处理针对某个用户的状态,但是万一用户中途离开怎么办, HttpSession 对资源消耗,以及在可伸缩性方面是有问题的。 Play 框架秉承 share nothing 架构思想,不再像黑客那样破解原本自然正常 Http 模型,然后强行植入状态,无状态架构可以并行同时输出多个页面,提高 Web 性能。

session.put(String name,String value);

String  value = session.get(String name);

P lay session只能保存字符串

“无共享”架构

7、模板

一个基于Groovy 的强大的模板引擎,具有多层继承,定制用户标签的能力, Play 框架认为 JSP & Expression Language 模板机制很好,但是需要太多配置,吸收其模板设计,剔除配置。

8 REST Ful

众所周知的Servlet API  Struts 其实是扭曲的,使用奇怪的 API Http 协议隐藏起来, Play 框架认为一个 Web 应用框架应该给用完整的 直接的对 Http 调用和使用,这其实就是 REST Ful精神。

9、“ /

默认Play 认为“ / ”是很重要的,例如下面这个route

GET /clients Client.index

会匹配/clients 但是不会匹配 /clients/ ,你可以通过在“ / ”后加上一个问号,告诉 Play 你想让那个 route 匹配到后面的 "/" ,例如

GET / clients / ? Clients.index

URI模式不能有任何可选的部分,除了那个 "/" ( 不理解 )

10 package

Route的最后一部分是 Java 调用定义,这部分是由一个 action 方法的全名定义的,并且这个 action 必须是一个控制器类中的静态的公共方法,控制器类必须定义在包 controllers 中且必须是 play.mvc.Controller 的子类。你可以在控制器类之前增加一个 Java 包如果它不是直接定义在 controllers 包中,包 controllers 本身是默认包含的,所以你不需要指定它。

例如:

GET  / admin admin.Dashboard.index

11 R ender渲染页面

默认渲染html 文件

views目录下对应  包名 / 类名 / 方法名 .html

在调用 render  方法之前,你可以使用编程的方式设置响应的格式。例如,为了提供一个媒体类型  media type  为  text/css  的层叠样式表,而是以你可以这样做:

request.format = "css";  

但不会解析对应的文件类型,如设置request.format= jsp ,并不会解析 jsp 文件,而是以文本的形式显示出所有的源码 .

12 Route

1)  定 一个 URL ,其中 id 指定 'home' ,我可以使用静 参数定 另外一个 route

GET     /home         Application.page(id:'home')

GET     /page/{id}     Application.page

page ID 'home' 时,第一个 route 和第二个 route 是等价的,但是,它的优先级要高一些,当你使用 ID 'home'  调用 Application.page 时,它是默认被调用的。

2) 路由优先级

很多路由可以匹配相同的请求,如果有冲突的话,则使用第一个定义

3)长路由配置

去除routes 文件的

# Catch all

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

这路由配置

* /home/{id}                                   jc.JcApplication.bye

匹配

http://127.0.0.1:9000/home/11235

13 controller

业务逻辑代码通常位于模型(model) 层。客户端(比如浏览器)无法直接调用其中的代码,所以模型对象提供的功能,必须作为资源以 URI 方式暴露给外部。

客户端使用HTTP 协议来操作这些资源,从而调用了内部的业务逻辑。但是,这种从资源到模型之间的映射是单向的:我们可以根据需要提供不同粒度的资源,可以虚拟出一些资源,还可以给某些资源起别名 .

1) 使用@As 注解,我们可以指定日期格式。 例如

archives?from=21/12/1980

public static void articlesSince(@As("dd/MM/yyyy") Date from)

14、视图层

Web 开发框架的使用者都习惯于使用某种模板技术来生成  HTML  页面,这些技术包括常见的  JSP ASP  和  PHP  等。 Play  框架也提供了自己的模板技术,可以用来动态的创建  HTML XML JSON  以及其它文本类型的内容。 Play  框架的模板技术使用的是  Groovy  语言。 Groovy  语言的灵活性和简洁性使得  Play  框架的模板简单而且易用。在模板中可以混用静态内容和生成动态内容的各种元素。

${ }对一个表达式进行求值

@{ } @@{ }分别用来调用控制器中动作方法的相对 URL 和绝对 URL

&{ ‘…’ }显示经过 i18n 后的内容

*{ }*注释

%{ }%添加复杂的 Groovy 脚本,可以声明变量和添加语句。

#{ }用来调用 Play 框架或是开发人员自定义的标签

 

#{extends   ‘…’ /} #{doLayout  /} 实现模板之间的继承

15 i18n

zh_cn: 简体中文

zh_hk: 繁体中文 ( 中国香港 )  

zh_tw: 繁体中文 ( 中国台湾地区 )

en-hk: 英语 ( 香港 )

en_us: 英语 ( 美国 )

en_gb: 英语 ( 英国 )

en_ww: 英语 ( 全球 )

ja_jp: 日语 ( 日本 )

ko_kr: 韩文 ( 韩国 )

16 Action

play 中没有 Servlet API  forward  的等价物。每一个HTTP request 只能调用一个 action 。如果我们需要调用另一个,必须通过重定向,让浏览器访问另一个 URL 来访问它。这样的话,浏览器的 URL 始终与被执行的 action 保持一致,实现  Back/Forward/Refresh  的管理就容易多了

17、拦截器 (Interceptions)

一个controller 可以定义多个拦截器方法。拦截器作用于 一个controller 及其所有子类 的所有action 方法上。对于定义一些所有 action 共用的操作时,使用拦截器非常有用 ,这些方法必须为 static  ,但不一定是  public 

@Before

@After

@Finally

@Catch       异常,传递 Throwable 对象

@With        注解在类申明上面,可使用指定的 controller 定义的拦截方法

18 Session Flash scopes

在多个HTTP 请求之间共用数据,可以把它们保存在 Session Flash 域中。保存在 Session 中的数据,对于整个 user session 都可用,而保存在 flash 域中的数据,则仅仅在下一个请求可用。在 play 中, Session Flash 数据并没有保存在服务器端 ,而是通过Cookie 被加入到每一个 HTTP 请求中。所以能保存的数据量非常小 ( 不超过 4KB ),并且 只能保存字符串

cookies都使用了一个密钥进行了加密,所以客户端无法修改 cookie 数据(否则该数据将无效)。 Play session 不是用来当作数据缓存。如果我们需要缓存与 session 相关的某些数据,可以 使用Play 内置的缓存机制 Cache ,并使用  session.getId()  作为 key 来保存。

19、持久化

(1)Play当找到一个或一个以上的类有注解 @javax.persistence.Entity 会自动启动 Hibernate entity manager

JPA.em().createQuery( “” );

(2)事务, play 会默认自动事务管理,以一个 http 请求至响应为单位。当请求失败或响应出错,事务自动回滚。

手动设置事务管理,

JPA.setRollbackOnly()  强制事务回滚

在控制类的方法上加注解

@play.db.jpa.Transactional(readOnly=true)  设置事务为只读

@play.db.jpa.NoTransaction    不使用事务 ,play 将不会从连接池获得连接,这将提高运行速度。

(3)entites 继承 play.db.jpa.Model  Long id 作为主键

   entites继承 play.db.jpa.GenericModel 自已使用 @Id 设置主键

  @GeneratedValue  @GenericGenerator 设置主键生成策略

(4)refresh() 防止实体暗自更新 , ,类似 hibernate 中的 evit(Ojbect)

(5)entites继承自 JPASupport/JPAModel ,没有显式调用 save() 则不会自动保存 ( 不推荐使用 ), 改为继承 GenericModel

P lay描述有误?测试结果,无论继承 Model GenericModel 没有显示调用 save( 没有 update 方法 ) 都不会自动保存或更新

(6)自动生成表结构

继承Model 须显式声明 @Table

继承GenericModel 则只须声明 @Entity

19 play.libs

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

20、使用 memcached

配置application.conf

# Enable memcached if needed. Otherwise a local cache is used.

memcached=enabled

#

# Specify memcached host (default to 127.0.0.1:11211)

memcached.host=127.0.0.1:11211

0
0
分享到:
评论

相关推荐

    play framework 框架个人笔记

    Play Framework 是一个开源的Web应用框架,以Java和Scala为后盾,致力于提供简洁、高效、可测试的开发体验。本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session...

    三星 play camera

    【三星 Play Camera】是三星公司推出的一款相机应用,专为提升手机摄影体验而设计。这款应用可能集成了各种创新功能,比如高级拍摄模式、滤镜、动态照片等,旨在让普通用户也能轻松拍出专业级别的照片。从提供的文件...

    基于Android Studio开发的笔记APP.rar

    最后,打包APK,签名并发布到Google Play或其他分发渠道。 通过以上步骤,我们可以完成一个基础的笔记APP开发。实际项目中,还可能涉及更多高级功能,如搜索、分享、通知等,以及对不同Android版本的兼容性处理。...

    Android悬浮笔记应用

    在Android平台上,开发一款悬浮笔记应用是一...同时,需要注意的是,由于涉及到系统级权限,因此在应用发布时,应确保遵守Google Play的政策,避免被拒绝上架。在开发过程中,不断测试和优化,以提供最稳定的用户体验。

    android 很好的学习笔记

    最后,笔记还会讨论Android应用的发布流程,包括签名、打包APK、进行调试和性能优化,以及上传到Google Play Store的步骤。 总的来说,这份"Android很好的学习笔记"是一个全面且实用的教程,覆盖了Android开发的...

    二维码扫描笔记源代码--简单好用

    - **发布流程**:通过Google Play Console发布应用,遵循其提交指南和合规政策。 总之,这个“二维码扫描笔记源代码”项目涵盖了Android应用开发中的多个核心知识点,从基本的用户界面设计到复杂的功能实现,为...

    PLAY CAMERA

    "PLAY CAMERA"是一款专为三星笔记本用户设计的摄像录制软件,它集拍摄照片和录制视频于一体,同时还提供了分辨率调整等多种功能,旨在优化用户的摄影和录像体验。以下将详细阐述这款软件的相关知识点: 1. **摄像...

    Android个人笔记本

    9. **发布和版本管理**:完成开发后,应用需要打包成APK并签名,然后通过Google Play Store或其他分发渠道发布。版本控制工具,如Git,可以帮助团队协作和追踪代码变更。 10. **性能优化**:最后,开发者需要注意...

    华硕笔记本摄像头驱动

    6. `PNPINST.exe`:可能是Plug and Play(即插即用)安装程序,用于自动识别硬件并安装相应的驱动。 7. `snp2uvc.inf`:驱动安装信息文件,包含了安装驱动时的指导和参数,Windows系统会根据此文件来安装驱动。 8....

    play1的文档资料

    "Play Framework 学习笔记(一):初识Play"和"Play Framework 开发入门"为初学者提供了入门指导,涵盖了框架的基本概念和基本操作。"Play! Framework试用手记"则分享了实际使用过程中的经验和心得。 6. **论坛...

    android第一行代码笔记

    《Android第一行代码笔记》是针对初学者的Android开发指南,涵盖了从基础知识到实际应用的全方位内容。在学习Android开发的过程中,"第一行代码"往往代表着编程旅程的起点,这本笔记将帮助读者逐步理解并掌握这个...

    戴尔笔记本快捷键.pdf

    * Play/Pause:播放或暂停媒体文件 * Stop:停止媒体文件 * Previous Track:上一首媒体文件 * Next Track:下一首媒体文件 * Volume Down:降低音量 * Volume Up:提高音量 * Mute:关闭音量 四、其他快捷键 戴尔...

    android基础笔记

    完成应用开发后,需要进行打包和签名,才能发布到Google Play或其他应用市场。APK是Android应用的安装包,签名是为了确保应用的来源和完整性。 总之,Android基础笔记旨在帮助初学者掌握Android开发的基本技能,...

    关于安卓开发的一些学习笔记

    最后,了解Google Play Store的发布流程和政策,包括签名证书的创建、应用的版本控制以及遵循的隐私合规性要求,将有助于你成功地将应用推向市场。 总的来说,这份笔记包含了从基础理论到实践技巧的广泛内容,适合...

    Windows Media Player SDK学习笔记

    ### Windows Media Player SDK 学习笔记 #### 一、引言 Windows Media Player SDK 是一套由微软提供的开发工具,用于创建基于 Windows Media Player 的应用程序。它允许开发者利用 Windows Media Player 的强大...

    实用英语系列--美国生活英语笔记

    例如,“Let’s play one-on-one.”(咱们一对一吧。) 3. **文化习俗**: - **节日与庆典**:如Mardi Gras(狂欢节)、生日派对等,这些内容帮助读者更好地理解美国的文化传统和社会习俗。 - **美式幽默**:这...

    新东方 徐燕 新概念英语第二册 笔记(1-96)PDF 带索引版

    例如,本课的新词汇包括“private”(私人的)、“conversation”(对话)、“theatre”(剧院)、“seat”(座位)、“play”(剧目)、“loudly”(大声地)、“angry”(生气的)、“attention”(注意力)、...

    源码笔记.rar

    【Java编程语言】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现...通过深入学习和分析"源码笔记",开发者不仅可以提升Java编程技能,还能了解电商系统的设计与实现,为实际项目开发积累宝贵经验。

    javascript笔记

    在示例中,我们创建了一个名为`play`的函数,并通过`new`关键字实例化了一个新的对象`p`,然后给这个对象添加了属性和方法。属性`width`被赋值为300,而方法`autoplay`和`handplay`则分别定义了对应的函数体。 接着...

Global site tag (gtag.js) - Google Analytics