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

基于Java组件的框架与基于请求的框架,java,frameworks,struts,ejb,components,Java,Frameworks,Struts,Ejb,Components,我最近在一次采访中被问到——在java中,如何比较基于组件的框架和基于请求的框架?我将EJB解释为基于组件的框架的示例,将Struts解释为基于请求的框架,但我不相信我是否公正地回答了这个问题 有没有关于面试官的意思和应该比较什么的想法 问候,, avajurug他们很可能在寻找web框架的示例,例如,JSF是一个基于组件的框架,Struts是一个基于请求的框架 基于请求的框架通常通过其API清楚地表明,它们正在解析HTML请求/生成HTML响应,而基于组件的框架则试图将其抽象出来,并将应用程序

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

有没有关于面试官的意思和应该比较什么的想法

问候,,
avajurug

他们很可能在寻找web框架的示例,例如,JSF是一个基于组件的框架,Struts是一个基于请求的框架

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


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

基于请求的框架是一个web框架,它获取用户的请求,然后确定系统应该做什么,并将响应返回给用户。因此,流量基本上是线性的。您在行动中思考:用户想要什么(请求)->用户将得到什么(响应)。基于请求的框架的一个例子是。modern也是一个基于请求的框架


基于组件的框架并非如此。实际上,从前面到后面的流动并没有清晰的感觉。一个例子不是JSF,因为JSF在某种程度上与Struts非常相似(因为两者是相同的)。一个基于组件的框架和应用程序的好例子。这两个框架中的范式是不同的。您不会在动作或请求响应中思考,而是组件和组件。您可以在应用程序中定义一个组件,并告诉该组件做什么。但是,在基于请求的框架中,流不必是线性的。

JSF是基于组件的java API,正如Nate所说,Struts是基于动作的框架,Http请求被解析,同时处理动作,最后ControllerServlet将请求转发给负责生成响应的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版指定的API,JSR-252为1.2版指定的API,并且有不同的实现(SUN-RI,Apache MyFaces…

,如果框架中的每个web元素都有java端的对象,这样您就可以更改它的属性或添加一些功能,那么它是基于组件的框架,但是如果框架不提供对象,并且您必须将web元素的响应值放在标记之间,那么它就是基于请求的框架。

。我想你是对的,他们可能指的是网络框架。我不熟悉JSF,因此无法解释。谢谢你的回答。+1的回答很好。在使用Struts和JSF几年之后,我得出了类似的结论。这取决于制作Web应用程序的工作流程。如果你想拥有一个可重用的组件供许多不同的项目使用,那么基于组件的框架非常好;如果你只需要发送和接收Http请求和Http响应,那么基于操作的框架非常好(在Ajax应用程序中非常有用)。JSF不能归类为非基于组件的框架。请参考JSF规范。JSF2.x Primefaces拥有丰富的UI组件。JSF确实是一个基于组件的框架。虽然JSF保存了请求-响应周期之间的视图状态,但Tapestry 4(不知道Tapestry 5)总是在请求开始时返回页面的原始状态。两者都有优点和缺点,但都是基于组件的框架。Struts和JSF的创建者是相同的这一事实并不意味着两者将几乎相同;它们可能是也可能不是。这个组件是什么?