我最近在一次采访中被问到 - 在 java 中,你如何比较基于组件的框架和基于请求的框架?我将 EJB 解释为基于组件的框架的示例,将 Struts 解释为基于请求的框架,但我不相信我是否公正地解决了这个问题。
关于面试官的意思和应该比较什么的任何想法?
问候, avajurug
我最近在一次采访中被问到 - 在 java 中,你如何比较基于组件的框架和基于请求的框架?我将 EJB 解释为基于组件的框架的示例,将 Struts 解释为基于请求的框架,但我不相信我是否公正地解决了这个问题。
关于面试官的意思和应该比较什么的任何想法?
问候, avajurug
他们最有可能在寻找Web框架的示例——例如,JSF 是一个基于组件的框架,而 Struts 是一个基于请求的框架。
基于请求的框架通常通过其 API 清楚地表明它们正在解析 HTML 请求/生成 HTML 响应,而基于组件的框架试图将其抽象出来并将应用程序视为具有渲染器和操作的组件的集合做事。
在我看来,基于组件的 Web 框架比它们的价值要麻烦得多——它们的主要目的通常是让不熟悉 Web 开发的开发人员“更容易”开发 Web 应用程序,并且更接近传统的桌面开发。然而,在实践中,当出现问题时,您需要开发自定义组件,您需要为非“开箱即用”功能的东西自定义框架等等。您需要了解底层的“传统”Web 开发以及基于组件的框架如何对其进行抽象——如果您是一位经验丰富的 Web 开发人员,并且拥有适用于“传统”Web 开发的现有解决方案、实用程序、库或片段,那么您
基于请求的框架是一个 Web 框架,它获取用户的请求,然后确定系统应该做什么并将响应返回给用户。所以流量几乎是线性的。您正在考虑采取行动:用户想要什么(请求)-> 用户将得到什么(响应)。基于请求的框架的一个例子是Struts。现代的Grails几乎也是一个基于请求的框架。
基于组件的框架不是这样的。从前到后实际上没有清晰的流动感。它的一个例子不是 JSF,因为在某些方面 JSF 与 Struts 几乎完全相同(因为Struts 和 JSF 的创建者是相同的)。基于组件的框架Tapestry和Wicket的一个很好的例子。这两个框架中的范式是不同的。你思考的不是行动或请求-响应,而是组件和组件。您在应用程序中定义一个组件,并告诉该组件做什么。但是流程不必像在基于请求的框架中那样是线性的。
JSF 是基于组件的 java API,正如 Nate 所说,Struts 是一个基于动作的框架,Http 请求被解析,同时处理动作最终由控制器 Servlet 将请求转发给负责生成响应的 JSP。虽然在 JSF 中已成为基于组件的 Web 框架的标准,但实际上不需要处理请求和响应,因为我们只需要编写 JSP 或 XHTML 页面,绑定页面中使用的组件或它们应该呈现的值到支持 bean 或托管 bean 中的属性,FacesServlet(控制器)完成所有工作来关心请求解析和重定向到 JSP,该 JSP 将根据 faces-config.xml 中指定的导航规则呈现响应。因此,您可以看到 Struts 和 JSF 之间存在很大差异,因为 JSF 带来了基于组件事件的方法,而 Struts 更接近经典的 JSP/Servlet 模型。还有一点 jpartogi 说过 JSF 和 struts 的创建者是一样的,我只想提一下,Struts 是 Apache 社区拥有的框架,而 JSF 是 JCP 在 JSR-127 中为 1.1 版和 JSR-252 指定的 API适用于 1.2 版并具有不同的实现(SUN-RI、Apache MyFaces...)
简单地说,如果框架在 java 端为每个 web 元素都有对象,那么你可以更改它的属性或添加一些功能,它是基于组件的框架,但是如果框架不提供对象,你必须将 web 元素的响应值放在两者之间它的标签是一个基于请求的框架。