JSF 托管 bean 如何比普通的 Javax Servlet 更有益[重复]

Posted

技术标签:

【中文标题】JSF 托管 bean 如何比普通的 Javax Servlet 更有益[重复]【英文标题】:How JSF managed bean can be more beneficial than normal Java Servelet [duplicate] 【发布时间】:2015-04-10 10:29:23 【问题描述】:

在 java ee 7 中推荐使用 jsf 作为默认的表示技术。正如他们所说,JSP 已被弃用。

所以从 jsf 开始,我发现它使用了 managedbean,它可以处理事件并向视图提供数据。它还管理页面流。

所以我的问题是:

    是不是真的推荐在java ee中使用jsf模型而不是servlet有什么用?

据我了解,managedbean 在一定程度上扩展了 servlet 功能。

    如果我想在基于 jsf 的应用程序中使用 servlet,我该怎么做?

我可以在 JSF 托管 bean 中使用请求和响应对象吗? 我想像 Servlet 一样根据请求和响应周期手动发送响应。

【问题讨论】:

不,如果您了解我的问题的上下文,这不是重复的。 1) Stack Overflow 不适合这个问题。 2) 不一样。也就是说,在以后的问题中,请每个问题问一个问题。 @BalusC 哪个位置合适? 一个讨论论坛。 Stack Overflow 是一个问答网站,只针对可能有世界上任何人都可以接受的答案的问题,因此只有你自己或只有一半世界。 【参考方案1】:

是的,Java EE 从特定的专用类开始。直到后来才出现了 POJO 趋势,使用注释。 Servlet 形成了最早的 Java EE 技术,但它们仍然非常重要。 JSF 也需要一个 servlet 容器,提供 servlet 相关的类,但是 JSF 的耦合度较低,在传统 web 应用之外还有用处。

    MVC 模型:bean 用于模型,JSF 用于视图,servlet 用于控制器。在准备数据(bean)之后,servlet 可能会forward 到一些 apt view/JSF。对于特殊用例,servlet 可能更适合或至少更直接,PDF 生成,图表。不要忘记 servlet 过滤器

    让 URL 映射到一个 servlet。可能会使用注释。准备 bean,您可以在任何范围内设置和保存它,请求范围是最轻量级和单向的。然后转发:

    request.getRequestDispatcher("/contact.jsf")
        .forward(request, response);
    

    或者来自 ServletContext:

    context.getRequestDispatcher("/context/contact.jsf")
        .forward(request, response);
    

由于网络应用程序有许多技术,您找到了一个很好的可靠起点;尝试其他框架可能会令人耳目一新。

【讨论】:

我没明白最后几句的意思。 您似乎在认真研究 Web 应用程序的主题,Java EE 是一个很好的基础(尤其是在 Web 应用程序框架内部使用它时)。但是对于 Java EE,我们必须意识到还有很多额外的软件。在 Java EE 6 之前,Spring(MVC、Webflow)是“更好”的解决方案。提到那里有一个完整的生态系统, 但今天我更喜欢 java ee 而不是 spring。使用 spring 就像管理 jars 项目。我发现管理很多罐子很困难。罐子也是依赖的,我的意思是我必须选择那个罐子的正确版本。在 java ee 中,它是非常简单的干净 api,不需要外部 jar,直到您使用 java ee 中没有的功能。它比春天还轻。 很高兴听到一些相同的意见,尽管 Spring 是一个大型工具箱,其中包含许多影响 Java EE 6 的好东西,

以上是关于JSF 托管 bean 如何比普通的 Javax Servlet 更有益[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Spring JSF 集成:如何在 JSF 托管 bean 中注入 Spring 组件/服务?

如何以编程方式注册 JSF 托管 bean?

如何将 JSF 托管 bean 属性传递给 JavaScript 函数?

如何引用 JAR 文件中提供的 JSF 托管 bean?

如何从jsf / primefaces中的托管bean向页面添加组件[重复]

将 JSF 托管 bean 迁移到 CDI 托管 bean