Java Web脚本
在浏览器中呈现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可能实现的最简单方法是阅读规范。