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主题,有两个深入的系列:

  • 什么是JAX-RS批注? 深入研究开发REST端点时最常用的注释。
  • @Context注释用于什么? 深入了解@Context批注的许多用途。

接下来是什么?

如果您是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

JSP,JSF和EL简介相关推荐

  1. jsf el表达式_JSP,JSF和EL简介

    jsf el表达式 JavaServer页面,JavaServer Faces和表达语言 在本文中,我将研究JavaServer Pages(JSP)和Expression Language(EL), ...

  2. JSP中的EL表达式详细介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素是指页面中能够用于在 ...

  3. JSP中使用EL表达式

    原文地址: JSP中使用EL表达式 JSP 表达式语言--菜鸟教程 EL表达式简介

  4. 大数据WEB阶段(十三)JSP(二)JSP标签、EL表达式、JSTL

    JSP标签.EL表达式.JSTL (一)JSP标签技术 一.JSP标签技术概述 jsp本质上是一种动态web资源开发技术 , 看起来像是html , 但其中可以写java代码 , 非常方便用来开发动态 ...

  5. SpringMVC的JSP页面中EL表达式不起作用${}

    解决方法: 在使用el表达式的jsp中配置: <%@page isELIgnored="false" %> 该设置代表在本jsp中使用el表达式,可以解析其中的值.若i ...

  6. 【JSP教科书】JSP知识在线指南(记录知识JSP体系、EL表达式、JSTL标签库、JSP开发模型和分页查询)

    文章目录 @[toc] 一.JSP简介 1.1 什么是JSP? 1.2 JSP的特点 1.3 JSP为什么也是Servlet 1.4 tomact服务器中的资源分析 1.4.1 tomact服务器中的 ...

  7. JSP中是EL表达式与JSTL

    EL语法:${ } EL取值来自于作用域对象 1.如何从指定作用域取值(默认从最小作用域取值) pageScope.requestScope.sessionScope.applicationScope ...

  8. jsp基础、el技术、jstl标签、javaEE的开发模式

    一.jsp技术基础 1.jsp脚本和注释 jsp脚本: 1)<%java代码%> ----- 内部的java代码翻译到service方法的内部 2)<%=java变量或表达式> ...

  9. JSP简单练习-EL表达式操作JavaBean

    /** javaBean代码*/ package bean;public class Box {double length;double width;double height;public Box( ...

最新文章

  1. 2021年大数据Flink(二十五):Flink 状态管理
  2. apache mysql 连接数_浏览器端同时请求100个url后,如何提升有效的msyql连接数
  3. 华为全面屏鸿蒙,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...
  4. Java PriorityQueue PriorityBlockingQueue
  5. web开发常用的几种居中形式
  6. ubuntu cpu频率控制
  7. 从零开始学习docker(十)搭建WordPress+Mysql,为什么要用Docker Compose
  8. k8s ready 不调度_从零开始学K8s: 10.在K8s上运行应用
  9. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  10. [USACO13NOV]Crowded Cows【暴力枚举】
  11. 小程序优化处理解决方案1 请求和setData
  12. Overture教程之如何更改整首谱子的调号
  13. pboot 将编码转换为实体html_java转换 HTML字符实体,java特殊字符转义字符串
  14. JAVA 页面置换先进先出算法(FIFO)
  15. MicroStation:MDL常用API(持续更新)
  16. 建模师的工资一般是多少
  17. 使用redisTemplate-geo计算经纬度距离
  18. relativity (v1.0.1)靶机
  19. javaweb:web.xml配置详解
  20. 添加ActiveSync支持

热门文章

  1. 达到年薪 40W 必需掌握的技术。
  2. Spring面试题(第一期)
  3. Shell入门(四)之数组
  4. 如何查看python安装路径
  5. 快来看看你们的新年礼物,猜猜是什么?
  6. mybatis报错Type interface xxx.Dao is not...
  7. php mysql 编码为utf-8_php连mysql用 utf-8编码乱码怎么办
  8. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
  9. hashmap应用场景_工作中常用到的Java集合有哪些?应用场景是什么?
  10. 10人以下小团队管理手册-学习笔记