1

经过多年基于 XML/XSLT 的开发后,我来到了 java 世界,我逐渐变得越来越怀疑 - 看起来我错过了 java web 应用程序构建思想中非常重要的东西。

当我们以 xslt 方式思考时,这就是我们构建布局的方式:我们将所需的所有数据聚合到一个 XML 文件中,该文件可以转换为 html 布局。

在一些说明性的基于 XML 的伪语言中,它可能看起来像这样:

   <data xmlns:x="..." xmlns:xi="..."> 
      <x:get url="http://ourrestapi.net/rrrrrest" xpath="/rest/rest/rest[2]">
        <x:param name="sortBy" value="desc" />
      </x:get>
      <x:get url="http://ourrestapi.net/userdata">
        <x:guard test="authorized">
         <x:param name="login" value="john" />
        </x:guard>
      </x:get>
      <xi:include href="common.xml" />
  </data>

我想这足以说明这个想法。所以,这就是我一直试图在 servlets/jsp 世界中实现的方法。毫不奇怪,这个问题归结为一个问题,我相信这是一个经典的 jsp 新手问题:“如何在 jsp 页面中包含 servlet 输出?”

正确的答案是(如果我错了,请纠正我)-我不应该。我应该使用请求链。据我了解(再次,如果我混淆事实,请纠正我)这意味着我应该调用 servletA,它将适当的数据放入当前请求,然后将其转发给 servletB,依此类推。最后,我们重定向到填充了所有属性的页面。

至于我,我至少可以说出这种方法的两个主要困难:

  • 我应该保持重定向的顺序。servletA 现在是否应该重定向到 servletB,或者某些不知道监督对象应该完成的工作。
  • 如果我们将所有内容存储在请求属性中,作为字符串,如果我们需要参数化 servletB 调用关于我们在 servletA 中获得的数据,我们必须提供一些繁琐的序列化/反序列化工作。

所以,我的问题是 -从几个不同的来源将数据添加到 JSP 页面的最佳方法是什么

对不起,如果这些问题对于经验丰富的 JSP 开发人员来说听起来很愚蠢,事实上 Java 世界确实非常庞大且成熟,因此找出真相并不总是那么容易。

4

2 回答 2

0

我不认为 servlet 链接是一种非常流行的填充请求数据的方式,尤其是使用重定向,因为这会清空您的请求。

通常,无论使用什么后端框架(通常也不再是 servlet)都会暴露来自一个或多个服务的数据。

是什么让您认为请求属性必须是字符串?它们可以是您想要的任何类型。请求参数来自JSP 的数据,将是字符串,并且必须使用某种形式的类型转换来从请求参数创建域对象。大多数框架都以一种或另一种形式内置了此功能。

于 2011-12-19T21:25:42.267 回答
0

这是我们在 xslt 中思考时构建布局的方式 [.....] 所以,这就是我一直尝试在 servlets/jsp 世界中实现的方法

为什么?Java 和 XSLT 是不同的野兽。您这样做是因为您的应用程序以 XML 为中心并且 XSLT 赋予您处理它的能力,还是仅仅因为您的大脑固定在 XSLT 思维模式中?

如果您的应用程序以 XML 为核心并且您的方法是合理的,那么也许可以看看应该能够处理 XML 管道的Apache Cocoon 。评论中还提到了其他一些框架,所以我将指出Spring的一个方面:它具有XSLT 视图

如果您的数据不容易转换为 XML,但您正在这样做,以便您可以使用 XSLT 处理它,只是因为您对 XSLT 比 JSP 更熟悉,那么您做错了。

至于从多个来源收集数据,servlet/JSP 链接并不是一个好主意。这些是低级组件,(正如您自己注意到的)需要外部协调来创建应用程序工作流。通常 Servlet/JSP 由构建在它们之上的 Web 框架进行协调。

Java Web 框架主要是 MVC,因此在 MVC 中,您将在模型中收集数据(模型包含业务逻辑和协调以类似于数据),然后将其发送给控制器,控制器将选择适当的视图来呈现数据. 如果您的数据确实是 XML(或可轻松转换为 XML),那么此时 XSLT 视图可能会有所帮助(JSP 并不是真正设计用于处理 XML)。

正如您自己所说,Java 世界“非常、非常庞大和成熟”,因此您可以通过多种方式解决这个问题(即有很多方法可以给猫剥皮)。最终需要合并 JSP 片段吗?SitemeshApache Tiles、自定义JSP 标记、甚至是Portlets怎么样……你可以使用很多框架、库等。

但无论您最终选择何种解决方案,只要确保您使用 Java 思维方式来实现它即可。

于 2012-03-09T20:57:07.123 回答