JSP,JSF和EL简介

JavaServer页面,JavaServer Faces和表达语言

在本文中,我将研究JavaServer Pages(JSP)和Expression Language(EL),然后将其与JavaServer Faces (JSF)关联。 我将讨论如何在JSP和JSF代码中直接访问HTTP对象,并且您将看到它们之间语法差异的一些示例。

JSP是传统技术

JSP是Java EE的传统Web编程技术,该技术在1999年第一个J2EE版本中发布。 后来,它在2003年被JSF取代,但是它的开发继续到Java EE 7中发布的最新版本2.3,但尚未贬值。

首选JSF

尽管JSF已取代JSP成为首选选项,但仍有许多使用JSP的应用程序,并且很可能在未来的几年中会遇到这种应用程序,因此值得对这项技术有所了解。

动态Java Web应用程序

JSP是一种服务器端技术,允许开发人员创建动态Java Web应用程序。 JSP可以看作是Servlet技术的扩展,因为它提供了易于创建用户视图的功能。 JavaServer Pages由HTML代码组成,但是它允许包含Java代码以进行动态内容创建。 由于Web应用程序包含许多用户屏幕,因此JSP在Web应用程序中使用很多。

缩小Java和HTML之间的差距

为了弥合Java代码和JSP中HTML之间的鸿沟,它提供了其他功能,例如JSP标签表达式 语言自定义 标签 。 这使它更易于理解,并有助于Web开发人员快速开发JSP页面。 但是,大多数时候,我们仅将JSP用于视图生成,并且所有业务逻辑都存在于servlet代码, Enterprise Java Bean或模型类中。

与JSF相比,它是一种不太复杂的视图呈现语言,并且没有从组件带来的优势中受益。 但是,视图逻辑和业务逻辑的分离并不总是那么清晰。 JSP Scriptlet允许直接在视图逻辑中编写Java代码。 这使分离蒙上了阴影。

内联Java

此类Java代码直接在JSP页面中的火箭和百分比<%…%>之间输入

在这里,我们使用Java代码访问HTTPServerRequest对象,以检索名为idpassword的查询参数。

将这种逻辑与视图技术混合在一起是不好的做法。 这就是为什么现代Java EE应用程序选择不使用JSP,而是使用结构更好的基于组件的JSF语言的原因。

JSP隐式对象

JSP隐式对象是由Servlet容器创建的,同时将JSP转换为Servlet。 这些主要与HTTP对象和范围有关。 如上面的代码片段所示,我们可以直接在scriptlet中使用JSP中的隐式对象,以访问与当前范围或HTTP对象相关的值。

在以下代码片段中,我们将引用HTTP请求对象以获取上下文路径。

<%=request.contextPath %>

其他隐式JSP对象的示例是requestresponsepageContextapplication

为了使问题进一步复杂化, 表达式语言具有自己的隐式对象,这些隐式对象的名称与JSP中可用的名称相似,并且与相同的HTTP对象和范围相关。

${request.contextPath}

其他EL隐式对象的示例: requestrequestScopedpageContextapplicationScoped

就像前面在JSP示例中所做的那样,在这里我们从HTTP请求对象获取上下文路径。 请注意,某些对象的名称不同,并且使用了不同的语法。

在JSP和JSF中使用EL

让我们稍微扩展一下主题,看看我们如何在JSP和JSF中使用表达式语言。

下面的代码片段显示了EL在JSP中的用法:

  • 隐式对象: $ {request.contextPath}
  • Bean属性: $ {book.title}

下面的代码片段显示了在JSF中使用EL的情况:

  • 隐式对象: #{request.contextPath}
  • Bean属性: #{book.title}

在这两种情况下,对象引用都被命名为相同,并且引用相同的对象。 唯一的区别是用于引用实例的语法。 JSP使用美元符号,而JSF使用哈希  通过使用带有小写第一个字母 来引用Bean名称 (除非已在命名注释中明确定义了另一个名称)。

最后,让我们看看在表达式语言中使用的一些语法。

  • 逻辑运算符
  • []()<=>eq ne|| 和更多
  • 并且不是 的instanceof, 真实 ,MOD更多
  • $ {非空book.title}

如您所料,它是非常熟悉的。 我们拥有验证相等性并执行数学运算的标准逻辑运算符。 另外,我们在复合操作(例如我们在此处看到的非空操作)上获得了一些语法糖。

进一步阅读

如何稍微了解上下文和依赖注入 (CDI)和企业Java Bean (EJB)。 这是两项核心技术。

我最近发布了一个迷你系列博客,介绍了JAX-RS 。 他们讨论了如何管理bean验证失败如何使用者和生产者一起使用以及如何创建JAX-RS资源实体

关于JAX-RS主题,有两个深入的系列:

接下来是什么?

如果您是Java EE的新手,那么不知所措要绕过企业生态系统中的所有API。 这就是为什么我编写并记录了视频培训课程Learning Java Enterprise Edition的原因 。 这是一个为期两个小时的课程,向您介绍所有最重要的Java EE API。 关于如何使用Enterprise Java进行编程的大量演示,代码示例和练习任务,将使您成为Java EE开发人员时能说得很透彻。

增进知识

如果您想了解更多信息,那么有些课程将更深入地介绍每个API。 您将学习一门关于JAX-RS API的课程,通过学习如何构造RESTful端点来提高自己的知识。 WebSocket API上有一门课程,您可以学习如何开发聊天应用程序,而JSON上则有一门课程,您可以学习如何掌握JSON-Processing API课程。 即将到来的课程很多,所以为什么不现在就加入并让您的Java EE事业发展呢?

翻译自: https://www.javacodegeeks.com/2017/09/jsp-jsf-el-introduction.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值