EL表达式和JSTL标签库使用

您所在的位置:网站首页 jsp核心标签 EL表达式和JSTL标签库使用

EL表达式和JSTL标签库使用

2024-07-10 01:22| 来源: 网络整理| 查看: 265

EL表达式

介绍:

EL(Expression Language)  目的:为了使JSP写起来更加简单。

      表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、操作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。

      EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象操作以及执行那些影响所生成内容的计算。JSP 2.0 将 EL 表达式添加为一种脚本编制元素。

作用:

1,  获取数据:EL表达式用来替换jsp页面中的脚本表达式,他可以从各种类型的web作用域中检索Java对象,例如:访问javabean的属性,List集合,Map集合以及数组等来获取数据。

2,  执行运算:EL表达式可以在jsp页面执行一些基本的关系运算,逻辑运算和算术运算。

3,  获取web开发对象:EL表达式定义了一些隐式对象,利用这些提供的隐式对象,可以很轻松的获取对常用对象的引用,从而获得这些对象中的数据。

用法:

EL表达式的结构

${expresson}

例如:表达式A+B用EL表达式表示为${A+B}

[]与.运算符

    EL 提供.和[]两种运算符来存取数据。

     当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用 []。

例如:

        ${user.stu_number}应当改为${user["stu_number"] },使用.运算符来访问它会导致异常发生。

     如果要动态取值时,用[]来做,而.无法做到动态取值。

例如:

        ${sessionScope.user[data]}中data 是一个变量

除此之外,EL表达式中一般使用.运算符来访问其属性,因为他比较简便快捷。

最常见的我们要访问HttpSession时:

${pageContext.session}

当要获取session的id标识时:

${pageContext.session.id}

我们可以看到,使用EL表达式确实很便捷。

EL表达式操作符

算术型

+、-、*、/、div、%、mod

逻辑型

and、&&、or、||、!、not

关系型

==、eq、!=、ne、、gt、=、ge

 

EL表达式还可以进行三目运算

如:${count?A:B}。

表示:如果count的计算结果是true,则输出结果是A,否则输出B。

常用场景:欢迎您:${user!=null ?user.username : '游客' }

这里首先判断user是否为空,不为空则去取username,为空则显示一个默认的昵称;如果不加判断直接取username,则容易出现空指针。

 

EL提供了判空运算符:empty

如:${empty username}

表示:判断jsp作用域中是否存在username,如果没有则返回true。(注意,这里是不存在返回的是true)。

 

EL表达式隐式对象

1,  pageContext

用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。

pageContext对象表示当前jsp页面中的javax.servlet.jsp.PageContext,他可以访问所有其他jsp的对象。

如下,列出其可以访问的jsp对象

request          

HttpServletRequest

response         

HttpServletResponse

session          

HttpSession(有开关的:page指令的session属性的取值)

application        

ServletContext

config           

ServletConfig

page           

this(当前Servlet对象)

exception        

java.lang.Throwable(有开关:page指令的isErrorPage属性改为true)

out            

JspWriter

 

pageContext为EL表达式的内置隐式对象,而通过它可以访问jsp中的九大内置对象,,那么间接的我们可以使用pageContext隐式的获取jsp中的其他内置对象了。

例如,${pageContext.response} 为页面的响应对象赋值。

2,  param

将请求参数名称映射到单个字符串参数值(通过调用 ServletRequest.getParameter (String name) 获得);getParameter(String) 方法返回带有特定名称的参数。

例如:表达式 ${param .name}相当于Servlet中的request.getParameter (name)

3,  paramValues

将请求参数名称映射到一个数值数组(通过调用ServletRequest.getParameter (String name) 获得);它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。

例如:表达式 ${paramvalues.name} 相当于 request.getParamterValues(name)。

4,  header

将请求头名称映射到单个字符串头值(通过调用ServletRequest.getHeader(String name) 获得)。

例如:表达式 ${header.name} 相当于 request.getHeader(name)。

5,  headerValues

将请求头名称映射到一个数值数组(通过调用ServletRequest.getHeaders(String) 获得)。它与头隐式对象非常类似。

例如:表达式${headerValues. name} 相当于 request.getHeaderValues(name)。

6,  cookie

将 cookie 名称映射到单个cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。

例如:表达式 ${cookie. name.value} 返回带有特定名称的第一个 cookie 值。

(如果请求包含多个同名的 cookie,则应该使用${headerValues. name} 表达式。)

7,  initParam

将上下文初始化参数名称映射到单个值(通过调用 ServletContext.getInitparameter(String name) 获得)。

         例如:获取username的上下文参数值,使用${initParam.username}

 

EL表达式的4个Scope

pageScope     

将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScope .objectName. attributeName} 访问对象的属性。

requestScope

将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScope. objectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScope. objectName. attributeName} 访问对象的属性。

sessionScope

将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:

${sessionScope. name}

applicationScope

将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。

 

EL表达式在最早的时候必须配合JSTL标签库才能使用。但在jsp2.0之后jsp容器已经可以独立的解析EL表达式了,但现在的开发中,EL表达式我们通常会拿来配合JSTL来使用,这样也会让jsp页面写起来更加简单。

JSTL标签库

介绍:

JSTL(JSP StandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的及其以上容器上,如tomcat 7.x。在JSP 2.0中也是作为标准支持的。

使用:

首先我们要引入jar,这里我们要引入两个jar ,jstl-1.2.jar和standard-1.1.2.jar,然后将这两个jar放入到WEB-INF下的lib文件夹中。然后在我们的jsp页面上要引入       

 

JSTL标签中的五大类

标签库 

作用    

URL   

前缀

核心    

包含web应用的常见工作,包括循环、输入、输出等   

 http://java.sun.com/jsp/jstl/core  

c

国际化

语言区域、消息、数字和日期的格式化  

 http://java.sun.com/jsp/jstl/fmt      

fmt

XML 

访问XML文件

 http://java.sun.com/jsp/jstl/xml

x

数据库  

访问数据库 

 http://java.sun.com/jsp/jstl/sql   

sql

函数  

集合长度,字符串操作

http://java.sun.com/jsp/jstl/functions

 fn

 

1,  核心标签库

引用核心标签库的语法

JSTL 核心标签库(C标签)标签共有14个,功能上分为4类

1.表达式控制标签:out、set、remove、catch

2.流程控制标签:if、choose、when、otherwise

3.循环标签:forEach、forTokens

4.URL操作标签:import、url、redirect、param

 

标签作用介绍

        

在JSP中显示数据

保存数据

删除数据

处理产生错误的异常状况,并且将错误信息储存起来

与我们在一般程序中用的if一样

本身只当做和的父标签

的子标签,用来判断条件是否成立

的子标签,接在标签后,当标签判断为false时被执行

        

检索一个绝对或相对 URL,然后将其内容暴露给页面

        

基础迭代标签,接受多种集合类型

        

根据指定的分隔符来分隔内容并迭代输出

        

用来给包含或重定向的页面传递参数

        

重定向至一个新的URL.

        

使用可选的查询参数来创造一个URL

 

举例

forEach标签

${entry.key},${entry.value }

Import标签

URL,param标签

Choose,when,otherwise标签

v1大于v2 v1小于v2

If标签

v1小于v2

2,  国际化标签库

引用国际化标签库的语法

标签作用介绍

设置全局的 Locale 信息,包括语言和国家代码

 用于绑定资源文件在它的标签体内

允许将资源配置文件保存为一个变量。

从指定的资源文件中把指定的键值取出来

为格式化文本串中的占位符设置参数值,只能嵌套在标签内使用

用于定义字符编码

设定时区,时区设定在标签体内起作用

允许将时区设置保存为一个变量,结合属性 var 使用

根据 Locale 格式化数字,货币和百分比

用来将字符串类型的数字, 货币或百分比转换成数字类型

用来格式化日期

将字符串类型的时间转换为日期类型

3,  XML标签库

引用XML标签库的语法

标签作用介绍

        

与,类似,不过只用于XPath表达式

解析 XML 数据

        

设置XPath表达式

        

判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体

        

迭代XML文档中的节点

        

和的父标签

        

的子标签,用来进行条件判断

的子标签,当判断为false时被执行

        

将XSL转换应用在XML文档中

        

与共同使用,用于设置XSL样式表

 

4,  数据库标签库

引用数据库标签库的语法

标签作用介绍

        

指定数据源

        

运行SQL查询语句

        

运行SQL更新语句

        

将SQL语句中的参数设为指定值

        

将SQL语句中的日期参数设为指定的java.util.Date 对象值

        

在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

 

5,  函数标签库

引用函数标签库的语法

标签作用介绍

fn:contains()         

测试输入的字符串是否包含指定的子串

fn:containsIgnoreCase()         

测试输入的字符串是否包含指定的子串,大小写不敏感

fn:endsWith()         

测试输入的字符串是否以指定的后缀结尾

fn:escapeXml()         

跳过可以作为XML标记的字符

fn:indexOf()         

返回指定字符串在输入字符串中出现的位置

fn:join()         

将数组中的元素合成一个字符串然后输出

fn:length()         

返回字符串长度

fn:replace()         

将输入字符串中指定的位置替换为指定的字符串然后返回

fn:split()         

将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回

fn:startsWith()         

测试输入字符串是否以指定的前缀开始

fn:substring()         

返回字符串的子集

fn:substringAfter()         

返回字符串在指定子串之后的子集

fn:substringBefore()         

返回字符串在指定子串之前的子集

fn:toLowerCase()         

将字符串中的字符转为小写

fn:toUpperCase()         

将字符串中的字符转为大写

fn:trim()         

移除首位的空白符

 

ps:JSTL标签用法最重要的是Core标签库,这个重点记一下,其余的用到了过来翻翻看看怎么写就可以了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3