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

时间:2009-08-08 00:44:01

标签: java frameworks struts ejb components

我最近在接受采访时被问到 - 在java中,如何将基于组件的框架与基于请求的框架进行比较?我将EJB解释为基于组件的框架的示例,将Struts解释为基于请求的框架,但我不相信我是否公正地对待这个问题。

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

的问候, avajurug

4 个答案:

答案 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是相同的)。基于组件的框架TapestryWicket的一个很好的例子。这两个框架的范例是不同的。您不会考虑操作或请求 - 响应,而是组件和组件。您可以在应用程序中定义组件,并告诉组件的功能。但是流程不必像基于请求的框架那样是线性的。

答案 2 :(得分:5)

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 ......)

答案 3 :(得分:2)

简单地说,如果框架在每个web元素的java端都有对象,那么你可以更改它的属性或添加一些功能,它是基于组件的框架但是如果框架不提供对象而你必须把响应值放在它的标签之间的web元素是一个基于请求的框架。