IBM提供了一个演示,展示了在 DWR 2 中使用 Reverse AJAX 是多么容易。另一方面,Scala/LIFT 带有内置的 Reverse AJAX 功能。
问题:如果这适用于 Spring MVC,有什么经验吗?
问题:如果您从头开始,那么首选 Scala/LIFT 而不是 DWR/Spring MVC 的优缺点是什么
问题:在 Scala/LIFT 中,安全处理是否与 Spring Security 中一样复杂?
IBM提供了一个演示,展示了在 DWR 2 中使用 Reverse AJAX 是多么容易。另一方面,Scala/LIFT 带有内置的 Reverse AJAX 功能。
问题:如果这适用于 Spring MVC,有什么经验吗?
问题:如果您从头开始,那么首选 Scala/LIFT 而不是 DWR/Spring MVC 的优缺点是什么
问题:在 Scala/LIFT 中,安全处理是否与 Spring Security 中一样复杂?
在对多种不同技术进行评估后,Novell 选择了 Lift 的 Comet 架构来为其 Pulse 产品提供动力。
Lift 的 Comet 实现使用单个 HTTP 连接来轮询页面上任意数量的组件的更改。每个组件都有一个版本号。长轮询包括版本号和组件 GUID。在服务器端,一个侦听器附加到长轮询请求中列出的所有 GUID。如果任何组件具有更高的版本号(或在长轮询期间版本号增加),则将增量(描述每个版本更改的一组 JavaScript)发送到客户端。将应用增量并将客户端上的版本号设置为更改集的最高版本号。
Lift 将长轮询与会话管理集成在一起,因此如果在长轮询期间请求进入相同的 URL 会导致连接饥饿,则终止长轮询以避免连接饥饿(某些浏览器每个命名服务器最多有 2 个 HTTP 连接,其他人最多有 6 个)。Lift 还支持用于长轮询请求的 DNS 通配符服务器,这样浏览器中的每个选项卡都可以针对不同的 DNS 通配符服务器进行长轮询。这避免了连接饥饿问题。
Lift 动态检测 Servlet 正在运行的容器以及 Jetty 6 和 7 以及(很快)Glassfish,Lift 将使用平台的“延续”实现来避免在长轮询期间使用线程。
Lift 的 JavaScript 可以位于 jQuery 和 YUI 之上(也可以位于 Prototype/Scriptaculous 之上。)实际的轮询代码包括连接失败的回退和其他处理瞬时连接失败的“优雅”方式。
我看过 Atmosphere、CometD、Akka(所有面向 JVM 的 Comet 技术)。没有人(在我评估它们时)支持每页多个组件或避免连接饥饿。
Novell 从零开始,选择 Lift 来为 Pulse 提供动力是有充分理由的。
在安全性方面,Lift 胜过 Spring + Spring Security。请参阅http://www.mail-archive.com/liftweb@googlegroups.com/msg13020.html
基本上,Lift 的安全性已融入您的应用程序。默认情况下,Lift 应用程序可以抵抗常见问题(跨站点脚本、重放攻击、跨站点请求伪造)。默认情况下,Lift 应用程序可防止参数篡改。Lift 的站点地图定义了站点导航和访问控制规则。这意味着您永远不会拥有无法点击的链接。您不需要有一个必须独立于您的应用程序配置的外部过滤器(例如 Spring Security)(哎呀......移动了一个页面,但忘记确保 Spring Security XML 文件已更新。)
哦...如果您不想使用模板语言,这里有一个完整的 Lift Comet 聊天组件:
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"/>
这两个安全系统都只涵盖基本场景,并且需要大量定制才能在实际项目中使用。
这就是我将用于在 Scala 中构建 COMETed RIA 的方法:
另一个以纯 Java(或任何其他 JVM 语言,包括 Scala)为中心的替代方案是ItsNat Comet。