Play

Play框架拾遗之一:HTTP路由

爷,独闯天下 提交于 2019-12-10 08:43:59
这系列五篇文章,是我在涮www.playframework.cn的读摘,记录了一下重要能用得着,但是又不太熟悉的内容,根据层次划分了五章。 1、路由语法 Play 支持HTTP中规定的GET/POST/PUT/DELETE/HEAD五个方法,同时也支持WebSocket的调用,如需要匹配多个方法可以用 * ,* 表示接受所有请求方法: * /clients/{id} Clients.show URI也支持多个动态部分,如: /clients/{id}/accounts/{accountId} URI支持正则表达式,如: /clients/{<[0-9]+>id} #只允许接受id为数字的值 /clients/{<[a-z]{4,10}>id} #id是长度为4到10字符的小写单词 在URL中可以指定静态参数,如 GET /pages/home Application.page(id:'home') GET /pages/{id} Application.page //当id = home时,两者配置等价,但是根据优先级,会选前者 2、提供静态资源 Play可以开放指定目录,存放静态资源。如: GET /public/ staticDir:public 也可以开放文件: GET /home staticFile:/public/html/index.html 3、逆向生成URL

PlayScala 2.5.x

北慕城南 提交于 2019-12-06 10:51:15
1. 为什么要关闭X-Forwarded-For解析? 某些用户可能会使用透明代理访问你的网站,透明代理在转发请求的时候会通过X-Forwarded-For请求头带上真实的请求IP地址,默认情况下,Play会解析这个请求头并赋值给request.remoteAddress,进而导致在Action中通过request.remoteAddress获取到的IP地址是一个内网地址,例如192.168.1.2。这些内网地址对地域统计来说没有任何意义,所以索性就关闭X-Forwarded-For解析,直接获取代理服务器地址。 2. 如何关闭X-Forwarded-For解析? 很简单,只需要在application.conf配置文件中增加一行配置即可关闭所有X-Forwarded-For解析. play.http.forwarded.trustedProxies = [] 3. 如何启用X-Forwarded-For解析? 如果使用Nginx做反向代理服务器,修改/etc/nginx/nginx.conf,告诉Nginx添加相应的请求头: http { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For

PlayScala 2.5.x

时间秒杀一切 提交于 2019-12-06 10:29:56
通过routes文件定义 GET /favicon.ico controllers.Assets.at(path="/public", file="favicon.ico") GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) 通过Assets生成的action访问 controllers.Assets.versioned(path="/public", file="html/index.html")(request) controllers.Assets.at(path="/public", file="html/index.html")(request) 直接生成File Result Ok.sendFile(new File("public/html/index.html")).as("text/html; charset=UTF-8") Ok.sendPath(Paths.get("public/html/index.html")).as("text/html; charset=UTF-8") 来源: oschina 链接: https://my.oschina.net/u/659771/blog/758539

Play Framework

谁说我不能喝 提交于 2019-12-06 02:15:51
接口定义: 频道列表: 接口名称:channelList 参数说明: 名称 类型 是否必选 说明 offset int 是 当前游标偏移量 count int 否 请求总数,默认为10 请求实例 : { "client": { "height": 1280, "width": 720 }, "data": { "offset": 1, "count": 50 }, "token": "" } 返回实例 : { "service": "channels", "state": { "tips": null, "code": 200, "msg": "OK" }, "data": { "content": [ { "id": 98, "cid": "T1370583240249", "cname": "原创", "subnum": "9.7万", "extra": null }, { "id": 99, "cid": "T1348649145984", "cname": "NBA", "subnum": "3.1万", "extra": null }, { "id": 100, "cid": "T1348647909107", "cname": "头条", "subnum": "3.2万", "extra": null }, { "id": 101, "cid":

PlayScala 2.5.x

偶尔善良 提交于 2019-12-05 14:56:42
1. Filter简介 Filter是Play基于责任链模式(Chain of Responsibility)实现的过滤器,利用Filter可以过滤所有的请求和响应。Play的Filter实现非常灵活,你可以在Filter中修改请求和响应,或终止Filter链的传递,直接返回响应。Filter常用于以下几种场景: 打印请求日志 统计请求信息 启用Gzip压缩 添加安全响应头 实现全局缓存 Play中实现的Filter API有两个,分别是EssentialFilter和Filter。其中EssentialFilter是底层API,功能更加强大,而Filter是基于EssentialFilter实现的用于简化开发的类,主要目的简化接口实现,隐藏Request Body的处理。本文的示例均使用底层的EssentialFilter实现。 2. Filters vs Action Composition vs Request Handler 1) router调用次序不同 Filters和Action Composition发生在router调用之后,二者无法改变Request Path,但是仍然可以修改Request Headers和Body;Request Handler发生在router调用之前,可以通过修改Request Path将请求重定向到特定的Action。 2) 关注点不同

从Spring + Ejb + Struts2 迁移到Play 1.x 框架 之一

穿精又带淫゛_ 提交于 2019-12-05 03:48:37
原来项目比较古老,前台是用delphi,后台有用Ejb做……这货已经很少有人见过了……,现在公司主要项目都转到play上,所以这个项目也重构。 第一阶段是将SSE 迁移到play,尽量不改动代码,只要能运行即可。 需求就是这样,要做的工作不少,因为play是类Rails的框架,与传统的SSH2不在一条线上。 大致步骤如下: 第一步,去掉多余的注解,包括spring的,Struts2的,EJB的。 第二步,将原来用spring的注入的对象new出来。 第三步,将play的请求转发到原来action层。 前两步这里不讨论,重点在第三步。 在请求-响应的实现模式上,play属于参数-返回模式,而struts2属于Pojo模式。前者将请求参数封装在响应方法的参数列表中,后者将请求封装在响应类的类变量中。原始http请求数据在play与struts2中传输就是一个大问题。因为我们不能用play框架自动地将请求表单参数反序列化成对象。 如: student.id=1&student.name=zhangshan&student.friends[0].id=2&student.friends[0].name=lisi 一般转换工作都是MVC框架帮我们做的,如果没有框架帮忙,会比较麻烦,我原本打算用ognl做这个工作的,但是后来发现有ognl不能初始化数组,导致数组越位问题,所以就放弃了。 针对

Play2 + ReactiveMongo 实现一个活动报名应用

匆匆过客 提交于 2019-12-03 15:40:35
Play 2: https://playframework.com ReactiveMongo: http://reactivemongo.org 代码在: http://git.oschina.net/socialcredits/social-credits-activity-service 公司要做一些活动,需要一个线上的活动报名应用。想着前几天刚好看了下 ReactiveMongo ,觉得这个小应用正好练练手。 这个活动应用的功能非常简单:用户在线填写表单,提交表单,后台存储数据并向指定的专员发送邮箱通知。 Play 项目 整个项目目录结构如下: ├── app │ ├── controllers │ │ └── inapi │ ├── utils │ └── views │ └── activity ├── conf ├── data │ └── src │ └── main ├── platform │ └── src │ └── main ├── project ├── static │ └── src │ └── site └── util └── src ├── main app 、 conf 都是 Play 的标准目录,分别放置代码文件和项目配置文件。 app.views 包下的是Play的模板页面文件。 static 是用于放置前端源文件的,包括: js 、

Joda-time学习笔记

 ̄綄美尐妖づ 提交于 2019-12-02 21:26:58
一、joda的优点展示 joda-time能够便捷地格式化时间输出、设定时间、加减时间、计算时间差值。跟JDK的Date/Calender相比一试便知,每个测试中上半部分是用jdk操作,下半部是用joda-time操作。最后一个我想……实在不想用jdk来实现: public class JodaTimeTest { @Test public void testPrintDate(){ Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); String dateText = format.format(date); Assert.assertEquals("2014-11-13", dateText); DateTime dateTime = new DateTime(); dateText = dateTime.toString("yyyy-MM-dd"); Assert.assertEquals("2014-11-13", dateText); } @Test public void testAddDate(){ Calendar calendar = Calendar.getInstance(); calendar.set(2008, Calendar

PlayFramework 2.x 技巧-远程调试

妖精的绣舞 提交于 2019-11-30 11:22:55
1. 测试环境 Eclipse for JavaEE 1.5.0, Play 2.0.4 2. 创建测试项目 1)play new test_play 2) 切换当前目录到test_play, 执行play eclipsify,并将项目导入Eclipse, 3) 在controllers.Application.index()方法中添加一个临时变量,一会在Eclipse的Debug视图中查看这个变量的值, 4)在浏览器中访问应用, 2. 在调试模式下启动test_play项目 1) 在开发模式下启动项目 上图中第2行信息指示,远程调试功能成功开启,连接端口号为9999。 关于Play调试功能的实现方法,请参考JPDA相关知识。 当然,也可以在产品模式下开启调试功能,执行命令如下: play debug start -Xms1024M -Xmx1024M -server start 命令后面可以直接跟上java命令参数。 3. 利用Eclipse进行远程调试 1)在Eclipse中右击test_play项目,依次选择Debug As > Debug Configurations..., 2) 在弹出窗口中,右击Remote Java Application,选择New, 3)填写远程调试的连接信息,Host填写localhost, Port填写9999 4

Scala 的学习笔记系列(持续更新中)

眉间皱痕 提交于 2019-11-29 20:05:04
最近学习 Scala,因它是灵活的函数式编程,还有就是能为 PlayFramework 2.0 服务,看的是 《Programming in Scala》 那本书,并记下自己认为值得记录的东西,列举 Scala 用元组/列表类型实现多返回值的函数 Scala 无参数方法和统一访问原则 Scala 的 apply 和 update 方法的应用 Scala 特质(trait) 的 super 方法调用是动态绑定的 Scala 的 yield 例子 (for 循环和 yield 的例子) Scala 中 ensuring 方法的使用说明 Scala 2.10.0 新特性之使用隐式类进行类型隐式转换 Scala 2.10.0 新特性之动态属性、方法 Scala 2.10.0 新特性之字符串插值 使用 sbt 的 np 插件自动创建目录结构和 build.sbt 文件 关于 PlayFramework 2.0 的应用请参考我的另一个系列: Play 2.0 中文资料--翻译附注解(持续更新中) 来源: oschina 链接: https://my.oschina.net/u/2791/blog/85230