SlideShare a Scribd company logo
1 of 31
GWT - RPC
Roy Chen
• GWT – RPC
• GWT – Module and EntryPoint
• implement (widget + event + RPC)
• 分析優勢、劣勢、趨勢。
RPC
• 傳統用form做post,一定會reload或跳到別
頁才會看到新資料 (ex. 留言板)
• 但是像fb,送出post後,下面會即刻showt
出你新增到db的資料,因為用了AJAX。
• Ajax (Asynchronous JavaScript and XML)
• 同步,非同步?
• 也就是說js在背景默默運作。
• Js <->php, js<->java, GWT-RPC: java <-> java
RPC
•Implement
http://rpcdemo1210.appspot.com/demo.h
tml
Module and EntryPoint
• Module: 一套完整的功能,包含前後端,最
終編譯成 .js讓host page使用。
• EntryPoint(class): 屬於module中前端的部分,
為module中的某一功能。
Module AjaxAlert (ManyAjax)
EntryPoint Class DoAlert (DoPost, DoUpdate …)
Html host page demo.html
Create GAE project
New GWT module
撰寫前端兩個interface
AlertService.java (interface)
• 在com.gae.client
套件下新增一個
interface。
• 此interface繼承
GWT的
RemoteService 介
面。
• 此介面不需要實
作方法內容,定
義規格就好。
AlertServiceAsync.java (interface)
為介面制定規格(方法)
• 先不用實作方法
• 同步跟非同步兩個介面都要制定對應的方
法規格(方法名、回傳型態、引數型態)
撰寫後端Servlet
Add AlertServiceImpl.java
實作介面方法(後端邏輯)
設定 web.xml
RPC 架構好了,接著要做UI跟觸發事件。
Add Composite Class (元件)
Generate java code
事件處理
callback function
Swing, android,gwt
EntryPoint Class
design
Choose Component
Auto-gen code
Compile GWT project
• http://rpcdemo1210.appspot.com/demo.html
分析
開發android?
GWT 2006就有了
GWT and js ?
GAE的優勢
(end)

More Related Content

What's hot

React js入門教學
React js入門教學React js入門教學
React js入門教學TaiShunHuang
 
Study4.TW .NET Conf 2018 - Fp in c#
Study4.TW .NET Conf 2018  - Fp in c#Study4.TW .NET Conf 2018  - Fp in c#
Study4.TW .NET Conf 2018 - Fp in c#Chieh Kai Yang
 
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageAlan Tsai
 
Android线程简介
Android线程简介Android线程简介
Android线程简介朋 王
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格Will Huang
 
2015.07.22 新人報告(3)
2015.07.22 新人報告(3)2015.07.22 新人報告(3)
2015.07.22 新人報告(3)Chih-Wei Chuang
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例Will Huang
 
How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4Wei-Yi Chiu
 
Frontend Devops at Cloudinsight
Frontend Devops at CloudinsightFrontend Devops at Cloudinsight
Frontend Devops at CloudinsightYan Wang
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework國昭 張
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
 
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用Jeff Wu
 
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Jimmy Ho
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Will Huang
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Kyle Shen
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Will Huang
 

What's hot (20)

React js入門教學
React js入門教學React js入門教學
React js入門教學
 
Study4.TW .NET Conf 2018 - Fp in c#
Study4.TW .NET Conf 2018  - Fp in c#Study4.TW .NET Conf 2018  - Fp in c#
Study4.TW .NET Conf 2018 - Fp in c#
 
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
 
Android线程简介
Android线程简介Android线程简介
Android线程简介
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
保哥線上講堂:利用 StyleCop 撰寫一致的 C# 程式碼風格
 
2015.07.22 新人報告(3)
2015.07.22 新人報告(3)2015.07.22 新人報告(3)
2015.07.22 新人報告(3)
 
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
 
How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4How to upgrade_ror3_to_ror4
How to upgrade_ror3_to_ror4
 
Frontend Devops at Cloudinsight
Frontend Devops at CloudinsightFrontend Devops at Cloudinsight
Frontend Devops at Cloudinsight
 
ASP.Net MVC Framework
ASP.Net MVC FrameworkASP.Net MVC Framework
ASP.Net MVC Framework
 
Vue
VueVue
Vue
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
React js
React jsReact js
React js
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
 
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
AUGT 社群小聚 - Angular Optimize Performance NgZone 的原理與應用
 
Blazor 與 Radzen 同行
Blazor 與 Radzen 同行Blazor 與 Radzen 同行
Blazor 與 Radzen 同行
 
Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)Visual Studio 2017 新功能探索 (Study4.TW)
Visual Studio 2017 新功能探索 (Study4.TW)
 
Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4Angular.js & ASP.NET in Study4
Angular.js & ASP.NET in Study4
 
Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)Angular 7 全新功能探索 (Angular Taiwan 2018)
Angular 7 全新功能探索 (Angular Taiwan 2018)
 

Similar to Gwt rpc

Redux+react js
Redux+react jsRedux+react js
Redux+react js國昭 張
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0Anthony Chen
 
Rails talk-5
Rails talk-5Rails talk-5
Rails talk-5Eddie Lee
 
redux-observable with react-apollo
redux-observable with react-apolloredux-observable with react-apollo
redux-observable with react-apolloTripmoment
 
React基礎教學
React基礎教學React基礎教學
React基礎教學昇倫 蔡
 
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用Jerry Lin
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kaoxwcoder
 
John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)Jia Mi
 
Yog Framework
Yog FrameworkYog Framework
Yog Frameworkfansekey
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理gorillazf
 
a glance of Javascript module
a glance of Javascript modulea glance of Javascript module
a glance of Javascript modulezipeng zhang
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Will Huang
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具國昭 張
 
Underscore
UnderscoreUnderscore
Underscorecazhfe
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發Weizhong Yang
 

Similar to Gwt rpc (20)

Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
2011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.02011 JavaTwo JSF 2.0
2011 JavaTwo JSF 2.0
 
Rails talk-5
Rails talk-5Rails talk-5
Rails talk-5
 
redux-observable with react-apollo
redux-observable with react-apolloredux-observable with react-apollo
redux-observable with react-apollo
 
React基礎教學
React基礎教學React基礎教學
React基礎教學
 
介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用介紹前端 Web 技術在跨平台開發上的應用
介紹前端 Web 技術在跨平台開發上的應用
 
Template mb-kao
Template mb-kaoTemplate mb-kao
Template mb-kao
 
John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)John Resig Beijing 2010 (中文版)
John Resig Beijing 2010 (中文版)
 
Yog Framework
Yog FrameworkYog Framework
Yog Framework
 
移动端跨平台技术原理
移动端跨平台技术原理移动端跨平台技术原理
移动端跨平台技术原理
 
a glance of Javascript module
a glance of Javascript modulea glance of Javascript module
a glance of Javascript module
 
Node js实践
Node js实践Node js实践
Node js实践
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)Angular 4 網站開發最佳實務 (Modern Web 2017)
Angular 4 網站開發最佳實務 (Modern Web 2017)
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
Underscore
UnderscoreUnderscore
Underscore
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 

More from Roy Chen

The Power of Variable Names
The Power of Variable NamesThe Power of Variable Names
The Power of Variable NamesRoy Chen
 
培養深度工作力
培養深度工作力培養深度工作力
培養深度工作力Roy Chen
 
Svm and libsvm
Svm  and libsvmSvm  and libsvm
Svm and libsvmRoy Chen
 
Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門Roy Chen
 
WiFi direct
WiFi directWiFi direct
WiFi directRoy Chen
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorialRoy Chen
 
Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Roy Chen
 
Processing for fun
Processing for funProcessing for fun
Processing for funRoy Chen
 
聽障朋友科技應用
聽障朋友科技應用聽障朋友科技應用
聽障朋友科技應用Roy Chen
 
Phonegap tricky
Phonegap trickyPhonegap tricky
Phonegap trickyRoy Chen
 

More from Roy Chen (11)

The Power of Variable Names
The Power of Variable NamesThe Power of Variable Names
The Power of Variable Names
 
培養深度工作力
培養深度工作力培養深度工作力
培養深度工作力
 
Svm and libsvm
Svm  and libsvmSvm  and libsvm
Svm and libsvm
 
Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門
 
WiFi direct
WiFi directWiFi direct
WiFi direct
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorial
 
Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)
 
Processing for fun
Processing for funProcessing for fun
Processing for fun
 
個資法
個資法個資法
個資法
 
聽障朋友科技應用
聽障朋友科技應用聽障朋友科技應用
聽障朋友科技應用
 
Phonegap tricky
Phonegap trickyPhonegap tricky
Phonegap tricky
 

Gwt rpc

Editor's Notes

  1. 這張圖把PRC分成前後端,可以把左邊的部分想像成是一般前端的javascrupt。 實作RPC架構的元素有兩個前端介面跟一個後端的類別。 前端的YourService這個介面,你必須去把介面方法的規格訂出來(回傳直、方法名…),這裡還不用去實作方法的邏輯, ex. addData,getData, deleteData,…。 後端的servlet類別必須去實作YourService這個介面的方法內容,比如說如果你對應到的是YourService 中的 addData, 那就真的要去把連接資料庫、新增一筆rowdata的code寫在方法區塊裡面。 YourServuce跟YourServiceImpl對應的關希很像傳統前端js做post要有一個url的值,那後端也要有對應這個url的邏輯,在RPC中你要在web.xml紀錄段應得關西。 那最左邊的YourServiceAsync則是對應YourService的一個介面,它讓YourService裡面的方法有非同步的功能,PRC中的非同步的部分是由這個介面負責。
  2. AjaxAlert (module name)
  3. 新增的AlertService是個同步的介面,GWT RPC的規格裡面規定要設計同步跟非同步兩個介面。
  4. 可以先制定任一介面的方法,再用eclipse的除錯提示為另一個介面新增對應的方法。 先看AlertService, 它只有import RemoteService ,只負責跟後端servlet做溝通,沒有處理async的能力。 Path的地方,這是指這段code對應的url。 順便在這裡訂一個 方法。 右下則是只有import AsyncCallback,所以它沒有跟後端溝通的能力。 這兩個介面後面會講到怎麼結合再一起,讓前端有跟後端做非同步傳輸的功能。
  5. 有了處理前端的兩個介面之後,可以開始實作後端的RPC服務程式;依GWT RPC的規格,需要把後端的程式放在{package name}.server這個package下,需要興曾一個 接著要實作後端的一個class,此class需要繼承RemoteServiceServlet,還要實作AlertService這個介面(剛剛做好的)。
  6. 紅線框起來為,實作AlertService這個介面方法的區塊。 也可以說後端的邏輯就放在這裡。
  7. url-pattern : 對外定義的網址;
  8. 看一下元件對應的java code Flow panel就像android 幫你訂了很多版面。
  9. 在點擊後,去做非同步呼叫的動作,(就是ajax,差別在它是用java去做), 拿jquery來比較 GWT.create意思是,把傳進來的AlertService這個介面實作一個類別的概念。回傳一個實作AlertService介面的類別 因為AlertServiceAsync這個介面沒有傳輸的功能,只有負責非同步的部分,而AlertService這個介面則沒有非同步的功能,但有跟後端servlete溝通的功能。 所以這一行讓 alertService這個object有非同步而且能夠跟後端溝通。 接下來要實作alertService這個介面。 然後用泛型去指定傳進callback方法中的型態,因為Window.alert()只能船字串,所以設定字串。 然後因為這是非同步呼叫,response不一定會馬上拿到,所以用callback方法來等待,當成功就會到onSuccess。
  10. 寫 android? 這是AlertClient這個元件的code,很像android,有gwt元件的宣告跟使用,還有事件處理的code。 到現在我們只做好了主要的功能,但是在gwt裡,需要有entry point類別才能該使執行。
  11. 現在做好的是一個有功能元件,我們必須將這個元件加入倒entrypoint中, 新增的這個entrypoint: DoAlert是屬於module:AjaxAlert中的一個entrypoint Xml會自己添加code
  12. entryPoint可以把它看成是一個頁面,所以它也是可以設計的。 我們現在就要把剛剛做好的那一套alert元件直接方到entry point頁面裡面。
  13. 現在我們要來把一開始做的元件放入entryPoint頁面中。 拉過去這個動作就是把我們剛剛做的類別new一個物件出來。
  14. 非常像在開發anroid;但這樣好像跟主流的趨勢有點矛盾,因為現很流行的是用html寫手機app,但gwt是讓你有寫app的方式寫html。 而且GAE的優勢並不是GWT,GWT也早就不是新技術了,是google把gwt買下來,讓開發者有一另外一個選項。 GWT的社群當然也是有很多open source的東西可以用,但比起很多javascript library像jquery什麼的,可能還是有差距。