看板 java 關於我們 聯絡資訊
※ 引述《tkcn (小安)》之銘言: : 話先說在前頭, : 我對寫網頁不太在行, : 所以這篇文章可能會存在一些嚴重的錯誤, : 還請各位多多包涵。 話也說在前面 什麼「豬屎被疼」的東西我不懂(正確來說,我啥都不懂) 以下請當作拋磚引玉的無學問土砲想法 : --- : 這篇文章主要是想問, : 一些在網頁上常見的架構如何在 GWT 上實現, : 像是 login page, : 還有讓每個頁面都有共同的 header, bottom。 如果純粹靜態的東西(例如:Logo、聯絡資訊) 可以直接刻在 html 裡頭 如果是動態產生的東西,那... 就用 Java(OO)的角度去想吧 : 我照著官方的 tutorial 做完以後, : 試著想要寫一個 login page, : 卻發現非常的.... 呃~ 棘手 XD : 我甚至不知道我應該用純 GWT 去寫, : 還是寫一個 JSP 做登入,登入完成後再轉給 GWT module。 : 如果用純 GWT 去寫, : 跳轉頁面的部份又改如何做, 純粹講「跳轉頁面」是 Window.open("_self", A_URL, ""); 順便廣告:http://sites.psmonkey.org/pt2wiki/GWT : 應該要用單一 module? 還是多個 module? : 直到後來我看了一些討論, ( http://tinyurl.com/yd5eud6 ) : "GWT highly recommends using a single module." : "Typically, there is only a single HTML page, : and different "screens" are manipulated on the client side." : OK, 所以我應該用 GWT 做一個登入的 "screen", : 然後在 EntryPoint 做一個 RPC 呼叫, : 去判斷使用者的 cookie 是否過期, : 如果過期了就顯示 login screen, : 沒過期就顯示登入後的畫面。 : 於是我寫了一個類似這樣的東西: : http://snipt.net/javagner : It's work! 但是,我如何知道這樣是對的? : 事實上,不管是一個 module、兩個 module,還是滲了 JSP, : 我認為都可以做出相同的功能, : 但哪一個方式是我真正應該做的呢? 抱歉,其實我英文很爛、程式也不太行 所以那個討論跟程式碼我都沒有看 [毆飛] qrtt1 給的第二個連結看不懂所以沒看 [淚奔] 我只能說,自從我被迫看了幾個月的 ASP 也寫了幾個月的 PHP、trace 了一些 CodeIgniter 的 code 當然還有 trace 一些不太大,但是用了也沒出事的 project 我會有種錯覺,就是: 考慮這種問題,簡直是屁..... 股很堅固可以好好久坐的人該研究的事情 (o 版主別打我) 這種事情哪有什麼對不對,只有出不出包 在出不出包之前要先考慮寫不寫的出來.... [遠目] 嗯... 都說是錯覺了... 所以讓我們回到主題上 [毆飛] 如果讓我來想 login 這個問題 基本上我一定二話不說,把 login 這檔子事情歸在 GWT 範圍以外 事實上,應該可以很合理懷疑 google 是這樣子作 login 的 (至少網址改變了) (迷之聲:你是不會用 Firebug 之類的東西 trace 一下喔?) (答:ㄜ... 不會用 [毆飛]) 這可能跟 SSO/HTTPS 的議題有關? 不過我都沒碰過,所以純屬胡說八道 [再度毆飛] 我想要抽出去到 GWT 以外的地方 主要是覺得,這跟 GWT 拿手 or 要解決的目標無關 如果對於 GWT 而言,只是要 server 給個 true/false 實質上跟實際的程式內容理論上無關 而抽出去用原始的方法作,也沒什麼不好 讓 GWT 的部份更單純專一,感覺不錯 : 這是我發這一篇文的主要目的。 : 接下來就就真的要提出疑問了: : 1. 用上面所提的登入方式, : 實際運作起來會是: : (1) client 端下載了 EntryPoint : (2) 利用 AJAX 檢查是否有登入 : (3) Server 端回傳登入結果 : (4) Client 端顯示對應頁面 : 跟其他的網頁語言直接在 Server 端檢查完後, : 便直接將對應畫面輸出給 Client 端的作法不同。 : 另外,據我剛才利用 firebug 觀察的結果, : 步驟 (3) 傳回來的結果並沒有包含 步驟 (4) 顯示的頁面, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 這句話對我來說,有功能切割上的毛病 我會一個 RPC 決定 login 與否 然後才是一個 RPC 來真正 fetch 資料 : 也就是說,我在步驟 (1) 時, : 已經抓取了登入成功和失敗時,欲顯示的頁面了, ^^^^^^^^^^^^^^^^? : 這樣,會不會有安全性的問題? : ps. 我個人是覺得在寫法正確下,不至於有問題,但還是提出來討論看看 :P 理論上一定有 我目前還沒看到(也可以說沒關心 & 沒能力)GWT 的安全性問題 但是,反過來講 真正關鍵的資料內容還是從 server 傳過來 js 裡頭只是決定「畫面格式」跟「資料格式」 那麼,就算針對 js 解讀成功,還是沒辦法拿到真正關鍵的資料 : 2. 上面的做法只能在進入 EntryPoint 時判斷, : 那 Session/Cookie 過期時怎麼辦? : 這邊我還沒有實際做, : 不過我認為應該是在呼叫 RPC 時, : 由 Server 端去檢查 Session, : 如果不合格就丟出 Exception。 : Client 端收到 Exception 後就將畫面導到 login page. 以傳統 JSP 的作法 應該是由 filter 之類的方式來檢查「每一個」request 我想,要考慮安全,這是免不了的 (還好 GWT RPC 有 Exception 可以用,寫起來輕鬆一點 XD) : 3. 繼續接續上面的問題, : Client 端收到 Exception 時, : 可能只是一個畫面上的小 Panel 在處理, : 我要如何才能把整個畫面切換到 login screen 呢? : (RootPanel 通常會在 EntryPoint 手上) : 我承認這是一個 Application 常見的簡單問題啦 XD : 但是畢竟現在處理的是網頁, : 會不會有其他更適合的 pattern 能夠解決這個問題呢? : --- : 如果我的這篇文章沒有什麼嚴重的誤解的話, : 我想,是不是可以討論看看一些在其他語言上常用的架構,該如何用 GWT 實現。 有時候覺得 GWT 紅不起來 一方面是沒有一個更 high level 的 framework 另一方面是,以往針對網頁環境的概念跟架構 可能都不能馬上(或著不能?)轉移到 GWT 上頭 得重新思考驗證這樣? 當然,對於一個沒用過 Struts 之類東西的人 講這話好像有點大言不慚... 以上有誤還請各方大德不要客氣... -- 侃侃長論鮮窒礙 眾目睽睽無心顫 Blog:http://blog.psmonkey.org 煢居少聊常人事 殺頭容易告白難 歡迎參觀 Java 版(@ptt.cc)精華區 \囧/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.20.190.68
tkcn:我倒覺得 GWT 是故意要跟網頁做出區別,主打 Web App 12/14 00:34