ChatGPT解决这个技术问题 Extra ChatGPT

JSF、Servlet 和 JSP 有什么区别?

我有一些问题。这些是 :

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

在 JSF 2.0+ 中,xml 不是必需的。

C
Community

JSP(Java 服务器页面)

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

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

小服务程序

Servlet 是运行在服务器机器上的Java 应用程序编程接口(API),它拦截客户端发出的请求并生成/发送响应。一个著名的示例是 HttpServlet,它提供了使用流行的 HTTP methods(例如 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)中使用的标签库提供 components。 Facelets 比 JSP 更适合 JSF。它提供了很棒的 templating capabilities 例如 composite components,而 JSP 基本上只提供 <jsp:include> 用于 JSF 中的模板化,因此您不得不使用原始 Java 代码创建自定义组件(这有点不透明并且很多繁琐的工作)当您想用单个组件替换一组重复的组件时。从 JSF 2.0 开始,JSP 作为视图技术被弃用,取而代之的是 Facelets。

注意:不推荐使用 JSP 本身,仅不推荐使用 JSF 与 JSP 的组合。

注意:JSP 通过 Taglibs 具有强大的模板能力,尤其是 (Tag File) 变体。 JSP 模板与 JSF 的结合是缺乏的。

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

相关问题

ASP.NET / PHP 的主流 Java 替代方案是什么?

Java EE Web 开发,我需要什么技能?

servlet 是如何工作的?实例化、会话变量和多线程

什么是 Javabean,它们在哪里使用?

如何避免 JSP 文件中的 Java 代码?

JSF MVC 框架中的 MVC 是哪些组件?

当可以使用 jQuery 和 AngularJS 等 JavaScript 库来实现 UI 时,需要 JSF 吗?


@BalusC:我已经看到在 jsp 中使用这种类型的代码而不是 java 代码 - 这是什么?
@Shashank:不完全是。只有 <c:forEach> 标记来自 JSTL。另请参阅stackoverflow.com/tags/jstl/info
是的。 <mytag:doesSomething/> 看起来像自定义标记,而 <jsp:attribute> 看起来像 jsp 标记。
由于这是一个非常受欢迎的答案,我想添加一个非常重要的部分,即 JSP tag files,它允许为页面组合和布局创建自定义标签,而无需编写 Java 代码。此功能非常有用,多年来一直是标准的一部分,但仍未得到充分利用。
自 2009 年发布 Java EE 6 (docs.oracle.com/javaee/6/tutorial/doc/giepx.html) 以来,@johnny Facelets 一直是首选的视图技术。开发 Java Web 应用程序的最低技术集并不比大多数其他语言高,但有更多的选择和竞争对手,这让新手感到困惑。 Ruby 中的 Web 开发?第一个选择很明显。
T
Tarik

请参阅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 是一种特殊的 servlet。JSF 是一组可以与 JSP 一起使用的标签。”这句话最能说明三者之间的关系!
V
Vh24

从浏览器/客户端的角度

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

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

从服务器的角度

JSP 页面被转换为 servlet,它只有极少的行为。

JSF 页面被转换为组件树(通过专门的 FacesServlet),它遵循规范定义的组件生命周期。


K
Kishor Prakash

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 工作,该容器安装在 Web 服务器上并处理所有 JSP 页面查看请求。 JSP 容器将请求的 JSP 转换为 servlet 代码,然后编译并立即执行。对同一页面的后续请求只需调用该页面的运行时 servlet。如果对服务器上的 JSP 进行了更改,则查看它的请求会触发运行时 servlet 的另一次翻译、编译和重新启动。 JSF:JavaServer Faces 是一个标准的 Java 框架,用于为 Web 应用程序构建用户界面。最重要的是,它简化了用户界面的开发,这通常是 Web 应用程序开发中比较困难和乏味的部分之一。尽管在没有为企业 Web 应用程序开发设计的综合框架的情况下,可以使用基础 Java Web 技术(如 Java servlet 和 JavaServer Pages)来构建用户界面,但这些核心技术往往会导致各种开发和维护问题。更重要的是,当开发人员获得生产质量的解决方案时,JSF 解决的同一组问题将以非标准方式解决。 JavaServer Faces 旨在通过以下方式简化 Java Web 应用程序用户界面的开发: • 它提供了一种以组件为中心、独立于客户端的开发方法来构建 Web 用户界面,从而提高了开发人员的工作效率和易用性。 • 它简化了从 Web 用户界面访问和管理应用程序数据的过程。 • 它以简单且不显眼的方式自动管理多个请求和多个客户端之间的用户界面状态。 • 它提供了一个开发框架,对具有不同技能的不同开发人员受众友好。 • 它描述了 Web 应用程序的一组标准架构模式。

[来源:Complete reference:JSF]


不是我,但我想这是因为您基本上只是复制并粘贴了书中的答案。
@Oberon:感谢您的回复。我花了一段时间才找到确切的单词,所以去找书了。如果不合适,那么您或任何人都可以建议我记下答案。我很乐意这样做。
K
Karthi

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

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

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


K
Koray Tugay

Servlet - 它是 Java 服务器端层。

JSP - 它是带有 html 的 Servlet

JSF - 它是基于标签库的组件

JSP - 当服务器收到请求时,它会转换为 servlet。


当服务器收到请求时,JSP 会转换为 servlet。
...当服务器收到第一个请求时。头脑缓存。
m
mahesh

没错,JSP 在执行的时候就被转换成 servlet,而 JSF 是全新的东西,为了让网页更具可读性,因为 JSF 允许以标签的形式编写所有的编程结构。


L
L Joey

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


Y
Yster

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

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

这是一个比较 scriplet 和 facelets 的特征的表格:

https://i.stack.imgur.com/fzG9m.png


L
L Joey
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 here for table here,我们使用面板网格,并且有不同的面孔。

Rich Faces
Prime Faces.

m
metrangia

JSP 是 MVC(模型视图控制器)的视图组件。控制器接收传入的请求并将其传递给模型,模型可能是一个执行某些数据库访问的 bean。然后,JSP 使用 HTML、CSS 和 JavaScript 格式化输出,然后将输出发送回请求者。


N
Nikhil

JSF 是一个高级框架,它非常容易为项目实现基于模型-视图-控制器 (MVC) 的架构。与 JSP 相比,JSF 的主要优点是可以根据条件在浏览器上轻松动态呈现组件,以及轻松集成 ajax 事件。

JSF 应用程序的前端,即 xhtml 文件是通过浏览器显示给用户的文件。这些 xhtml 文件在内部调用托管 bean,例如编写实际应用程序逻辑的控制器。

控制器在内部调用与数据库通信的各种服务(使用 Hibernate 或 JPA API)。简而言之,这就是流程的发生方式。

JSF 还与 RichFaces 结合使用,RichFaces 是一个为您的 Web 应用程序提供丰富外观的框架。

JSF + RichFaces + Hibernate/JPA 是一个值得学习的好技术!


t
taoufik

JSP 代表 JavaServer Pages,而 JSF 代表 JavaServer Faces。 JSP 是一种帮助开发人员使用 HTML、XML 和其他类似语言等技术开发动态网页的技术。 JSF 是一个帮助开发人员为服务器端应用程序开发用户界面的框架。这两种技术都基于 Java,它们主要用于基于 Web 的应用程序。 JSP 更像 ASP 或 PHP,只是它基于 Java,这意味着它使用 Java 编程语言。这两种技术都是由 Sun Microsystems 开发的。有趣的是,JSP 1.x 版本使用 JSP 作为模板的默认系统,但 JSP 2.x 使用 Facelets 而不是 JSP。


M
Mahender Reddy Yasa

Jsp 也有内置的 servlet 代码,不需要任何外部编译,可以直接运行。更改将直接在浏览器中的 jsp 中生效。

Servlet 需要编译(即它会有特定的类创建)

jsf是MVC框架的视图组件


R
Roopam

JSP 代表 JAVA SERVER PAGE........ jsp 不是 servlet。 Jsp本身使用代码和HTML标签,你不需要单独制作HTML和servlet。Jsp在Web应用程序中发挥着巨大的作用。 Servlet 是一个 java 类,起到使你的 HTML 页面从静态变为动态的作用。


JSP 确实被转换为 Servlet 组件。 “JSP 在运行时被翻译成 servlet”。来源:en.wikipedia.org/wiki/JavaServer_Pages
H
Hetal Rachh

Servlet 是在 Web 容器内执行的服务器端 Java 程序。 servlet 的主要目标是处理从客户端收到的请求。

Java Server Pages 用于创建动态网页。引入 Jsp 以在单个文件中编写 java 和 html 代码,这在 servlet 程序中并不容易。而一个jsp文件在翻译的时候会被转换成一个java servlet。

Java Server Faces 是一个简化 UI 开发的 MVC Web 框架。