JSF,Servlet和JSP有什么区别?


826

我有一些疑问。这些是 :

  1. JSP和Servlet之间如何关联?
  2. JSP是某种Servlet吗?
  3. JSP和JSF如何相互关联?
  4. JSF是某种基于 ASP.NET-MVC的基于Pre-Build UI的JSP吗?

3
在JSF 2.0+中,不需要xml。
Divyesh Kanzariya

Answers:


1228

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方法(例如和)挂接HTTP请求的方法。您可以将进行配置以侦听特定的HTTP URL模式,该模式可以在中进行配置,或者在Java EE 6中通过注解进行更新。GETPOSTHttpServletweb.xml@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基本上仅提供JSF中的for模板功能,因此当您使用原始Java代码(这有点不透明且繁琐的工作)时,您不得不创建自定义组件。您想要用单个组件替换重复的组件组。从JSF 2.0开始,已弃用JSP作为支持Facelets的视图技术。 <jsp:include>

注意:不建议不要使用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组件树来完成所有工作。

相关问题


8
@Shashank:不完全是。只有<c:forEach>标记来自JSTL。另请参见stackoverflow.com/tags/jstl/info
BalusC 2012年

1
是。<mytag:doesSomething/>看起来像一个自定义标签和<jsp:attribute>一个jsp标签。
Shashank Kadne 2012年

3
由于这是一个非常受欢迎的答案,因此我想添加一个非常重要的部分,即JSP标记文件,该文件允许在不编写Java代码的情况下为页面组成和布局创建自定义标记。该功能非常有用,多年来一直是该标准的一部分,但仍未得到充分利用。
jiggy 2014年

1
自2009年发布Java EE 6(docs.oracle.com/javaee/6/tutorial/doc/giepx.html)以来,@ johnny Facelets一直是首选的视图技术。开发Java Web应用程序的最低技术要求并不比大多数其他语言高,但是有更多选择和竞争者,这使新手感到困惑。用Ruby进行Web开发?首选是显而易见的。
DavidS 2014年

1
@BalusC +1详细说明。我最喜欢的答案。
阿尼什·B

84

参见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一起使用的一组标记。


6
“ JSP是一种特殊的servlet。JSF是可以与JSP一起使用的一组标记。” 此声明最能描述这三个之间的关系!
lfree

34

从浏览器/客户端角度

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

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

从服务器角度

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

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


23

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 ]


3
不是我,而是我想这是因为您基本上只是复制并粘贴书中的答案。
mawburn

7
@Oberon:感谢您的答复。我花了一段时间才找到确切的单词,所以才去找书。如果不合适,那么您或任何人都可以建议我拒绝回答。我会很高兴做到这一点。
基什·普拉卡什

18

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

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

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


13

Servlet-它是Java服务器端层。

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

2
服务器收到请求后,JSP就会立即转换为servlet。
闲扯

...当服务器收到FIRST请求时。头脑缓存。
dbalakirev

10

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


6

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


5

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

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

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

在此处输入图片说明 资源


0
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.

-1

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


-1

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

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

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

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

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


-2

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

Servlet需要进行编译(即将创建特定的类)

Jsf是MVC框架的视图组件


-2

JSP代表JAVA SERVER PAGE ........ jsp不是servlet。Jsp本身就使用代码和HTML标记,您不需要分别制作HTML和servlet。Jsp在Web应用程序中扮演着重要的角色。Servlet是一个Java类,它使HTML页面从静态变为动态。


2
实际上,JSP已转换为Servlet组件。“在运行时将JSP转换为servlet”。来源:en.wikipedia.org/wiki/JavaServer_Pages
dbalakirev

-2

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.