JSF、Servlet和JSP有什么区别?

我有一些问题。这些是:

  1. JSP和Servlet是如何相互关联的?
  2. JSP是某种Servlet吗?
  3. JSP和JSF如何相互关联?
  4. JSF是某种类似于ASP.NET-MVC的基于JSP的预构建UI吗?
449948 次浏览

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

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

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

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

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

JavaServer Pages(JSP)自定义标记用于表达JavaServer的库JSP页面中的面接口。

JSP是一种特殊的servlet。

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

JSP(JavaServer页面)

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

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

Servlet

Servlet是在服务器机器上运行的Java应用程序编程接口(API),它拦截客户端发出的请求并生成/发送响应。一个著名的例子是HttpServlet,它提供了使用流行的HTTP方法(如GETPOST)钩住超文本传输协议请求的方法。您可以配置HttpServlet来监听某个HTTP URL模式,这可以在web.xml中配置,或者最近在JavaEE 6中配置,带有@WebServlet注释。

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

JSF(JavaServer Faces)

JSF是构建在Servlet API之上的基于组件的MVC框架,并通过taglibs提供组件,可用于JSP或任何其他基于Java的视图技术,如Facelets。Facelets比JSP更适合JSF。它提供了很好的模板化能力,如复合组件,而JSP基本上只提供<jsp:include>用于JSF中的模板,因此当您想用单个组件替换重复的组件组时,您必须使用原始Java代码创建自定义组件(这有点不透明,并且有很多繁琐的工作)。自JSF 2.0以来,JSP已被弃用为视图技术,转而使用Facelets。

说明:不建议使用JSP本身,只是不建议使用JSF与JSP的组合。

说明:通过Taglibs,JSP具有强大的模板能力,尤其是(标记文件)变体。JSP模板与JSF结合是所缺乏的。

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

相关问题

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

Servlet-它是Java服务器端层。

  • JSP-它是带有html的Servlet
  • JSF-它是基于标记库的组件
  • JSP-当服务器收到请求时,它会转换为servlet。

从浏览器/客户端的角度

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

JSF面向更丰富的基于事件的Web应用程序。我认为事件比请求/响应更细粒度。

从服务器的角度

JSP页面被转换为servlet,它只有最小的行为。

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

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

如果你需要丰富的GUI交互和大量的Java脚本,那么最好使用JSF。基本上,如果你的GUI应用程序架构是面向组件的,甚至像Swing一样驱动,那么JSF是最好的。

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

Servlet:

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

JSP:

JSP构建在servlet之上,提供了一个更简单的、基于页面的为Web生成大量动态超文本标记语言内容的解决方案用户界面。JavaServer Pages使Web开发人员和设计人员能够若要简单地编辑超文本标记语言页面与特殊标签的动态,Java部分。JavaServer Pages通过具有一个称为一个JSP容器,安装在Web服务器上并处理所有JSP页面浏览量请求JSP转换为servlet代码,然后编译并立即执行。对同一页面的后续请求只需调用运行时servlet对于页面。如果对服务器上的JSP进行了更改,则请求要查看它会触发另一个翻译、编译和重新启动运行时servlet。

JSF:

JavaServer Faces是一个用于构建用户的标准Java框架Web应用程序的接口。最重要的是,它简化了用户交互界面的开发,这往往是一个更Web应用程序开发中困难而乏味的部分。
虽然可以通过使用基本的方法来构建用户界面JavaWeb技术(如Javaservlet和JavaServer页面)没有为企业Web设计的全面框架应用程序开发,这些核心技术往往可以导致各种开发和维护问题。更重要的是,通过当开发人员实现生产质量的解决方案时,JSF解决的同一组问题将在非标准方式。JavaServer Faces旨在简化开发JavaWeb应用程序的用户界面以下方式:
•它提供了一个以组件为中心,构建Web用户的独立于客户端的开发方法界面,从而提高开发人员的生产力和易用性。
它简化了应用程序数据的访问和管理Web用户交互界面。它自动管理用户交互界面多个请求和多个客户端之间的状态不显眼的方式。
它提供了一个开发框架,即对具有不同技能的不同开发人员受众友好。
•它描述了一套标准的web架构模式应用程序。

[来源:完整参考:JSF]

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

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

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

Jsf是MVC框架的一个视图组件

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

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

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

下面是一个比较scriplets和facelets特性的表格:

在此处输入图像描述来源

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

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有自己的用户界面,它的生命周期可以通过六种方式执行,

A)Restore view phaseB)Apply request values phaseC)Process validations phaseD)Update model values phaseE)Invoke application phaseF)Render response phase

对于用户界面,这里是表格,我们使用面板网格,有不同的面。

Rich FacesPrime Faces.

JSF是一个高级框架,其非常容易为项目实现基于模型-视图-控制器(MVC)的架构。JSF相对于JSP的主要优势是基于条件在浏览器上轻松动态呈现组件,并且易于集成ajax事件。

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

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

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

JSF+RichFaces+Hibernate/JPA肯定是一个很好的学习技术!

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

Java服务器页面用于创建动态网页。Jsp被引入在单个文件中编写java plus html代码,这在servlet程序中不容易做到。并且jsp文件在翻译时被转换为java servlet。

Java服务器面是一个MVC Web框架,它简化了UI的开发。

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