SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Play Framework 介紹
阿星
我是?
我是阿星,本名朱東輝
高雄來的野豬騎士
四年前於高雄資策會結訓後
現職為易遊網攻城師
它是?
Play Framework 是一套 Web Framework
主要用 Java8 + Scala 語言所建構而成
最新版本 : 2.6.17
https://www.playframework.com/
2018 8 18_play_framework
我能幫助各位什麼?
我個人經驗與感想,來去說明使用框架需要知道
的部份,以及適用場景
勸世文
換架構前應詳閱公開說明書
優點與特性
1.MVC
2.Routes
3.Sbt
4.Json & Form
5.Reverse-routing
6.Public Dir
7.CSRF
8.Views templates
9.Dependency Injection (DB & AOP)
10.Hot Reload
11.注意事項
M V C - 1
M V C - 2
-app/controllers
(根據play的routes設定,去找尋要呼叫的controllers,回傳的
資料或資訊。)
-app/models
(商業邏輯部分)
-app/views
(頁面呈現結果,基本上使用scala所編譯)
Routes
當Play啟動的時候,使用者請求服務時,會先經過
conf/routes來parse,才會決定要呼叫那一個
app/controllers裡的類別的方法,來回覆使用者的請求。
#取得登入頁面
GET /login
controllers.Application.login()
Sbt
Play本身的建置是用sbt工具來建置環境,sbt的設定檔build.sbt,
可以對自身的專案做版本的控管,也可以協助你,引用其他專
案相關的library。
建置與佈署可參考 : https://loveu8.gitbooks.io/playframework-
with-mybatis-and-mariadb/content/chapter3.html
Json & Form - 1
Play Json的library核心是Jackson,方便使用者直接對
Json資料格式轉換或印出
public Result nameJson(String name) {
Map<String, String> user = new HashMap<String, String>();
user.put("name", “TWJUG");
return ok(Json.toJson(user));
}
{
"name" : “TWJUG”
}
Json & Form - 2
Views
Controller
<form action="@controllers.routes.WebController.login.url"
method="post" id="loginForm">
<div class="field-wrap">
<label class="lable-field-wrap">電子信箱</label>
<input type="email" required autocomplete="off"
name="email"/>
</div>
</form>
// Step 2 : 取得登入請求
private AuthRequest getAuthRequest() {
try {
AuthRequest authRequest =
formFactory.form(AuthRequest.class).bindFromRequest().get();
play.Logger.info("authRequest = "+ Json.toJson(authRequest));
}
Reverse-routing
Play都是使用Routes去生成實際服務的網址,所以我們可以
使用內建的方法,去生成URL,而不是寫死在controller或者
是view裡,減少網址異動時,卻沒有改到的問題。
conf/routes
view
GET /foo/bar/hello controllers.Relative.helloview
GET /hello/:name controllers.Relative.hello(name)
@(name: String, request: Http.RequestHeader)
<h1>Hello @name</h1>
<a href="@routes.Relative.hello(name)">Absolute Link</a>
<a href="@routes.Relative.hello(name).relativeTo(request)">Relative
Link</a>
Public Dir
這裡可以放一些前端/後端需
要使用的公用檔案。
CSRF
Play本身可以開啟CSRF阻擋,只要在filters,新增
CSRFFilter,並在頁面@import helper._並使用
@CSRF.formField,將會隨機產生一組Token,只能被該Play
專案認可的Token,來達到防堵跨網站攻擊效果。
參考 :
https://www.playframework.com/documentation/2.6.x/JavaCsrf
<form method="POST" action="/items">
@CSRF.formField
...
</form>
Views templates
Play views是由Scala所編譯,@代表是Play Scala作用的範
圍,可以import,引用public檔案,也可以使用寫好的Java
or Scala程式碼,直接在頁面上使用。
@views.html.web.header()
@views.html.web.headerLibs()
@(customer: Customer, orders: List[Order])
<h1>Welcome @customer.name!</h1>
<ul>
@for(order <- orders) {
<li>@order.title</li>
}
</ul>
@views.html.web.footer()
Dependency Injection
Out of the box, Play provides dependency injection support
based on JSR 330. The default JSR 330 implementation that
comes with Play is Guice.
Ch 9 Play MyBatis & MariaDB (DB) : https://bit.ly/2jIYPFz
Ch11-3 Login (AOP) : https://bit.ly/2I52lV7
使用JSR 330標準註釋 : https://bit.ly/2PacjIP
Key word : Guice AOP , Guice moudle
Hot Reload
開發時,啟動Play專案之後,若是專案裡編輯程式碼,儲存之
後,重新存取URL,會自動compiler。
注意事項
JAVA 8以上,sbt增加Eclipse 編譯設定,以及編譯程式碼
使用UTF8
參考 : https://loveu8.gitbooks.io/playframework-with-mybatis-
and-mariadb/content/chapter2.html
適用場景 / 優點
1.想要快速快發,且想要立即得到不錯的開發結
果,延後思考框架搭配的場景
2.視為單純的Web Framewrok
3.routes 設定方便
4.view template 可以拆解
5.view的頁面,可以直接引用Scala or Java
相關的類別且使用
缺點
1.需要多了解Scala的用法
2.中英資源相對很少
3.破壞性版本相容 2.2.x -> 2.4.x
4.要熟悉Sbt指令去編譯與建置環境
5.view的引用要注意
Next ?
Java Web Frameworks Index
https://bit.ly/2rtem0y
Q&A
參考資料
Play Framework
https://www.playframework.com/
JavaTest
https://www.playframework.com/documentation/2.6.x/JavaTest
Introduction of Akka
http://otaku.kigi.tw/2014/07/akka.html
PlayFramework with MyBatis and MariaDB
GitBook : https://goo.gl/Q3kNns
playMyBatisMariaDB
GitHub : https://goo.gl/Ru55TB

Contenu connexe

Tendances

D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-showleneli
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化taobao.com
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践taobao.com
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践Welefen Lee
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Vincent Chi
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍Jim Jiang
 
阿里集团MySQL并行复制特性
阿里集团MySQL并行复制特性阿里集团MySQL并行复制特性
阿里集团MySQL并行复制特性Hui Liu
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结Lixun Peng
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3LiviaLiaoFontech
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践Mingel Zhang
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APILixun Peng
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJSlifesinger
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanismlifesinger
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料yiditushe
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料yiditushe
 
Uliweb设计分享
Uliweb设计分享Uliweb设计分享
Uliweb设计分享modou li
 

Tendances (20)

D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化广告投放代码和创意代码持续优化
广告投放代码和创意代码持续优化
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践
 
百度前端性能监控与优化实践
百度前端性能监控与优化实践百度前端性能监控与优化实践
百度前端性能监控与优化实践
 
Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)Laravel - 系統全攻略(續)
Laravel - 系統全攻略(續)
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
GlassFish特性介绍
GlassFish特性介绍GlassFish特性介绍
GlassFish特性介绍
 
阿里集团MySQL并行复制特性
阿里集团MySQL并行复制特性阿里集团MySQL并行复制特性
阿里集团MySQL并行复制特性
 
对MySQL应用的一些总结
对MySQL应用的一些总结对MySQL应用的一些总结
对MySQL应用的一些总结
 
2021.laravelconf.tw.slides3
2021.laravelconf.tw.slides32021.laravelconf.tw.slides3
2021.laravelconf.tw.slides3
 
移动端Web开发性能优化实践
移动端Web开发性能优化实践移动端Web开发性能优化实践
移动端Web开发性能优化实践
 
MySQL源码分析.02.Handler API
MySQL源码分析.02.Handler APIMySQL源码分析.02.Handler API
MySQL源码分析.02.Handler API
 
Intro-to-SeaJS
Intro-to-SeaJSIntro-to-SeaJS
Intro-to-SeaJS
 
KISSY Mechanism
KISSY MechanismKISSY Mechanism
KISSY Mechanism
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
中远公司 Java培训资料
中远公司  Java培训资料中远公司  Java培训资料
中远公司 Java培训资料
 
Uliweb设计分享
Uliweb设计分享Uliweb设计分享
Uliweb设计分享
 

Similaire à 2018 8 18_play_framework

用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程yiditushe
 
Kissy design
Kissy designKissy design
Kissy designyiming he
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7twMVC
 
Installation and configuration 11g r2
Installation and configuration 11g r2Installation and configuration 11g r2
Installation and configuration 11g r2Zhaoyang Wang
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)Cyril Wang
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile ServicesKuo-Chun Su
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsChieh Lin
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型Jackson Tian
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swttka
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTarget Source
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 

Similaire à 2018 8 18_play_framework (20)

用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
Java Web动态图表编程
Java Web动态图表编程Java Web动态图表编程
Java Web动态图表编程
 
Kissy design
Kissy designKissy design
Kissy design
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
.NET 7 家族新成員: Microsoft Orleans v7
.NET 7 家族新成員:Microsoft Orleans v7.NET 7 家族新成員:Microsoft Orleans v7
.NET 7 家族新成員: Microsoft Orleans v7
 
Installation and configuration 11g r2
Installation and configuration 11g r2Installation and configuration 11g r2
Installation and configuration 11g r2
 
摘星
摘星摘星
摘星
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Jsp
JspJsp
Jsp
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)如何使用 Xhprof 分析網站效能 (真實案例2)
如何使用 Xhprof 分析網站效能 (真實案例2)
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
從 Web Site 到 Web Application,從 Web Services 到 Mobile Services
 
Exam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development FundamentalsExam 98-375 HTML5 Application Development Fundamentals
Exam 98-375 HTML5 Application Development Fundamentals
 
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
从无阻塞并行脚本加载(Lab.js)到浏览器消息模型
 
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 

2018 8 18_play_framework