play框架
最常用的命令:
首先将play加入环境变量。
进入开发目录后再执行这些方法
play new projectname
play run projectname
ctrl + c 结束
play eclipsify projectname
(1)热启动,修改代码、编译代码直接进行,开发时不需要重启中间件
(2)MVC映射鲜明,易处理
(3)单元测试包含两个、一个是后台的、一个是前端的。
(4)嵌入了JPA,查询语法可以这么写
public void messages(int page) {
User connectedUser = User.find("byEmail", connected());
List<Message> messages = Message.find("user = ? and read = false order by date desc",
connectedUser).from(page * 10).fetch(10);
render(connectedUser, messages);
}
(5)Play模板使用的表达式语言是Groovy,它和Java语法一致
app 存放应用本身,包括java文件和html文件
conf 存放配置文件
lib 包含jar包
public 存放一些静态文件、例如图片、js和css文件
test 存放测试文件
(6)
路由过滤需要用正则表达式,传参数也可以用正则表达式
(7)执行Action前后可以添加逻辑方法,叫做拦截器:@before、@after、@Finally、@With(Secure.class)
方法不能写public ,但必须是 static,可以用@Before(unless="login")过滤,父类加了拦截器,那么所有的子类也都加了拦截器。
(8)返回前端可以是各种数据类型,名称默认一一对应。
(9)重定向页面
Client client = Client.findById(id);
render("Clients/showClient.html", id, client);
redirect("http://www.zenexity.fr");
Action链
public class Clients extends Controller {
public static void show(Long id) {
Client client = Client.findById(id);
render(client);
}
public static void create(String name) {
Client client = new Client(name);
client.save();
show(client.id);
}
}
GET /clients/{id} Clients.show
POST /clients Clients.create
(10)
会话和闪屏
(11)
定义标签
Play 框架自带很多的标签,但你可以自己创建一些,为了创建标签,我们必须在views目录下创建名为 tags的子目录,例如我们创建一个 booklist.html 文件,存放在 views/tags 目录下,booklist.html 的代码如下:
<ul>
#{list items:_items, as:'book'}
%{
bookTitle = book.title.toUpperCase();
}%
<li>${bookTitle}</li>
#{/list}
</ul>
使用 '_' 来获取参数,本例中是 _items,有了这个自定义的tag,我们帱可以帆上面那个模板修改为:
#{extends 'main.html' /}
#{set title:'Home' /}
I've some books for your :
#{booklist items:books /}
帽量利用参数来使得 tag 更加灵活。
(12)JQuery和jsAction
jsAction标签返回一个Javascript函数,它基于服务端的action构建了一个URL,溡有参数,它不完成Ajax请湂,这些需要手动的使用返回的URL完成。让我们看个例子。
bc. GET /hotels/list Hotels.list
现在你可以在客户端导入这个route
bc. <script type="text/javascript">
var listAction = #{jsAction @list(':search', ':size', ':page') /}
$('#result').load(listAction({search: 'x', size: '10', page: '1'}),
function() {
$('#content').css('visibility', 'visible')
})
</script>
在这个例子中我们从默认的应用控制器中请求list方法,我们传了3个参数,search,size和page,请求的结果被保存在了listAction变量中,现在我们使用jQuery的load方法发
出则个请求(一个HTTP GET请求)。实际上,发送的是下面的这个请求。
bc. GET /hotels/list?search=x&size=10&page=1
请求返回的是HTML数据。但是也可以返回JSON数据或XML数据,然后让JQuery解释这些数据,在你的控制器中,使用恰当的render方法即可。请参考jQuery的文档去获得更多的信息。
需要注意的是我们还可以使用POST方法,那么相应的jQuery方法应该被改为
:
bc. $.post(listAction, function(data) {
$('.result').html(data);
});
(13)分布式缓存,必须配置memcached,要么自己配置缓存服务器。如果你不配置memcached,Play会使用独立的缓存,帆数据存放在JVM的堆中。帆缓存存放在JVM的应用违反了Play的“无共享”假定:你不能在多个服务器上运行你的应用,期望这些应用的行为保持一致。
了解缓存的特点很重要:当你把数据放进缓存里的时候,你不能期望数据永远保持在那里。实际上,你不应该期望。缓存很快,但是数据会失效,而且缓存通常只存在在内存里(如果没有持久化备份的话)。所以使用缓存最好的办法是在你不需要它的时候清空它。
bc. public static void allProducts() {
List<Product> products = Cache.get("products", List.class);
if(products == null) {
products = Product.findAll();
Cache.set("products", products, "30mn");
}
render(products);
}
缓存API
缓存API是由类play.cache.Cache提供的但你需要激活memcached的实现时,修改你的application.conf文件。
**application.conf**:
bc. memcached=enabled
memcached.host=127.0.0.1:11211
你可以连接到一个分布式的缓存系统中去定义多个地址
bc. memcached=enabled
memcached.1.host=127.0.0.1:11211
memcached.2.host=127.0.0.1:11212
bc. Cache.put(session.getId(), products);
(14)play发邮件
bc. Mail.send("sender@zenexity.fr","recipient@zenexity.fr",
"Subject","Message");
(15)自带的中间件性能比tomcat慢一倍。
最常用的命令:
首先将play加入环境变量。
进入开发目录后再执行这些方法
play new projectname
play run projectname
ctrl + c 结束
play eclipsify projectname
(1)热启动,修改代码、编译代码直接进行,开发时不需要重启中间件
(2)MVC映射鲜明,易处理
(3)单元测试包含两个、一个是后台的、一个是前端的。
(4)嵌入了JPA,查询语法可以这么写
public void messages(int page) {
User connectedUser = User.find("byEmail", connected());
List<Message> messages = Message.find("user = ? and read = false order by date desc",
connectedUser).from(page * 10).fetch(10);
render(connectedUser, messages);
}
(5)Play模板使用的表达式语言是Groovy,它和Java语法一致
app 存放应用本身,包括java文件和html文件
conf 存放配置文件
lib 包含jar包
public 存放一些静态文件、例如图片、js和css文件
test 存放测试文件
(6)
路由过滤需要用正则表达式,传参数也可以用正则表达式
(7)执行Action前后可以添加逻辑方法,叫做拦截器:@before、@after、@Finally、@With(Secure.class)
方法不能写public ,但必须是 static,可以用@Before(unless="login")过滤,父类加了拦截器,那么所有的子类也都加了拦截器。
(8)返回前端可以是各种数据类型,名称默认一一对应。
(9)重定向页面
Client client = Client.findById(id);
render("Clients/showClient.html", id, client);
redirect("http://www.zenexity.fr");
Action链
public class Clients extends Controller {
public static void show(Long id) {
Client client = Client.findById(id);
render(client);
}
public static void create(String name) {
Client client = new Client(name);
client.save();
show(client.id);
}
}
GET /clients/{id} Clients.show
POST /clients Clients.create
(10)
会话和闪屏
(11)
定义标签
Play 框架自带很多的标签,但你可以自己创建一些,为了创建标签,我们必须在views目录下创建名为 tags的子目录,例如我们创建一个 booklist.html 文件,存放在 views/tags 目录下,booklist.html 的代码如下:
<ul>
#{list items:_items, as:'book'}
%{
bookTitle = book.title.toUpperCase();
}%
<li>${bookTitle}</li>
#{/list}
</ul>
使用 '_' 来获取参数,本例中是 _items,有了这个自定义的tag,我们帱可以帆上面那个模板修改为:
#{extends 'main.html' /}
#{set title:'Home' /}
I've some books for your :
#{booklist items:books /}
帽量利用参数来使得 tag 更加灵活。
(12)JQuery和jsAction
jsAction标签返回一个Javascript函数,它基于服务端的action构建了一个URL,溡有参数,它不完成Ajax请湂,这些需要手动的使用返回的URL完成。让我们看个例子。
bc. GET /hotels/list Hotels.list
现在你可以在客户端导入这个route
bc. <script type="text/javascript">
var listAction = #{jsAction @list(':search', ':size', ':page') /}
$('#result').load(listAction({search: 'x', size: '10', page: '1'}),
function() {
$('#content').css('visibility', 'visible')
})
</script>
在这个例子中我们从默认的应用控制器中请求list方法,我们传了3个参数,search,size和page,请求的结果被保存在了listAction变量中,现在我们使用jQuery的load方法发
出则个请求(一个HTTP GET请求)。实际上,发送的是下面的这个请求。
bc. GET /hotels/list?search=x&size=10&page=1
请求返回的是HTML数据。但是也可以返回JSON数据或XML数据,然后让JQuery解释这些数据,在你的控制器中,使用恰当的render方法即可。请参考jQuery的文档去获得更多的信息。
需要注意的是我们还可以使用POST方法,那么相应的jQuery方法应该被改为
:
bc. $.post(listAction, function(data) {
$('.result').html(data);
});
(13)分布式缓存,必须配置memcached,要么自己配置缓存服务器。如果你不配置memcached,Play会使用独立的缓存,帆数据存放在JVM的堆中。帆缓存存放在JVM的应用违反了Play的“无共享”假定:你不能在多个服务器上运行你的应用,期望这些应用的行为保持一致。
了解缓存的特点很重要:当你把数据放进缓存里的时候,你不能期望数据永远保持在那里。实际上,你不应该期望。缓存很快,但是数据会失效,而且缓存通常只存在在内存里(如果没有持久化备份的话)。所以使用缓存最好的办法是在你不需要它的时候清空它。
bc. public static void allProducts() {
List<Product> products = Cache.get("products", List.class);
if(products == null) {
products = Product.findAll();
Cache.set("products", products, "30mn");
}
render(products);
}
缓存API
缓存API是由类play.cache.Cache提供的但你需要激活memcached的实现时,修改你的application.conf文件。
**application.conf**:
bc. memcached=enabled
memcached.host=127.0.0.1:11211
你可以连接到一个分布式的缓存系统中去定义多个地址
bc. memcached=enabled
memcached.1.host=127.0.0.1:11211
memcached.2.host=127.0.0.1:11212
bc. Cache.put(session.getId(), products);
(14)play发邮件
bc. Mail.send("sender@zenexity.fr","recipient@zenexity.fr",
"Subject","Message");
(15)自带的中间件性能比tomcat慢一倍。