作者PsMonkey (痞子军团团长)
看板java
标题Re: [GWT] 一些常用架构的设计问题
时间Mon Dec 14 00:30:16 2009
※ 引述《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
1F:推 tkcn:我倒觉得 GWT 是故意要跟网页做出区别,主打 Web App 12/14 00:34