Java Web脚本

时间:2020-03-05 18:59:04  来源:igfitidea点击:

在浏览器中呈现Java进程生成的数据的好方法是什么?

我广泛使用了JSP和各种相关框架(JSTL,Struts,Tapestry等),以及与JSP不相关的更全面的框架(GWT,OpenLaszlo)。在大多数情况下,没有一种解决方案能够完全令人满意,因为对于我的需求而言,该框架过于受限或者过于复杂,而其他解决方案则需要对现有代码进行大量重构。此外,大多数框架似乎都存在性能问题。

当前,我倾向于通过返回JSON的简单servlet公开Java数据,然后使用PHP或者Ruby呈现数据的解决方案。这具有立即将我的服务作为Web服务公开的额外好处,但是我想知道是否在这里重新发明了轮子。

解决方案

回答

也许我们可以将数据生成为XML并使用XSLT进行渲染?

如果Java对我们来说不够快,我不确定PHP还是Ruby是答案!

回答

我们正在使用条纹。与直接的servlet相比,它提供了更多的结构,但它允许我们通过@UrlBinding批注控制网址。我们使用它将xml和json流回到浏览器以获取ajax内容。

如果我们想走这条路,可以轻松地用另一种技术来使用它,但实际上我们可能会喜欢条纹式开发。

回答

查看Restlet,了解一个用于将域模型作为REST服务(包括JSON和琐碎的XML输出)公开的良好框架。

为了呈现信息,也许我们可​​以在客户端使用GWT并使用数据服务?如果GWT不能让船浮起,那么JQuery可以吗?

回答

我个人使用Tapestry 5用Java创建网页,但是我同意有时候它可能会有点过大。我将研究使用JAX-RS(java.net项目,jsr311),它非常简单易用,它支持开箱即用地对XML进行编组和解组。可以通过Jettison将其扩展为支持JSON。

我尝试了两种实现:

  • 泽西岛-JAX-RS的参考实现。
  • Resteasy-我更喜欢的实现,为编排和解编各种格式提供了良好的支持。也相当稳定,并具有比泽西岛更多的功能。

看一下以下代码,以了解JAX-RS可以为我们做些什么:

@Path("/")
class TestClass {
    @GET
    @Path("text")
    @Produces("text/plain")
    String getText() {
        return "String value";
    }
}

这个小类将在服务器的根目录(类中的@Path)公开自己,然后在URI / text中公开getText()方法,并允许通过HTTP GET访问它。 @Produces注释告诉JAX-RS框架尝试将方法的结果转换为纯文本。

了解JAX-RS可能实现的最简单方法是阅读规范。