>问题:任何经验,如果这适用于Spring MVC?
>问题:如果你从头开始,那么喜欢Scala / LIFT的DWR / Spring MVC的优缺点是什么
>问题:在Scala / LIFT中,安全处理与Spring Security中一样复杂?
Lift的Comet实现使用单个HTTP连接来轮询页面上任意数量的组件的更改。每个组件都有一个版本号。长调查包括版本号和组件GUID。在服务器端,侦听器附加到长轮询请求中列出的所有GUID。如果任何组件具有较高的版本号(或长时间轮询期间的版本号增加),则会将三角形(描述每个版本的更改的一组JavaScript)发送到客户端。应用三角形,并将客户端上的版本号设置为更改集的最高版本号。
Lift将长轮询与会话管理集成,以便在长时间轮询中引起连接不足的请求进入相同的URL时,长时间轮询终止以避免连接不足(某些浏览器每个命名服务器最多有2个HTTP连接,其他人最多6)。 Lift还支持DNS漫游服务器进行长轮询请求,以便浏览器中的每个选项卡可以对不同的DNS通配符服务器进行长时间轮询。这样可以避免连接饥饿问题。
提升可以动态地检测Servlet正在运行的容器,并且在Jetty 6& 7和(很快)Glassfish,Lift将使用平台的“延续”实现,以避免在长时间投票期间使用线程。
Lift的JavaScript可以坐在jQuery和YUI的顶部(也可以坐在Prototype / Scriptaculous之上)。实际的轮询代码包括连接失败的回退和其他处理瞬态连接失败的“优雅”方式。
我看过Atmosphere,CometD,Akka(所有基于JVM的Comet技术)。没有(当时我评估它们)支持每页多个组件或连接饥饿避免。
Novell从头开始,选择了Lift来驱动Pulse,这是一个很好的理由。
在安全性方面,Lift将弹簧弹簧安全握手。见http://www.mail-archive.com/liftweb@googlegroups.com/msg13020.html
基本上,电梯的安全性被烘烤到您的应用程序中。默认情况下,电梯应用程序可以抵御常见问题(跨站点脚本,重播攻击,跨站点请求伪造)。默认情况下,电梯应用程序可以抵御参数篡改。 Lift的sitemap定义了站点导航和访问控制规则。这意味着你从来没有一个人无法点击的链接。您不需要具有外部过滤器(例如Spring Security),您必须独立于您的应用程序进行配置(whoops …移动页面,但忘记确保更新了Spring Security XML文件)。
哦,如果你不想使用模板语言,这是一个完整的电梯彗星聊天组件:
class Chat extends CoMetactor with CometListener { private var msgs: List[String] = Nil def registerWith = ChatServer override def lowPriority = { case m: List[String] => msgs = m; reRender(false) } def render = { <div> <ul> { msgs.reverse.map(m => <li>{m}</li>) } </ul> <lift:form> { SHtml.text("",s => ChatServer ! s) } <input type="submit" value="Chat"/> </lift:form> </div> } }
并将其插入到页面中:< lift:comet type =“Chat”/>