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

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

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

问候,avajurug

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

基于请求的框架通常通过他们的API清楚地表明他们正在parsingHTML请求/生成HTML响应,而基于组件的框架试图将其抽象化并将应用程序视为组件的集合,并将渲染器和操作做事。

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

基于请求的框架是一个Web框架,它获取用户的请求,然后确定系统应该做什么,并将响应回送给用户。 所以stream量几乎是线性的。 你正在考虑的行动:用户想要什么(请求) – >什么用户将回来(回应)。 基于请求的框架的一个例子是Struts 。 现代的Grails几乎是一个基于Request的框架。

基于组件的框架不是那样的。 实际上没有从前到后的stream畅感。 其中一个例子不是JSF,因为从某种angular度来说,JSF和Struts非常相似(因为Struts和JSF的创build者是相同的)。 基于组件的框架Tapestry和Wicket的一个很好的例子。 这两个框架的范式是不同的。 你不要在行动或请求 – 响应,而是组件和组件。 您可以在应用程序中定义一个组件,并告诉组件的function。 但是stream程并不像在基于请求的框架中那样是线性的。

JSF是基于组件的java API,就像Nate说的那样,Struts是一个基于动作的框架,对Http请求进行parsing,同时处理动作,最后控制器将Servlet请求转发给JSP,负责生成响应。 在成为基于组件的Web框架标准的JSF中,实际上不需要处理请求和响应,因为我们只需要编写JSP或XHTML页面,绑定页面中使用的组件或应该呈现的值到支持bean或托pipebean的属性,并且FacesServlet(控制器)完成所有工作,以关注请求分析并redirect到将基于faces-config.xml中指定的导航规则呈现响应的JSP。 正如你所看到的,Struts和JSF之间有很大的区别,因为JSF带来了基于组件事件的方法,而Struts更接近于传统的JSP / Servlet模型。 jpartogi还说JSF和struts的创build者是一样的,我只想提到Struts是Apache社区拥有的框架,而JSF是JCP在版本1.1和JSR-252的JSR-127中指定的API版本1.2,并有不同的实现(SUN-RI,Apache MyFaces …)

简单地说,如果框架在每个Web元素的java对象中有对象,所以你可以改变它的属性或者添加一些function,它是基于组件的框架,但是如果框架没有提供对象,你必须把Web元素的响应值它的标签是一个基于请求的框架。