Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 聚合JSP页面的最佳方法,就像我们构建乐高一样_Java_Design Patterns_Servlets_Requestdispatcher - Fatal编程技术网

Java 聚合JSP页面的最佳方法,就像我们构建乐高一样

Java 聚合JSP页面的最佳方法,就像我们构建乐高一样,java,design-patterns,servlets,requestdispatcher,Java,Design Patterns,Servlets,Requestdispatcher,经过多年的基于XML/XSLT的开发,我来到了java世界,我逐渐变得越来越怀疑——看起来我在java web应用程序构建思想中遗漏了一些真正重要的东西 当我们以xslt方式思考时,这就是我们构建布局的方式:我们将所需的所有数据聚合到一个XML文件中,该文件可以转换为html布局 在一些基于伪XML的说明性语言中,它可以如下所示: <data xmlns:x="..." xmlns:xi="..."> <x:get url="http://ourrestap

经过多年的基于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>
我想这足以说明这个想法。 所以,这就是我一直试图在servlet/jsp世界中实现的方法。 毫不奇怪,这个问题归结为一个问题,我相信这是一个典型的jsp新手问题:如何在jsp页面中包含servlet输出

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

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

我应该把重定向的顺序放在某个地方。不管servletA现在是否应该重定向到servletB,还是一些,都不知道监控对象应该做这项工作。 如果我们将所有内容都存储在请求属性中,作为字符串,以防我们需要对servletA中获得的数据参数化servletB调用,那么我们必须提供一些繁琐的序列化/反序列化工作。 所以,我的问题是——从几个不同的来源向JSP页面添加数据的最佳方法是什么


请原谅,如果这些问题对经验丰富的JSP开发人员来说听起来很愚蠢的话,事实是java世界真的非常巨大和成熟,所以要找出真相并不总是那么容易

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

通常,无论使用的是什么后端框架(不再通常使用servlet),它们都将公开来自一个或多个服务的数据

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

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

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

如果您的应用程序的核心是XML,并且您的方法是合理的,那么可以看看谁应该能够处理XML管道。评论中还提到了一些其他框架,因此我将指出其中一个方面:它已经

如果您的数据不容易转换为XML,但您这样做是为了使用XSLT处理数据,因为XSLT比JSP更为熟悉,那么您就错了

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

Java web框架大多是MVC,因此在MVC中,您将在包含业务逻辑和协调的模型中收集数据,以便与数据相似,然后将其发送给控制器,控制器将选择适当的视图来呈现数据。如果您的数据确实是XML或易于转换为XML,那么此时XSLT视图可以帮助JSP处理XML

正如你自己所说,Java世界真的非常巨大和成熟,所以你可以用很多方法来解决这个问题,也就是说,有很多方法可以剥猫皮。最终需要合并JSP片段吗?那么,定制,甚至。。。。你可以使用很多框架、库等


但无论最终选择什么解决方案,只要确保您使用Java思维来实现它。

您检查过JSP的后续Facelets吗?它是基于XML的,并提供了强大的模板可能性。下面是几个示例的入口点:从不同来源获取数据应该只委托给支持bean。@BalusC-我应该吗?我的话没有讽刺意味,一点也没有!你是一个非常了解java开发的人,我也应该这样做吗?学习Facelets并总是使用它们而不是jsp值得吗?在jsp中,最好的XML选择是我们
ing也称为JSP文档和/或。JSPX实际上并没有Facelets好,JSTL XML taglib不鼓励用于原型设计以外的其他目的,因为它将控制器和视图紧密结合在一起。您能说出您最喜欢的框架吗?我将尝试找出在那里使用的方法是什么?@shabunc I相当于框架中立;最近我使用了Grails、Rails、Spring、Struts2和Frontman。还有一点JSF。Grails、Spring和Struts2都非常相似,数据是从一个或多个服务聚合的,并作为请求或会话属性公开的。除了前端的人非常轻的重量,他们都支持在一种或另一种方式类型转换。