JSF,Servlet和JSP有什么区别?

时间:2010-01-19 17:15:42

标签: java jsp jsf servlets java-ee

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

15 个答案:

答案 0 :(得分:1175)

JSP (JavaServer Pages)

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)通过网络发送到客户端,然后客户端将其显示在Web浏览器中。

Servlets

Servlet是在服务器计算机上运行的 Java应用程序编程接口(API),它拦截客户端发出的请求并生成/发送响应。一个众所周知的示例是HttpServlet,它提供了使用热门HTTP(例如GETPOST)来挂钩HTTP methods个请求的方法。您可以将HttpServlet配置为侦听某个HTTP网址格式,该格式可在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之上,并通过taglib提供components,可以在JSP或任何其他基于Java的视图技术中使用,例如Facelets。 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组件树完成所有工作。

相关问题

答案 1 :(得分:78)

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

  

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

请参阅https://jcp.org/en/introduction/faq

  

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

     

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

     

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

JSP是一种特殊的servlet。

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

答案 2 :(得分:31)

从浏览器/客户端角度

JSP和JSF看起来都相同,按照应用程序要求,JSP更适合基于请求 - 响应的应用程序。

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

从服务器角度

JSP页面转换为servlet,它的行为很少。

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

答案 3 :(得分:22)

  

Servlets:

     

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

     

JSP:

     

JSP构建于servlet之上,提供了一个更简单的基于页面的方法   为Web生成大量动态HTML内容的解决方案   用户界面。 JavaServer Pages支持Web开发人员和设计人员   简单地编辑带有动态Java特殊标记的HTML页面   部分。 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解决的同一组问题将在a中得到解决   非标准的方式。 JavaServer Faces旨在简化   为Java Web应用程序开发用户界面   以下方式:
  •它提供以组件为中心的,   用于构建Web用户的独立于客户端的开发方法   界面,从而提高开发人员的生产力和易用性   •它简化了对应用程序数据的访问和管理   Web用户界面。
  •它自动管理用户界面   多个请求和多个客户端之间的状态简单和   不引人注目的方式   •它提供了一个开发框架   对具有不同技能的不同开发者群体友好   •它描述了Web的一组标准体系结构模式   应用

[来源:Complete reference:JSF ]

答案 4 :(得分:15)

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

如果你有丰富的GUI交互和大量的Java脚本需要,那么赞成JSF。基本上,如果您的GUI应用程序架构类似于面向组件的&amp;甚至像Swing一样开车,那么JSF是最好的。

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

答案 5 :(得分:12)

Servlet - 它是java服务器端层。

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

答案 6 :(得分:10)

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

答案 7 :(得分:5)

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

答案 8 :(得分:5)

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

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

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

enter image description here Source

答案 9 :(得分: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.

答案 10 :(得分:-1)

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

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

Jsf是MVC框架的视图组件

答案 11 :(得分:-1)

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

答案 12 :(得分:-1)

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

答案 13 :(得分:-1)

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

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

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

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

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

答案 14 :(得分:-2)

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

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

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