EL表达式和标准标签库
EL表达式(expression language): !!!!自定义标签!!!!
语法 ${expression}
jsp中page指令有一个属性叫isELIgnored
<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言.
2)[]与.运算符
EL 提供.和[]两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用[]。
表达式中含有特殊字符
错误: ${sessionScope.test-name} vs 正确: ${sessionScope["test-name"]}
如果要动态取值时,就可以用[]来做,而.无法做到动态取值。例如:
${sessionScope.user[data]}中 data 是一个变量
点运算符(.)和"[ ]"都是表示获取变量的值.区别是[ ]可以显示非词类的变量
在EL表达式中[]也可以用来表示数组或者集合中的索引值
3)EL变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
当前面不指定哪个作用域下面的值的时候, 会默认按照下面的顺序去找, 如果都找不到, 就回传null
pageScope --> requestScope --> sessionScope --> applicationScope
pageScope表示页面范围的变量.requestScope表示请求对象的变量. sessionScope表示会话范围内的变量.applicationScope表示应用范围的变量.
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。
例如:我们要取得session中储存一个属性username的值:
常规写法 <%=session.getAttribute("username")%>取得username的值,
EL则使用下列方法
${sessionScope.username}或${sessionScope["username"]}
1--EL表达式用${}表示,可用在所有的HTML和JSP标签中,作用是代替JSP页面中复杂的JAVA代码.
2--EL表达式可操作常量 变量 和隐式对象.
最常用的 隐式对象有${param}和${paramValues}. 是与输入有关的
${param}表示返回请求参数中单个字符串的值.
${paramValues}表示返回请求参数的一组值/所有请求参数作为String类型的数组的Map类
例如我们要取得用户的请求参数时,可以利用下列方法:
request.getParameter(String name)
request.getParameterValues(String name)
在EL中则可以使用param和paramValues两者来取得数据。
${param.name}
${paramValues.name}
EL自动类型转换
String num = request.getParameter("num");
int a = 20;
int b = Integer.parseInt(num != null ? num : "0");
out.print(a + b);
${param.num + a}
Scope和param都是EL表达式中的隐式对象
1)cookie
将名称存储请求附带的cookies的Map类,JSTL并没有提供设定cookie的动作,
获取cookie:
${cookie.username.name}
${cookie.username.value}
2)header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得
这些值。
3)initParam按名称存储web应用程序上下文初始化参数的Map类
initParam取得设定web站点的环境参数(Context)
例:一般的方法
<%String userid = application.getInitParameter("userid"); %>
可以使用 ${initParam.userid}来取得名称为userid
4)pageContext取得其他有关用户要求或页面的详细信息。${pageContext. }
5)EL运算符
算术运算符: + - * /或者div %或者mod
关系运算符: ==或者eq !=或者ne <或者lt >或者gt <=或者le >=或者ge
逻辑运算符: &&或者and ||或者or !或者not
验证运算符: empty(empty 对于 null和"" 的判断都是返回true)
EL语言可显示 逻辑表达式如${true and false}结果是false
关系表达式如${5>6} 结果是false
算术表达式如 ${5+5} 结果是10
${empty param.name}、${A?B:C}、${A*(B+C)}
-----------JSTL(JSP Standard Tag Library)标准标签库--------------
JSTL组成:
JSTL –Core 核心标签库。 - 这是本部分的重点
JSTL – I18N - 国际化标签库。Internationalization- I18N
JSTL – SQL – 数据库操作标签(有悖于MVC设计模式不用不讲)。
JSTL - Functions – 函数库。
JSTL - XML ,对XML的操作(同SQL标签)。在jstl-1.2.jar包的META-INF目录中,
保存着各种tld文件的版本。请查看。
使用JSTL核心标签:
如果你的Web项目是基于JavaEE2.5或以上的。可以在你项目的任意页面上
通过<%@ taglib 指令使用JSTL的核心标签库。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
uri是引用标签库的资源定位符,并不代表一个实际的地址。
Prefix是自定义的前缀。
如果你的项目是JavaEE2.5以下的项目,必须在在你项目中的lib目录下,
存在以下两个jar文件为:
Jstl.jar、standard.jar
具体使用:
JSTL-Core一共包含以下几个子标签:
<c:out> ${name}输出标签
<c:set> pageContext.setAttirbute(key,value,scope);声明标签
<c:remove>删除某个范畴内的数据
<c:if> 判断c:else,c:elsif
<c:choose><c:when><c:otherwise> 判断分枝c:if,c:else if c:
<c:forEach> 遍历
<c:forTokens> 分隔
<c:import> 导入其他资源,相当于动态包含共享同一个request
<c:url> - 重写url 取href属性
<c:redirect> 重定向 response.sendRedirect(‘’..) 不符合mvc模式,从前台跳转
下面对具体的操作进行解释与演示:
<c:out>
<c:out value=…/>用于在页面上输出结果。
<c:out value=“${requestScope.name}”/> -将request中的name值输出
<c:out value=“${param.username}”/> - 用于将参数输出到页面上。
<c:out value=“${name}” default=“hello”/>从page到application开始查找,如果没有找到,就显示默认值hello.
另一种设置默认值的方式:只有当要求的信息为null或不存在时才会输出默认值。
<c:out value="${name }" default="hello everybody" /><br>
<c:out value= "${name}">Default-value-默认值。 </c:out> <br>
excapeXml属性(控制转义字符):默认为true,需要转义设置为false;
用于将html等标签转换成<等转换元素,看例子.
<% String name="<font color='red'>Red</font>"; pageContext.setAttribute("name",name); %> <c:out value="${name}" escapeXml="flase"></c:out> <br>
<!-- 因为浏览器会解析html数据。不对xml或html进行转换,直接输出,这样就会在页面上看到红色的Red字符, -->
<c:set>
作用:为String类型的命名变量设置值。
<c:set var=“变量名” value=“变量的值” scope=“page|request|session|application”/>--scope:将一个值存到scope中(默认是page)
<c:set var=“name” value=“${param.name}”/>
直接从参数中取出数据给name赋值。
两种方式都行:<c:set var="t" value="山东淄博" />
<c:set var="t1">安徽黄山</c:set>
<% pageContext.setAttribute("name", "jack_P"); request.setAttribute("name", "jack_R"); request.setAttribute("name2", "<font color='red'>你好,中国</font>"); %> ${name2 } :从小范围到大开始查找,不写out标签也可以打印出来<br/> <!-- name2 --><c:out value="${name2 }" escapeXml="flase"></c:out> <hr/> <!-- 指定范围以后,需要从指定范围去取,不然会自动从小到大开始查找 --> <c:set var="a" value="jack中国2" scope="request" ></c:set> ${requestScope.a } <br/>
如果变量为JavaBean,则为这个JavaBean的属性设置值。
<c:set target=“JavaBean的变量名” property=“设置的属性” value=“值”/>
target 对应javaBean的name值(target要使用EL表达式的形式)
property 对应定义的类里面的属性.示例
<jsp:useBean id="person" class="testweb2.Person"></jsp:useBean><c:set target="${pageScope.person}" property="name" value="Jack"/><c:set target="${pageScope.person}" property="age" value="99"/> ${person}<br>
如果变量为Map,则给Map中的key设置值。
<c:set target=“代表Map的变量” property=“key” value=“value”/>,示例.
<jsp:useBean id="map" class="java.util.HashMap" scope="request"></jsp:useBean><c:set target="${requestScope.map}" property="name" value="Jack"/><c:out value="${requestScope.map.name}"/> <br>
提一下:remove----只能用于页面内的变量移除
移除某个变量
var: 指定需要remove的那个变量名(不能使用EL表达式)
scope: 多个scope中的变量名有重复的时候, 可以通过这个属性来确定移除的是哪个, 如果不指定, 则全部remove掉
<!-- 移除属性 c:remove 默认是从pageScope中移除--> <c:set var="b" value="jack11111" scope="request" />${requestScope.b } <c:remove var="b" scope="request"/> ${requestScope.b }
catch
相当于try...catch...可以在这个标签中放其他标签,只有一个属性var
流程控制标签
<c:if>
<c:if />用于实现Java语言中的if语句。它的语法如下:
<c:if test=“逻辑表达式”var=“代表逻辑表达式值的命名变量” scope=范围/>
例字:
<c:if test=“${name!=‘Jack’}”>
当name的值不为Jack时输出此行信息
</c:if>
上面的判断等价于下面的代码片段:
if(pageContext.getAttribute(“name”)!=null && !..equals(“Jack”)){
out.println(“…..”);
}
<c:set var="age" value="20"></c:set> <c:if test="${age>25 }" var="aa"> <h2>比25大咯!!</h2> </c:if> <c:if test="${!aa }"> <h3>比25小咯!!</h3> </c:if>
<c:set var="a" value="jack" scope="request" ></c:set> <c:if test="${a =='jack'}">当a的值为Jack时输出此行信息
</c:if>
choose,when,otherwise 例子
这几个标签共同使用可以实现Java中的if…else语句的功能
使用c:when必须遵循以下语法规则:
<c:when/>和<c:otherwise/>不能单独使用,它必须位于<c:choose内。
<c:otherwise/>必须位于c:when之后。
<!-- 可以setname 一下 --><c:choose><c:when test="${empty param.name}">用户没有输入name参数</c:when><c:when test="${param.name=='Admin'}">${param.name}是管理员</c:when><c:otherwise>用户是:${param.name}</c:otherwise></c:choose>
<c:set var="age" value="-18"></c:set>
<c:choose> <c:when test="${age>20 }"> 大于20!! </c:when> <c:when test="${age>10 }"> 大于10!! </c:when> <c:when test="${age<10 }&&${age>0 }"> 小于于10!! </c:when> <c:otherwise> 这就是属于其他的了 。。。 </c:otherwise>
</c:choose>
-- -- -- - -- - -- -- - - --
<c:ForEach>迭代标签
语法:<c:forEach var=“name迭代变量” items=“${集合名称}” varStatus=“迭代下标变量” begin=“int开始索引“
end=”int结束索引” step=“int(步长)属性” >
//循环体
</c:forEach>
说明:1)items:是集合,用EL表达式;
2)var:变量名,存放items
3)varStatus: 显示循环状态的变量
①index:从0开始;
②count:元素位置,从1开始;
③first:如果是第一个元素则显示true;
④last:如果是最后一个元素则显示true;
4)begin:循环的初始值(整型);
5)end: 循环结束 ;
6)step:步长,循环间隔的数值;
例子
<!-- c:forEach 增强for循环 --> <!-- 普通版本 --> <c:forEach begin="0" end="10" var="x" step="2"> ${x } </c:forEach> <hr/> <% String[] a={"小王","晓明 ","小杨","新哥"}; request.setAttribute("a", a); %> <c:forEach items="${requestScope.a }" var="i"> ${i } <!-- 一定要注意取值的范围 --> </c:forEach>
<!-- 演示list用jstl --> <%
List<String> list= new ArrayList<String>();
list.add("123a");
list.add("123d");
list.add("123b");
list.add("123c");
list.add("123e");
list.add("大新哥");
session.setAttribute("list", list);//后面用el表达式取得是参数 %> <c:forEach items="${sessionScope.list }" var="li"> ${li } </c:forEach>
<!-- 采用map的方式演示jstl --> <%
//演示map采用el表达式
Map<String,Object> map1=new HashMap<String,Object>();//存储以hash值存储
map1.put("aa", 123);
map1.put("cc", 567);
map1.put("bb", 345);
map1.put("dd", 789);
application.setAttribute("map2", map1); %> <c:forEach items="${ applicationScope.map2}" var="mm" varStatus="idx"> ${idx.index } ${idx.count } ${mm.key } ${mm.value }<br/> </c:forEach>
- - --- --- --- --- --- ----- --- --- --
forTokens(回忆一下字符串的split()方法)
输出的结果中同样也有index, count, first, last这四个属性
这个标签的使用相当于java.util.StringTokenizer类。
例子
<!-- 分割字符串,相当于split() --> <c:forTokens items="aa,bb,cc,dd,ee,ff" delims="," var="x"> ${x } <br></c:forTokens> <hr/> <c:forTokens items="a:b:c:d" delims=":" var="token"><c:out value="${token }"/></c:forTokens>
2, 格式化标签:
SP页面用EL表达式 输出date格式
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate value="${isoDate}" type="both"/>
2004-5-31 23:59:59<fmt:formatDate value="${date}" type="date"/>
2004-4-1<fmt:formatDate value="${isoDate}" type="time"/>
23:59:59<fmt:formatDate value="${isoDate}" type="date" dateStyle="default"/>
2004-5-31<fmt:formatDate value="${isoDate}" type="date" dateStyle="short"/>
04-5-31<fmt:formatDate value="${isoDate}" type="date" dateStyle="medium"/>
2004-5-31<fmt:formatDate value="${isoDate}" type="date" dateStyle="long"/>
2004年5月31日<fmt:formatDate value="${isoDate}" type="date" dateStyle="full"/>
2004年5月31日 星期一<fmt:formatDate value="${isoDate}" type="time" timeStyle="default"/>
23:59:59<fmt:formatDate value="${isoDate}" type="time" timeStyle="short"/>
下午11:59<fmt:formatDate value="${isoDate}" type="time" timeStyle="medium"/>
23:59:59<fmt:formatDate value="${isoDate}" type="time" timeStyle="long"/>
下午11时59分59秒<fmt:formatDate value="${isoDate}" type="time" timeStyle="full"/>
下午11时59分59秒 CDT<fmt:formatDate value="${date}" type="both" pattern="EEEE, MMMM d, yyyy HH:mm:ss Z"/>
星期四, 四月 1, 2004 13:30:00 -0600<fmt:formatDate value="${isoDate}" type="both" pattern="d MMM yy, h:m:s a zzzz/>
31 五月 04, 11:59:59 下午 中央夏令时格式模式:d 月中的某一天。一位数的日期没有前导零。 dd 月中的某一天。一位数的日期有一个前导零。 ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 dddd 周中某天的完整名称,在 DayNames 中定义。 M 月份数字。一位数的月份没有前导零。 MM 月份数字。一位数的月份有一个前导零。 MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 MMMM 月份的完整名称,在 MonthNames 中定义。 y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 yyyy 包括纪元的四位数的年份。 gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 h 12 小时制的小时。一位数的小时数没有前导零。 hh 12 小时制的小时。一位数的小时数有前导零。 H 24 小时制的小时。一位数的小时数没有前导零。 HH 24 小时制的小时。一位数的小时数有前导零。 m 分钟。一位数的分钟数没有前导零。 mm 分钟。一位数的分钟数有一个前导零。 s 秒。一位数的秒数没有前导零。 ss 秒。一位数的秒数有一个前导零。<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy HH:mm aa"/>和<fmt:formatDate value="${xx}" pattern="dd/MM/yyyy hh:mm aa"/>
对于0点显示的结果不一样
h:小时,从1到12,分上下午 范围:01:00 AM~12:59AMH:小时,
从0到23
范围:00:00 AM~23:59AM
2) 格式化数字<fmt:formatNumber
value="${n}" pattern="###,###.##" />
3, sql标签
4, xml标签
5, jstl函数
转载于:https://www.cnblogs.com/ziyanxiaozhu/p/8564827.html
EL表达式和标准标签库相关推荐
- spring mvc学习(37):JavaEE-JSP基础-EL表达式和JSTL标签库(Taglibs)
EL表达式和JSTL标签库: 在JSP页面代替java代码,便于编写 一.EL表达式 作用: ${} 简化脚本表达式 <%= %> j2ee1.4以前版本需指定<%@ page is ...
- 28. EL 表达式 以及 JSTL 标签库
28. EL 表达式 以及 JSTL 标签库 1.EL 表达式 a)什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达 ...
- java标签库jstl-el表达式介绍使用配置手册_JAVA EE 实验报告EL表达式和jstl标签库的使用...
昆明理工大学信息工程与自动化学院学生实验报告 ( 2013 -2014 学年第一学期) 课程名称:Java EE技术开课实验室:系机房444 2013 年 12月2 日年级.专业.班计科111 学号姓 ...
- jsp java el表达式_jsp相关笔记,el表达式、jsp标签库(jstl)
一.jsp基础部分 1.介绍 概念 JSP(Java Server Page),java服务器端页面,可以定义html标签,又可以定义java代码. 原理 JSP本质上就是一个Servlet 2.JS ...
- EL表达式和JSTL标签库使用
EL表达式 介绍: EL(Expression Language) 目的:为了使JSP写起来更加简单. 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP ...
- EL表达式和JSTL标签库学习笔记
先说一些数据库的知识,在进行表的操作时,若有一对多的关系,则在建外键时应选择多的一方.如user和group的对应关系,应在一个user属于多少个group,而不是一个group有多少用户,虽然这样也 ...
- 【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服务器中的 ...
- Java Web - EL表达式和JSTL标签库
在使用servlet和jsp的过程中,两者之间的数据流转是十分常见的,jsp实际上也是一种servlet,也就是两个servlet之间的数据流转,我们根据不同的使用场景选择使用,请求转发(在reque ...
- Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用
来自:http://blog.csdn.net/love_you_99/article/details/8184797 一 介绍 1.Struts2的作用 Struts2标签库提供了主题.模板支持,极 ...
最新文章
- Containerd 的前世今生和保姆级入门教程
- C++ Opengl 粒子系统(Particles)源码
- 产品经理是条狗:前端,你怎么看?
- C++|Java工作笔记-google protobuf基本使用
- ConfirmCancelUtilDialog【确认取消对话框封装类】
- javaweb JAVA JSP计算机系试题库管理系统的设计与实现JSP题库管理系统 JSP试题管理系统
- UDA: A user-difference attention for group recommendation
- 网件RAX120刷机教程
- 【Appium】手机滑动swipe方法及如何进行坐标定位
- 笔记-微信订阅号开发
- 青春使命网页制作html,青春使命句子
- Selenium——文件另存为
- Shell编程基本指令
- powershell:调用7z,haozip解压缩文件
- 番茄的随笔2-准PR控制传递函数离散化
- 带你理解beta分布
- pono2的html5无法显示,ppz
- HDU 3105 Fred's Lotto Tickets(数学题)
- 苹果三代耳机_苹果三代蓝牙无线耳机
- iphone开发的几个Apple官方中文教程地址
热门文章
- matlab仿真软件 高阶调制,高阶差分幅度相移键控调制解调系统及仿真
- mysql 轨迹数据存储_python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库...
- html在线随机抽取,利用纯html+javascript实现随机抽取显示
- java newdirectorystream_Path、Paths和DirectoryStreamT
- python删掉txt第一列_Python3.5 处理文本txt,删除不需要的行方法
- mc服务器音乐文件夹在哪,添加自定义音乐图文教程 我的世界怎么添加音乐
- Linux 利用nginx源码编译安装nginx
- Spring全家桶中的日志框架
- c语言程序设计 在线课程设计,c语言程序设计 本科课程设计
- asp.net webform 使用 html partial,ASP.NET Web Forms