基于 Java 组件的框架与基于请求的框架

2022-08-31 21:20:10

我最近在一次采访中被问到 - 在java中,你如何比较基于组件的框架和基于请求的框架?我将EJB解释为基于组件的框架的一个例子,将Struts解释为基于请求的框架,但我不相信我是否对这个问题公正。

关于面试官的意思和应该比较什么的任何想法??

问候, 阿瓦朱鲁格


答案 1

他们最有可能寻找Web框架的例子 - 例如,JSF是一个基于组件的框架,而Struts是一个基于请求的框架。

基于请求的框架通常通过其API清楚地表明,他们正在解析HTML请求/生成HTML响应,而基于组件的框架则试图将其抽象出来,并将应用程序视为具有呈现器和操作的组件集合来执行操作。

在我看来,基于组件的Web框架比它们的价值更麻烦 - 它们的主要目的通常是使不熟悉Web开发的开发人员“更容易”开发Web应用程序的开发,并且更接近传统的桌面开发。但是,在实践中,当出现问题时,您需要开发自定义组件,您需要为不是“开箱即用”的功能自定义框架,等等,您需要了解底层的“传统”Web开发以及基于组件的框架如何抽象它 - 如果您是经验丰富的Web开发人员并且拥有现有的解决方案, 在“传统”Web开发中工作的实用程序,库或代码片段,您将浪费时间重新实现它们以在基于组件的框架内工作。


答案 2

基于请求的框架是一个Web框架,它获取用户的请求,然后确定系统应该做什么,并将响应回馈给用户。所以流量几乎是线性的。你在行动中思考:用户想要什么(请求) - >用户会得到什么(响应)。基于请求的框架的一个例子是Struts。现代Grails也是一个基于请求的框架。

基于组件的框架不是这样的。实际上,从前到后的流动没有清晰的感觉。它的一个例子不是JSF,因为在某种程度上,JSF与Struts几乎完全相同(因为Struts和JSF的创建者是相同的)。基于组件的框架TapestryWicket的一个很好的例子。这两个框架中的范式是不同的。你不是在行动或请求-响应中思考,而是在组件和组件中思考。在应用程序中定义一个组件,并告诉该组件的作用。但是,流不必像基于请求的框架那样是线性的。


推荐