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

use*_*014 49 java struts components frameworks ejb

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

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

问候,avajurug

Nat*_*ate 83

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

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

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

  • +1给出了很好的答案.几年后使用Struts和JSF,我得出了类似的结论. (4认同)

Jos*_*ogi 24

基于请求的框架是一个Web框架,它获取用户的请求,然后确定系统应该做什么,并将响应返回给用户.所以流程非常线性.您正在考虑行动:用户想要什么(请求) - >用户将返回什么(响应).基于请求的框架的一个例子是Struts.现代Grails也是一个基于请求的框架.

基于组件的框架不是那样的.实际上从前到后没有明确的流动感.它的一个例子不是JSF,因为在某些方面JSF与Struts几乎完全相同(因为Struts和JSF创建者是相同的).基于组件的框架TapestryWicket的一个很好的例子.这两个框架的范例是不同的.您不会考虑操作或请求 - 响应,而是组件和组件.您可以在应用程序中定义组件,并告诉组件的功能.但是流程不必像基于请求的框架那样是线性的.


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