jsp(19)(一)(jstl标签和EL表达式)
JavaWeb学习篇之----自定义标签&&JSTL标签库详解
EL 全名为Expression Language。EL主要作用:
获取数据:
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索Java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
执行运算:
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
EL表达式用以获取数据:
以$(标识符)的方式,实际上是pageContext.findAttribute()从(page,request,session contex四个域中查找),如果没有找到返回空字符串(不是null)。
EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
${user.address.city}:获取user对象中的address对象的city属性值 ${user.list[0]}:访问有序集合某个位置的元素 ${map.key} : 获得map集合中指定key的值
El表达式还可以获取javabean中的值$(Bean.address)

从集合中获取值:

从Map中获得值:

一般不采用数值来命名属性名,获取需要中括号加单引号的方式获取。

获取项目的名称:

JSTL标签库可以分为以下几种:
1.核心标签库 2.国际化标签 3.数据库标签 4.XML标签 5.JSTL函数(EL函数)
现在用到最多的就是核心标签库和JSTL函数库了
jstl:一种替换java代码的标签库:

标签库的前缀名字一般和标签库的名字一样以便更知道是使用哪个库:

倒入标签的url是从jstl.jar中的META-INF的c.tld中获取的,这里定义一系列的标签。绑定在该url上只需要在jsp页面配置就好。

迭代list中对象的属性

迭代map对象的键值:

判断标签:

补充:核心标签的使用:
1、c:out标签的使用:将内容写到jspWritter中输出:

<!-- 输出给浏览器,但是没必要这样输出,可以直接输出的aaaaaa -->
<c:out value="aaaa"></c:out>
<!-- 特殊符号转义之后输出和输出默认值,这是c:out标签最主要的作用-->
<c:out value="<a href=''>点点</a>" default="aaa" escapeXml="true"></c:out>
<%
request.setAttribute("data","xxx");
%>
<c:out value="${data}" default="aaa"></c:out>
default属性设置输出的默认值,EL表达式在各个域中如果找不到属性值就会输出空字符串,通过这个属性就可以设置当从所有的域中找不到相应的属性值,就会输出默认值
escapeXml这个属性值,这个属性进行输出内容进行html转义。我们之前都是通过一个方法进行转义。
2、c:set标签
用于把某一个对象存在指定的域范围内,
设置域中的Map类型的属性对象或JavaBean类型的属性对象的属性

<!-- 向page域中存入到xxx -->
<c:set var="data" value="xxx" scope="page"/>
${data}
<!-- 向map中存入数据 -->
<%
Map map = new HashMap();
request.setAttribute("map",map);
%>
<c:set property="name" value="uuu" target="${map}"/>
${map.name}
<!-- 向javabean中存入数据 -->
<%
Person p = new Person();
request.setAttribute("p",p);
%>
<c:set property="name" value="uuu" target="${p}"/>
${p.name}
3、c:remove标签
在四个域中删除指定的属性其语法格式如下:
<c:remove var="varName" [scope="{page|request|session|application}"] />
<!-- 删除属性 --> <% request.setAttribute("data","xxx"); %> <c:remove var="data" scope="request"/>
4、c:catch标签
用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:
<c:catch [var="varName"]>nested actions</c:catch>
var属性用于标识<c:catch>标签捕获的异常对象,它将保存在page这个Web域中
<!-- c:catch异常捕获 -->
<!--var是存入异常对象的关键字 -->
<c:catch var="myex">
<%
int x = 1/0;
%>
</c:catch>
<!-- 异常对象必须要有message属性 -->
${myex.message}
5、c:if标签
这个标签是控制标签内容的输出

<!-- 将判断结果以aaa为关键字存入到域中 -->
<%
request.setAttribute("user",null);
%>
${user}
<c:if var="aaa" test="${user == null}",scope="page"/>
${aaa}
6、c:choose/c:when/c:other标签
这三个标签是一起使用的,实现效果和if...else是一样的
<!-- c:choose标签 -->
<c:choose>
<c:when test="${true}">
aaaa
</c:when>
<c:otherwise>
bbb
</c:otherwise>
</c:choose>
7、c:forEach标签
用来迭代数据的:

<% List list = new ArrayList(); list.add("aaa"); list.add("bbb"); list.add("ccc"); list.add("ddd"); request.setAttribute("list",list); %> <c:forEach var="str" items="${list}"> ${str} </c:forEach> <!-- 设置步长,分页功能 --> //只循环9次 <c:forEach var="num" items="${list}" begin="1" end="9" step="1"> ${num} </c:forEach> <!-- 记录迭代变量的值 --> // <c:forEach var="str" items="${list}" varStatus="status"> ${status.count} </c:forEach>
varStatus属性可以方便我们实现一些与行数相关的功能,如:奇数行、偶数行差异;最后一行特殊处理等等。先就varStatus属性常用参数总结下:
${status.index} 输出行号,从0开始。
${status.count} 输出行号,从1开始。
${status.current} 当前这次迭代的(集合中的)项
${status.first} 判断当前项是否为集合中的第一项,返回值为true或false
${status.last} 判断当前项是否为集合中的最后一项,返回值为true或false
8、c:param标签
这个标签是设置参数值的,这个标签是不能单独使用的,他是结合c:url或者c:redirect标签使用
9、c:url标签
实现url重写(在介绍Session的时候)和url编码

<!-- url重写 -->
<c:url var="url" value="JspDemo/1.jsp"/>
<a href='${url}'>购买</a>
</c:url>
<!-- url标签直接输出url -->
<a href='<c:url value="/1.jsp"'>点点</a>
<!-- c:url构建参数(自动url编码) -->
<c:url var="index" value="/1.jsp">
<c:param name="name" value="中国"/>
</c:url>
10.c:redirect标签
用来实现重定向的

<c:redirect url="JspDemo/1.jsp"> <c:param name="name" value="jiangwei"></c:param> </c:redirect>
jsp标签中只有<jsp:forword>转发标签,而没有重定向的标签,那么这个就有重定向的标签了。

浙公网安备 33010602011771号