协慌网

登录 贡献 社区

JSF,Servlet 和 JSP 有什么区别?

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

答案

JSP(JavaServer Pages)

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

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

Servlet 的

Servlet 是在服务器计算机上运行的Java 应用程序编程接口(API) ,它拦截客户端发出的请求并生成 / 发送响应。一个众所周知的例子是HttpServlet ,它提供了使用流行的HTTP 方法 (如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 之上,并通过 taglibs 提供组件 ,可以在 JSP 或任何其他基于 Java 的视图技术(如Facelets)中使用 。 Facelets 比 JSP 更适合 JSF。它提供了很好的模板功能,例如复合组件 ,而 JSP 基本上只提供用于模板化的<jsp:include> ,因此您不得不使用原始 Java 代码创建自定义组件(这有点不透明且很繁琐)当你想用一个组件替换一组重复的组件时,在 JSF 中工作。从 JSF 2.0 开始,JSP 已被弃用为视图技术而转而支持 Facelets。

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

相关问题

请参阅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 和 JSF 看起来都一样,按照应用程序要求,JSP 更适合基于请求 - 响应的应用程序。

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

从 Server Perspective

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

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