JSF,Servlet 和 JSP 有什么区别?

JSP 和 Servlet 之间如何关联? JSP 是某种 Servlet 吗? JSP 和 JSF 如何相互关联? JSF 是某种基于 ASP.NET-MVC 的基于预构建 UI 的 JSP 吗?

答案

JSP(JavaServer 页面)

JSP 是在服务器计算机上运行的Java 视图技术 ,它使您可以用客户端语言(例如 HTML,CSS,JavaScript 等)编写模板文本。 JSP 支持taglibs ,这些标签库由 Java 代码片段支持,可让您动态控制页面流或输出。著名的 taglib 是JSTL 。 JSP 还支持Expression Language ,该语言可用于访问后端数据(通过页面,请求,会话和应用程序范围中可用的属性),通常与 taglib 结合使用。

当首次请求 JSP 或 Web 应用程序启动时,Servlet 容器会将其编译为扩展HttpServlet的类,并在 Web 应用程序的生存期内使用它。您可以在服务器的工作目录中找到生成的源代码。例如在Tomcat 中 ,它是/work目录。根据 JSP 请求,servlet 容器将执行已编译的 JSP 类,并将生成的输出(通常只是 HTML / CSS / JS)通过网络服务器通过网络发送到客户端,客户端再将其显示在网络浏览器中。

小程序

Servlet 是在服务器计算机上运行的Java 应用程序编程接口(API) ,可拦截客户端发出的请求并生成 / 发送响应。 HttpServlet是一个著名的示例,它提供了使用流行的HTTP 方法(例如GETPOST来挂接HTTP请求的方法 。您可以将HttpServlet配置为侦听特定的 HTTP URL 模式,该模式可以在web.xml配置,或者在最近的Java EE 6中通过@WebServlet批注进行配置。

当首次请求 Servlet 或在 Web 应用程序启动期间,Servlet 容器将创建它的一个实例,并将其在 Web 应用程序的生存期内保存在内存中。 URL 匹配 servlet 的 URL 模式的每个传入请求都将重用同一实例。您可以通过访问请求数据HttpServletRequest和处理由响应HttpServletResponse 。这两个对象都可以用作HttpServlet任何重写方法内的方法参数,例如doGet()doPost()

JSF(JavaServer Faces)

JSF 是基于组件的 MVC 框架 ,该框架建立在 Servlet API 之上,并通过可在 JSP 或任何其他基于 Java 的视图技术(例如Facelets)中使用的标记库提供组件 。 Facelets 比 JSP 更适合 JSF。它即提供了强大的模板功能,例如复合组件 ,而 JSP 基本上只提供了<jsp:include>来在 JSF 中进行模板,因此您不得不使用原始 Java 代码创建自定义组件(这有点不透明,而且很多如果您想用单个组件替换重复的组件组,则工作繁琐。从 JSF 2.0 开始,已弃用 JSP 作为支持 Facelets 的视图技术。

注意 :不建议不要使用 JSP 本身,仅建议不要使用 JSF 和 JSP 的组合。

注意 :JSP 通过 Taglib(特别是( Tag File )变体)具有强大的模板功能。缺少与 JSF 结合使用的 JSP 模板。

作为 MVC( 模型 - 视图 - 控制器 )框架,JSF 提供FacesServlet作为唯一的请求 - 响应控制器 。它需要您完成所有标准且繁琐的 HTTP 请求 / 响应工作,例如收集用户输入,验证 / 转换它们,将它们放入模型对象,调用操作并呈现响应。这样,您最终获得了View的 JSP 或 Facelets(XHTML)页面以及 Java 的Model类。 JSF 组件用于将视图与模型绑定(例如 ASP.NET Web 控件所做的工作),而FacesServlet使用JSF 组件树来完成所有工作。

相关问题

参见http://www.oracle.com/technetwork/java/faq-137059.html

JSP 技术是 Java 技术家族的一部分。 JSP 页面被编译到 servlet 中,并且可以调用 JavaBeans 组件(bean)或 Enterprise JavaBeans 组件(企业 bean)来在服务器上执行处理。因此,JSP 技术是基于 Web 的应用程序的高度可扩展体系结构中的关键组件。

参见https://jcp.org/en/introduction/faq

答:JavaServer Faces 技术是用于为 Web 应用程序构建用户界面的框架。 JavaServer Faces 技术包括:

一组 API,用于:表示 UI 组件并管理其状态,处理事件和输入验证,定义页面导航以及支持国际化和可访问性。

JavaServer Pages(JSP)定制标记库,用于表达 JSP 页面内的 JavaServer Faces 接口。

JSP 是一种特殊的 servlet。

JSF 是可以与 JSP 一起使用的一组标记。

从浏览器 / 客户端角度

JSP 和 JSF 看起来都一样,根据 “应用程序需求”,JSP 更适合基于请求 - 响应的应用程序。

JSF 的目标是更丰富的基于事件的 Web 应用程序。我认为事件比请求 / 响应更为精细。

从服务器角度

JSP 页面将转换为 servlet,并且只有很少的行为。

JSF 页面通过专用的 FacesServlet 转换为组件树,并且遵循规范定义的组件生命周期。

Servlet:

Java Servlet API 使 Java 开发人员可以编写服务器端代码来传递动态 Web 内容。与其他专有的 Web 服务器 API 一样,Java Servlet API 的性能比 CGI 更高。但是,它还具有一些其他关键优势。由于 servlet 是用 Java 编码的,因此它们提供了一种面向对象(OO)的设计方法,更重要的是,它们可以在任何平台上运行。因此,相同的代码可以移植到任何支持 Java 的主机上。 Servlet 极大地推动了 Java 的普及,因为它已成为服务器端 Web 应用程序开发中广泛使用的技术。

JSP:

JSP 建立在 servlet 之上,并提供了一个更简单的基于页面的解决方案来为 Web 用户界面生成大量动态 HTML 内容。 JavaServer Pages 使 Web 开发人员和设计人员可以简单地为带有动态 Java 部分的特殊标签编辑 HTML 页面。 JavaServer Pages 通过具有一个称为 JSP 容器的特殊 servlet 来工作,该 servlet 安装在 Web 服务器上并处理所有 JSP 页面视图请求。 JSP 容器将请求的 JSP 转换为 servlet 代码,然后将其编译并立即执行。对同一页面的后续请求只需调用该页面的运行时 servlet。如果对服务器上的 JSP 进行了更改,则查看该请求的请求将触发运行时 servlet 的另一次转换,编译和重新启动。

JSF:

JavaServer Faces 是用于为 Web 应用程序构建用户界面的标准 Java 框架。最重要的是,它简化了用户界面的开发,而用户界面通常是 Web 应用程序开发中较为困难和繁琐的部分之一。
尽管可以使用基础 Java Web 技术(例如 Java servlet 和 JavaServer Pages)来构建用户界面,而无需为企业 Web 应用程序开发设计一个全面的框架,但是这些核心技术通常会导致各种开发和维护问题。更重要的是,当开发人员获得生产质量的解决方案时,将以非标准方式解决由 JSF 解决的同一组问题。 JavaServer Faces 旨在通过以下方式简化 Java Web 应用程序用户界面的开发:
• 它提供了以组件为中心,与客户端无关的开发方法来构建 Web 用户界面,从而提高了开发人员的生产率和易用性。
• 简化了从 Web 用户界面访问和管理应用程序数据的过程。
• 它以一种简单且不受干扰的方式自动管理多个请求和多个客户端之间的用户界面状态。
• 它提供了一个开发框架,该框架适合具有不同技能的多样化开发人员。
• 它描述了 Web 应用程序的标准体系结构模式集。

[ 来源: 完整参考:JSF ]

在某些情况下,您可以选择 JSP 而不是 JSF。应用性质应该是选择技术的决定因素。

如果您具有丰富的 GUI 交互功能,并且需要大量 Java 脚本,那么请青睐 JSF。基本上,如果您的 GUI 应用程序架构像面向组件,甚至像 Swing 一样被驱动,那么 JSF 是最好的。

如果应用程序只是纯表单提交,不需要太多的 GUI 交互,那么如果学习新技术是一项开销,并且不需要复杂的框架,那么 JSP 可以做得很好。

Servlet - 它是 Java 服务器端层。

  • JSP - 使用 html 的 Servlet
  • JSF - 它的组件基于标记库
  • JSP - 服务器收到请求后,它将转换为 servlet。

的确,在执行时将 JSP 转换为 servlet,并且 JSF 完全是新事物,以使网页更具可读性,因为 JSF 允许以标记的形式编写所有编程结构。

Servlet 和 JSP 之间的基本区别在于,在 Servlet 中,我们编写 Java 代码,并在其中嵌入 HTML 代码,而 JSP 则存在相反的情况。在 JSP 中,我们编写 HTML 代码,并使用 JSP 提供的标签嵌入 Java 代码。

Java Server Pages(JSP)是一种 Java 技术,可使 Web 开发人员和设计人员快速开发并轻松维护利用现有业务系统的信息丰富的动态 Web 页面。 JSP 技术将用户界面与内容生成分离开来,使设计人员能够更改整体页面布局,而无需更改底层动态内容。

Facelets是为JSF(Java Server Faces)设计的第一种非 JSP 页面声明语言,与 JSP 相比,它为 JSF 开发人员提供了更简单,更强大的编程模型。它解决了 JSP 中用于 Web 应用程序开发的各种问题。

这是一张表格,比较了小片段和小片段的功能:

在此处输入图片说明 资源

JSP:means HTML+Java Code:

JSP 有其自己的生命周期 jsp_init()jsp_service()jsp_destroy

第一次请求后,JSP 转换为. java 文件。我们正在使用三种类型的标签
1.)无脚本

<%  %>

开发人员可以在这里声明所有要获取数据的内容

2.)表达标签

<%=  %>

在这里,开发人员可以使用一些与打印相关的数据

3.)声明

<!% %>

在这里,开发人员可以声明一些与方法相关的数据。

Servlet:

Servlet 具有自己的生命周期。

init()
service()
destroy()

在第一个请求容器之后,容器将从 web.xml 文件读取数据,然后显示欢迎填充。
现在,执行操作之后,它将继续搜索 url,并在此过程之后将自行搜索特定的 servlet。服务操作将执行。

JSF:

JSF 拥有自己的 ui,并且其生命周期可以以六种方式执行,

A)Restore view phase
B)Apply request values phase
C)Process validations phase
D)Update model values phase
E)Invoke application phase
F)Render response phase

对于此处用于表格的 ui,我们正在使用面板网格,并且为此具有不同的面。

Rich Faces
Prime Faces.