EL表达式和JSTL表达式
一、EL表达式
一、概念
EL表达式是Expression Language(表达式语言),
它可以替代JSP页面中数据访问时的复杂编码可以自动转换类型,并且使JSP的开发变得更加简单。
二、语法 :${变量名}
----------a、EL的本质----------
jsp脚本:<%=request.getAttribute(name)%>
EL表达式替代上面的脚本:${requestScope.name}
----------b、取值和存值----------
// 在Servlet或JSP中保存数据
request.setAttribute("username", "猿医生");
request.setAttribute("user",new User("猿医生"));
// 在JSP中访问数据
姓名: ${username}
点操作符———> ${user.name}
[ ]操作符———>${user["name"]}
----------c、EL最主要的作用是获得四大域中的数据----------
pageContext域:${pageScope.key}
request域:${requestScope.key}
session域:${sessionScope.key}
application域:${applicationScope.key}
EL从四个域中获得某个值${key}; (重点)
按照page → request → session → application的作用域顺序依次查找,找到即返回,最终找不到返回null。
三、隐式对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,
并读取这些对象的数据。
语法:${隐式对象名称}:获得对象的引用
序号 隐含对象名称 描 述 1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。) 2 pageScope 代表page域中用于保存属性的Map对象 3 requestScope 代表request域中用于保存属性的Map对象 4 sessionScope 代表session域中用于保存属性的Map对象 5 applicationScope 代表application域中用于保存属性的Map对象 6 param 表示一个保存了所有请求参数的Map对象 7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[] 8 header 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”] 9 headerValues 表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”] 10 cookie 表示一个保存了所有cookie的Map对象 11 initParam 表示一个保存了所有web应用初始化参数的map对象
------ eg:
---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------ ${pageContext}
---------------2、pageScope对象:从page域(pageScope)中查找数据---------------------------
<% pageContext.setAttribute("name","猿医生"); %> ${pageScope.name}
---------------3、requestScope对象:从request域(requestScope)中获取数据------------------
<% request.setAttribute("name","猿医生"); %> ${requestScope.name}
---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------ <% session.setAttribute("name","猿医生"); %> ${sessionScope.name}
---------------5、applicationScope对象:从application域(applicationScope)中获取数据------ <% application.setAttribute("name","猿医生"); %> ${applicationScope.name}
---------------6、param对象:获得用于保存请求参数map,并从map中获取数据-------------------- <!-- http://localhost:8080/yuan/index.jsp?name=猿医生 --> ${param.name}
---------------7、paramValues对象:paramValues获得请求参数------------------------------- <!-- http://localhost:8080/yuan/index.jsp?like=aaa&like=bbb --> ${paramValues.like[0]} ${paramValues.like[0]}
---------------8、header对象:header获得请求头------------------------------------------- ${header.Accept} 测试header时,如果头里面有“-” ,例Accept-Encoding时:${header["Accept-Encoding"]}
---------------9、headerValues对象:headerValues获得请求头的值---------------------------- ${headerValues.Accept[0]} 测试headerValues时,如果头里面有“-” ,例Accept-Encoding:headerValues["Accept-Encoding"]
---------------10、cookie对象:cookie对象获取客户机提交的---------------------------------- cookie${cookie.JSESSIONID.value} 测试cookie时,例${cookie.key}取的是cookie对象, 如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}
---------------11、initParam对象:initParam对象获取在web.xml文件中配置的初始化参数----------- <%-- <!-- web.xml文件中配置初始化参数 --> <context-param> <param-name>yuan</param-name> <param-value>yisheng</param-value> </context-param> <context-param> <param-name>xxx</param-name> <param-value>/yuan</param-value> </context-param> --%> <%--获取servletContext中用于保存初始化参数的map --%> ${initParam.yuan} ${initParam.xxx}
四、Empty操作符
Empty操作符是一个前缀操作符,用于检测一个变量值是否为null或者为empty
eg:变量name不存在,则${empty name}返回的结果为true,${not empty name}返回的结果是false.
五、注意事项
1.EL表达式是JSP2.0规范中的一门技术。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0
技术的WEB服务器;
2.有些Tomcat服务器如不能使用EL表达式:
(1).升级tomcat版本,升级成tomcat6及以上
(2).在JSP中加入<%@ page isELIgnored="false" %>
2.要在javascript中使用El表达式,只需在在el表达式两端加上单引号或者双引号即可。
二、JSTL表达式
一、概念
JSTL是JSP标准标签库(JSP Standard Tag Library),提供一组标准标签,可用于编写各种动态功能。
JSTL通常会与EL表达式合作实现JSP页面的编码。
二、使用前提
除了JSP动作标签外,使用其他第三方的标签库都需要:
a.导包;
官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
<1>下载jakarta-taglibs-standard-1.1.2.zip解压,standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。
<2>在 web.xml 文件中添加配置
b.在使用标签的JSP页面中使用taglib指令导入标签库;
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c; uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;
三、常用标签
**核心标签**
表达式控制标签:out标签、set标签、remove标签、catch标签。
流程控制标签:if标签、choose标签、when标签、otherwise标签。
循环标签:forEach标签、forTokens标签。
URL操作标签:import标签、url标签、redirect标签。
标签 描述 <c:out> 用于在JSP中显示数据,就像<%= ... > <c:set> 用于保存数据 <c:remove> 用于删除数据 <c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来 <c:if> 与我们在一般程序中用的if一样 <c:choose> 本身只当做<c:when>和<c:otherwise>的父标签 <c:when> <c:choose>的子标签,用来判断条件是否成立 <c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 <c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面 <c:forEach> 基础迭代标签,接受多种集合类型 <c:forTokens> 根据指定的分隔符来分隔内容并迭代输出 <c:param> 用来给包含或重定向的页面传递参数 <c:redirect> 重定向至一个新的URL. <c:url> 使用可选的查询参数来创造一个URL
四、语法
五、格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述 <fmt:formatNumber> 使用指定的格式或精度格式化数字 <fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串 <fmt:formatDate> 使用指定的风格或模式格式化日期和时间 <fmt:parseDate> 解析一个代表着日期或时间的字符串 <fmt:bundle> 绑定资源 <fmt:setLocale> 指定地区 <fmt:setBundle> 绑定资源 <fmt:timeZone> 指定时区 <fmt:setTimeZone> 指定时区 <fmt:message> 显示资源配置文件信息 <fmt:requestEncoding> 设置request的字符编码
六、SQL标签
JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。 引用SQL标签库的语法如下: <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述 <sql:setDataSource> 指定数据源 <sql:query> 运行SQL查询语句 <sql:update> 运行SQL更新语句 <sql:param> 将SQL语句中的参数设为指定值 <sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值 <sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行
七、XML 标签
JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下: <%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:
<1>XercesImpl.jar
下载地址: http://www.apache.org/dist/xerces/j/
<2>xalan.jar
下载地址: http://xml.apache.org/xalan-j/index.html
标签 描述 <x:out> 与<%= ... >,类似,不过只用于XPath表达式 <x:parse> 解析 XML 数据 <x:set> 设置XPath表达式 <x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 <x:forEach> 迭代XML文档中的节点 <x:choose> <x:when>和<x:otherwise>的父标签 <x:when> <x:choose>的子标签,用来进行条件判断 <x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行 <x:transform> 将XSL转换应用在XML文档中 <x:param> 与<x:transform>共同使用,用于设置XSL样式表
八、JSTL函数
JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下: <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述 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() 移除首位的空白符
Now ~ ~ ~写到这里,就写完了,如果有幸帮助到你,请记得关注我,共同一起见证我们的成长。
小结
谢谢观赏,我叫猿医生。
猿友推荐:正在奔跑的程序猿