【发布时间】:2011-01-06 21:55:33
【问题描述】:
我有一些问题。这些是:
- JSP 和 Servlet 是如何相互关联的?
- JSP 是某种 Servlet 吗?
- JSP 和 JSF 是如何相互关联的?
- JSF 是否是某种基于预构建 UI 的 JSP,例如 ASP.NET-MVC?
【问题讨论】:
-
在 JSF 2.0+ 中,xml 不是必需的。
标签: java jsp jsf servlets jakarta-ee
我有一些问题。这些是:
【问题讨论】:
标签: java jsp jsf servlets jakarta-ee
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(例如GET和POST)来挂钩HTTP请求的方法。您可以将HttpServlets 配置为侦听特定的HTTP URL 模式,该模式可在web.xml 中进行配置,或者最近使用Java EE 6 进行配置,并带有@WebServlet 注释。
当第一次请求 Servlet 或在 Web 应用程序启动期间,Servlet 容器将创建它的一个实例并在 Web 应用程序的生命周期内将其保存在内存中。对于 URL 与 servlet 的 URL 模式匹配的每个传入请求,都将重用相同的实例。您可以通过HttpServletRequest访问请求数据并通过HttpServletResponse处理响应。这两个对象都可用作HttpServlet 的任何重写方法中的方法参数,例如doGet() 和doPost()。
JSF 是一个基于组件的 MVC 框架,它构建在 Servlet API 之上,并通过标记库提供 components,可用于 JSP 或任何其他基于 Java 的视图技术,例如 @987654335 @。 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 组件树 完成所有工作。
【讨论】:
<c:forEach> 标记来自JSTL。另见stackoverflow.com/tags/jstl/info
<mytag:doesSomething/> 看起来像自定义标签,<jsp:attribute> 看起来像 jsp 标签。
Servlet 是在 Web 容器内执行的服务器端 Java 程序。 servlet 的主要目标是处理从客户端收到的请求。
Java Server Pages 用于创建动态网页。引入 Jsp 以在单个文件中编写 java 和 html 代码,这在 servlet 程序中并不容易。而一个jsp文件在翻译的时候会转成java servlet。
Java Server Faces 是一个简化 UI 开发的 MVC Web 框架。
【讨论】:
JSF 是一个高级框架,它非常容易为项目实施基于模型-视图-控制器 (MVC) 的架构。与 JSP 相比,JSF 的主要优点是可以根据条件在浏览器上轻松动态呈现组件,以及轻松集成 ajax 事件。
JSF 应用程序的前端,即 xhtml 文件是通过浏览器显示给用户的文件。这些 xhtml 文件在内部调用托管 bean,例如编写实际应用程序逻辑的控制器。
控制器在内部调用各种与数据库通信的服务(使用 Hibernate 或 JPA API)。简而言之,这就是流程的发生方式。
JSF 还与 RichFaces 结合使用,RichFaces 是一个为您的 Web 应用程序提供丰富外观的框架。
JSF + RichFaces + Hibernate/JPA 是一个值得学习的好技术!
【讨论】:
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.
【讨论】:
Servlet 和 JSP 之间的基本区别在于,在 Servlet 中我们编写 java 代码,并且我们嵌入了 HTML 代码,而 JSP 只是相反的情况。 在 JSP 中,我们编写 HTML 代码,并使用 JSP 提供的标签嵌入 java 代码。
【讨论】:
JSP 是 MVC(模型视图控制器)的视图组件。控制器接收传入的请求并将其传递给模型,模型可能是一个执行某些数据库访问的 bean。然后 JSP 使用 HTML、CSS 和 JavaScript 格式化输出,然后将输出发送回请求者。
【讨论】:
Servlet - 它是 Java 服务器端层。
【讨论】:
Java 服务器页面 (JSP) 是一种 Java 技术,它使 Web 开发人员和设计人员能够利用现有业务系统快速开发和轻松维护信息丰富的动态 Web 页面。 JSP 技术将用户界面与内容生成分开,使设计人员能够在不改变底层动态内容的情况下更改整体页面布局。
Facelets 是第一个为 JSF (Java Server Faces) 设计的非 JSP 页面声明语言,与 JSP 相比,它为 JSF 开发人员提供了更简单、更强大的编程模型.它解决了在 JSP 中用于 Web 应用程序开发的不同问题。
这是一个比较 scriplet 和 facelets 的特征的表格:
【讨论】:
JSP 代表 JAVA SERVER PAGE........ jsp 不是 servlet。 Jsp本身使用代码和HTML标签,你不需要单独制作HTML和servlet。Jsp在Web应用程序中发挥着巨大的作用。 Servlet是一个java类,起到了让你的HTML页面从静态变为动态的作用。
【讨论】:
Jsp 也有内置的 servlet 代码,不需要任何外部编译就可以直接运行。更改将直接在浏览器中的 jsp 中生效。
Servlet 需要编译(即它会有特定的类创建)
jsf是MVC框架的视图组件
【讨论】:
见http://www.oracle.com/technetwork/java/faq-137059.html
JSP 技术是 Java 的一部分 技术家族。 JSP 页面是 编译成 servlet 并且可以调用 JavaBeans 组件(bean)或 企业 JavaBeans 组件 (企业豆)执行 在服务器上处理。因此,JSP 技术是一个关键组成部分 高度可扩展的架构 基于网络的应用程序。
见https://jcp.org/en/introduction/faq
答:JavaServer Faces 技术是一种 构建用户界面的框架 用于网络应用程序。 JavaServer Faces 技术包括:
一组 API 用于:表示 UI 组件和管理它们的状态, 处理事件和输入验证, 定义页面导航,以及 支持国际化和 可访问性。
JavaServer Pages (JSP) 自定义标记 用于表示 JavaServer 的库 JSP 页面中的 Faces 接口。
JSP 是一种特殊的 servlet。
JSF 是一组可用于 JSP 的标记。
【讨论】:
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 开发人员和设计人员 简单地编辑带有特殊标签的 HTML 页面,用于动态 Java 部分。 JavaServer Pages 通过一个特殊的 servlet 工作,称为 一个 JSP 容器,它安装在 Web 服务器上并处理所有 JSP 页面查看请求。 JSP 容器翻译一个请求的 JSP 转换成 servlet 代码,然后编译并立即执行。 对同一页面的后续请求只需调用运行时 servlet 为页面。如果对服务器上的 JSP 进行了更改,则请求 查看它会触发另一个翻译、编译和重新启动 运行时 servlet。
JSF:
JavaServer Faces 是用于构建用户的标准 Java 框架 Web 应用程序的接口。最重要的是,它简化了 用户界面的开发,这通常是其中之一 Web 应用程序开发中困难和乏味的部分。
虽然可以使用基础构建用户界面 Java Web 技术(如 Java servlet 和 JavaServer Pages) 没有为企业 Web 设计的综合框架 应用程序开发,这些核心技术往往可以导致 各种开发和维护问题。更重要的是,通过 开发人员获得生产质量解决方案的时间, JSF 解决的同一组问题将在一个 非标准方式。 JavaServer Faces 旨在简化 为 Java Web 应用程序开发用户界面 以下方式:
• 它提供以组件为中心, 独立于客户端的开发方法来构建 Web 用户 接口,从而提高开发人员的工作效率和易用性。
• 它简化了对应用程序数据的访问和管理。 网络用户界面。
• 它自动管理用户界面 多个请求和多个客户端之间的简单状态 不显眼的方式。
• 它提供了一个开发框架, 对具有不同技能的多元化开发者受众友好。
• 它描述了 Web 的一组标准架构模式 应用。
【讨论】:
在某些情况下,您可以选择 JSP 而不是 JSF。应用性质应该是选择技术的决定性因素。
如果您有丰富的 GUI 交互并且需要大量 Java 脚本,那么请选择 JSF。基本上,如果您的 GUI 应用架构像面向组件甚至像 Swing 那样驱动,那么 JSF 是最好的。
如果应用程序只是一个简单的表单提交,不需要太多的 GUI 交互,那么如果学习新技术是开销并且不需要复杂的框架,那么 JSP 可以做得很好。
【讨论】:
从浏览器/客户端的角度来看
JSP 和 JSF 看起来都一样,根据应用程序需求,JSP 更适合基于请求 - 响应的应用程序。
JSF 的目标是更丰富的基于事件的 Web 应用程序。我认为事件比请求/响应更精细。
从服务器的角度来看
JSP 页面被转换为 servlet,它只有极少的行为。
JSF 页面被转换为组件树(通过专门的 FacesServlet),它遵循规范定义的组件生命周期。
【讨论】:
没错,JSP在执行的时候就被转成了servlet,而JSF是全新的东西,为了让网页更具可读性,因为JSF允许以标签的形式编写所有的编程结构。
【讨论】: