反向AJAX(Comet)和Spring MVC与Scala/LIFT?

Ta *_*Sas 17 scala dwr spring-mvc lift spring-security

IBM提供了一个演示,演示了如何使用DWR 2轻松实现反向AJAX.另一方面,Scala/LIFT具有内置的反向AJAX功能.

  1. 问题:如果使用Spring MVC可以正常工作吗?

  2. 问:如果你从头开始,优先考虑Scala/LIFT而不是DWR/Spring MVC的优缺点是什么?

  3. 问题:在Scala/LIFT中,安全处理是否与Spring Security一样复杂?

Dav*_*lak 11

Lift的Comet Architecture是Novell在评估了许多不同技术后为其Pulse产品选择的.

Lift的Comet实现使用单个HTTP连接来轮询页面上任意数量组件的更改.每个组件都有一个版本号.长轮询包括版本号和组件GUID.在服务器端,侦听器附加到长轮询请求中列出的所有GUID.如果任何组件具有更高的版本号(或者在长轮询期间版本号增加),则将增量(一组描述每个版本的更改的JavaScript)发送到客户端.应用增量,并将客户端上的版本号设置为更改集的最高版本号.

Lift将长轮询与会话管理集成在一起,这样如果在长轮询期间请求进入同一URL会导致连接缺乏,则终止长轮询以避免连接不足(某些浏览器每个命名服务器最多有2个HTTP连接,其他人最多6).Lift还支持DNS通配服务器以进行长轮询请求,这样浏览器中的每个选项卡都可以对不同的DNS通配服务器进行长轮询.这避免了连接饥饿问题.

Lift动态检测Servlet运行的容器以及Jetty 6和7以及(很快)Glassfish,Lift将使用平台的"continuation"实现来避免在长轮询期间使用线程.

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的站点地图定义了站点导航和访问控制规则.这意味着您永远不会有人无法点击的链接.您不需要拥有一个外部过滤器(例如,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>
  }
}
Run Code Online (Sandbox Code Playgroud)

并将其插入页面: <lift:comet type="Chat"/>