首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Reverse AJAX (Comet)和Spring MVC与Scala/LIFT?

Reverse AJAX (Comet)和Spring MVC与Scala/LIFT?
EN

Stack Overflow用户
提问于 2010-06-24 06:37:12
回答 3查看 8K关注 0票数 17

有一个demo by IBM展示了在DWR2中使用反向AJAX是多么容易。另一方面,Scala/LIFT带有内置的反向AJAX功能。

  1. 问题:如果这在Spring MVC中工作得很好,有什么经验吗?
  2. 问题:如果你想从头开始,选择Scala/LIFT而不是DWR/Spring MVC
  3. 问题:在Scala/LIFT中,安全处理是否像Spring security中那样复杂?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-29 06:35:27

Lift的Comet架构,Novell在评估了许多不同的技术后,选择它来驱动他们的Pulse产品。

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

Lift将长轮询与会话管理集成在一起,因此,如果在长轮询期间请求进入同一URL,会导致连接匮乏,长轮询将被终止以避免连接匮乏(某些浏览器在每个命名服务器上最多有2个HTTP连接,而其他浏览器最多有6个)。Lift还支持针对长轮询请求的DNS通配符服务器,以便浏览器中的每个选项卡可以针对不同的DNS通配符服务器执行长轮询。这避免了连接匮乏问题。

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

Lift的JavaScript可以位于jQuery和YUI之上(也可以位于Prototype/ sit之上)。实际的轮询代码包括连接失败时的退避和其他处理瞬时连接失败的“优雅”方法。

我看过Atmosphere、CometD、Akka (所有面向JVM虚拟机的Comet技术)。没有一个(在我评估它们的时候)支持每页多个组件或避免连接匮乏。

Novell从零开始,出于一些非常好的原因选择了Lift to power Pulse。

在安全性方面,Lift轻松击败了Spring + Spring security。请参阅http://www.mail-archive.com/liftweb@googlegroups.com/msg13020.html

基本上,Lift的安全性已经包含在您的应用程序中。默认情况下,Lift应用程序可以抵抗常见问题(跨站点脚本、重放攻击、跨站点请求伪造)。默认情况下,Lift应用程序可以防止参数篡改。Lift的sitemap定义了站点导航和访问控制规则。这意味着你永远不会有别人不能点击的链接。你不需要有一个外部过滤器(例如,Spring Security),你必须独立于你的应用程序进行配置(哇...移动了一个页面,但忘记了确保Spring Security XML文件已更新。)

哦..。如果你不想使用模板语言,这里有一个完整的Lift Comet聊天组件:

代码语言:javascript
复制
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"/>

票数 11
EN

Stack Overflow用户

发布于 2010-06-24 16:26:19

AJAXed

  • 在我看来,Spring MVC是构建AJAXed/COMETed RIA的一个非常糟糕的选择。ModelAndView组件旨在处理HTML表单并一次呈现整个页面,标记库、验证例程都更适合于基于JSP和模板的老式开发。对我来说,将AJAX/COMET插入Spring MVC永远是一种技巧。但是,如果您打算使用@MVC (与javascript UI互换JSON )构建RESTful服务,它可能会起作用(尽管我更喜欢Jersey/JAXB )。

  • LIFT最初是为使用COMET而设计的,因此它将是一个更好的选择。虽然我会选择比LIFT更轻量级和更少模板的东西(对我来说,它和Spring MVC有同样的问题)。

  • 这两个安全系统只涵盖了基本的场景,并且需要在现实世界的项目中使用很多定制。

这就是我在COMETed中构建Scala RIA时要用到的:

代码语言:javascript
复制
- [Jersey](http://jersey.java.net/) (lightweight RESTful services to communicate with JS UI over HTTP/JSON) + [Atmosphere](https://atmosphere.dev.java.net/) (scalable solution for building COMETed applications) + any JS framework (jquery, YUI, ext js, ...). You should also have a look at [Akka Framework](http://doc.akkasource.org/), which is integrated with the both Jersey and Atmosphere, and allows you building RIA web-apps in idiomatic Scala. Here's a [pub-sub COMET example](http://doc.akkasource.org/comet) in Akka.
- [Vaadin](http://vaadin.com/home) + [ICEPush](http://vaadin.com/directory#addon/icepush). It will be much comfortable combination for you, if you don't want to get your hand dirty with JS (though ICEpush is not an enterprise-ready solution yet).   

票数 2
EN

Stack Overflow用户

发布于 2011-01-17 22:22:52

另一种选择是以纯Java (或任何其他JVM语言,包括Scala)为中心的ItsNat Comet

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3106054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档