我最近在接受采访时被问到 - 在java中,如何将基于组件的框架与基于请求的框架进行比较?我将EJB解释为基于组件的框架的示例,将Struts解释为基于请求的框架,但我不相信我是否公正地对待这个问题。
关于面试官的意思和应该比较的内容的任何想法?
的问候, avajurug
答案 0 :(得分:81)
他们很可能正在寻找 web 框架的示例 - 例如,JSF是一个基于组件的框架,而Struts是一个基于请求的框架。
基于请求的框架通常通过他们的API清楚地表明他们正在解析HTML请求/生成HTML响应,而基于组件的框架试图将其抽象出来并将应用程序视为具有渲染器的组件集合和做事的行动。
在我看来,基于组件的Web框架比它们的价值更麻烦 - 它们的主要目的通常是让不熟悉Web开发的开发人员“更容易”开发Web应用程序,并更接近传统的桌面开发。但是,在实践中,当出现问题时,您需要开发自定义组件,您需要为不是“开箱即用”的功能定制框架,等等。您需要了解底层的“传统”Web开发和基于组件的框架如何抽象它 - 如果您是一位经验丰富的Web开发人员并且拥有在“传统”Web开发中工作的现有解决方案,实用程序,库或片段,您将浪费时间重新实现它们以在基于组件的框架内工作。
答案 1 :(得分:24)
基于请求的框架是一个Web框架,它获取用户的请求,然后确定系统应该做什么,并将响应返回给用户。所以流程非常线性。你正在考虑行动:用户想要什么(请求) - >用户将获得什么(响应)。基于请求的框架的示例是Struts。现代Grails几乎也是基于请求的框架。
基于组件的框架不是那样的。实际上从前到后没有明确的流动感。它的一个例子不是JSF,因为在某种程度上,JSF与Struts几乎完全相同(因为creator of Struts and JSF是相同的)。基于组件的框架Tapestry和Wicket的一个很好的例子。这两个框架的范例是不同的。您不会考虑操作或请求 - 响应,而是组件和组件。您可以在应用程序中定义组件,并告诉组件的功能。但是流程不必像基于请求的框架那样是线性的。
答案 2 :(得分:5)
答案 3 :(得分:2)
简单地说,如果框架在每个web元素的java端都有对象,那么你可以更改它的属性或添加一些功能,它是基于组件的框架但是如果框架不提供对象而你必须把响应值放在它的标签之间的web元素是一个基于请求的框架。