注:此为个人学习笔记,内容可能有些杂乱,仅供参考。
以下内容使用
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
相关推荐
Play Framework 是一个开源的Web应用框架,以Java和Scala为后盾,致力于提供简洁、高效、可测试的开发体验。本文将深入探讨Play Framework的基本概念、常用命令、Eclipse调试方法、模式、控制器、工具包、session...
【三星 Play Camera】是三星公司推出的一款相机应用,专为提升手机摄影体验而设计。这款应用可能集成了各种创新功能,比如高级拍摄模式、滤镜、动态照片等,旨在让普通用户也能轻松拍出专业级别的照片。从提供的文件...
最后,打包APK,签名并发布到Google Play或其他分发渠道。 通过以上步骤,我们可以完成一个基础的笔记APP开发。实际项目中,还可能涉及更多高级功能,如搜索、分享、通知等,以及对不同Android版本的兼容性处理。...
在Android平台上,开发一款悬浮笔记应用是一...同时,需要注意的是,由于涉及到系统级权限,因此在应用发布时,应确保遵守Google Play的政策,避免被拒绝上架。在开发过程中,不断测试和优化,以提供最稳定的用户体验。
最后,笔记还会讨论Android应用的发布流程,包括签名、打包APK、进行调试和性能优化,以及上传到Google Play Store的步骤。 总的来说,这份"Android很好的学习笔记"是一个全面且实用的教程,覆盖了Android开发的...
- **发布流程**:通过Google Play Console发布应用,遵循其提交指南和合规政策。 总之,这个“二维码扫描笔记源代码”项目涵盖了Android应用开发中的多个核心知识点,从基本的用户界面设计到复杂的功能实现,为...
"PLAY CAMERA"是一款专为三星笔记本用户设计的摄像录制软件,它集拍摄照片和录制视频于一体,同时还提供了分辨率调整等多种功能,旨在优化用户的摄影和录像体验。以下将详细阐述这款软件的相关知识点: 1. **摄像...
9. **发布和版本管理**:完成开发后,应用需要打包成APK并签名,然后通过Google Play Store或其他分发渠道发布。版本控制工具,如Git,可以帮助团队协作和追踪代码变更。 10. **性能优化**:最后,开发者需要注意...
6. `PNPINST.exe`:可能是Plug and Play(即插即用)安装程序,用于自动识别硬件并安装相应的驱动。 7. `snp2uvc.inf`:驱动安装信息文件,包含了安装驱动时的指导和参数,Windows系统会根据此文件来安装驱动。 8....
"Play Framework 学习笔记(一):初识Play"和"Play Framework 开发入门"为初学者提供了入门指导,涵盖了框架的基本概念和基本操作。"Play! Framework试用手记"则分享了实际使用过程中的经验和心得。 6. **论坛...
《Android第一行代码笔记》是针对初学者的Android开发指南,涵盖了从基础知识到实际应用的全方位内容。在学习Android开发的过程中,"第一行代码"往往代表着编程旅程的起点,这本笔记将帮助读者逐步理解并掌握这个...
* Play/Pause:播放或暂停媒体文件 * Stop:停止媒体文件 * Previous Track:上一首媒体文件 * Next Track:下一首媒体文件 * Volume Down:降低音量 * Volume Up:提高音量 * Mute:关闭音量 四、其他快捷键 戴尔...
完成应用开发后,需要进行打包和签名,才能发布到Google Play或其他应用市场。APK是Android应用的安装包,签名是为了确保应用的来源和完整性。 总之,Android基础笔记旨在帮助初学者掌握Android开发的基本技能,...
最后,了解Google Play Store的发布流程和政策,包括签名证书的创建、应用的版本控制以及遵循的隐私合规性要求,将有助于你成功地将应用推向市场。 总的来说,这份笔记包含了从基础理论到实践技巧的广泛内容,适合...
### Windows Media Player SDK 学习笔记 #### 一、引言 Windows Media Player SDK 是一套由微软提供的开发工具,用于创建基于 Windows Media Player 的应用程序。它允许开发者利用 Windows Media Player 的强大...
例如,“Let’s play one-on-one.”(咱们一对一吧。) 3. **文化习俗**: - **节日与庆典**:如Mardi Gras(狂欢节)、生日派对等,这些内容帮助读者更好地理解美国的文化传统和社会习俗。 - **美式幽默**:这...
例如,本课的新词汇包括“private”(私人的)、“conversation”(对话)、“theatre”(剧院)、“seat”(座位)、“play”(剧目)、“loudly”(大声地)、“angry”(生气的)、“attention”(注意力)、...
【Java编程语言】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现...通过深入学习和分析"源码笔记",开发者不仅可以提升Java编程技能,还能了解电商系统的设计与实现,为实际项目开发积累宝贵经验。
在示例中,我们创建了一个名为`play`的函数,并通过`new`关键字实例化了一个新的对象`p`,然后给这个对象添加了属性和方法。属性`width`被赋值为300,而方法`autoplay`和`handplay`则分别定义了对应的函数体。 接着...