Ie与JSTL

来源:互联网 发布:react native app.js 编辑:程序博客网 时间:2024/06/11 14:12
作用:上一篇文章中我们通过JSP实现了Bean对象的创建,设置,输出,但是在实际开发中,我们发现JSP在使用对象中包含集合,不能实现,并且代码复杂程度远超java代码,在逻辑判断运算中还要继续借助java代码; EL及jstl将为我们解决以上问题;

(一)、JSP EL(expression Language)
1.1背 景:
1、如何给一个对象加入一个对象;
value="<%=classbean%>"
<jsp:setProperty property="da" name="stu" value="<%=classbean%>"/>
2、如何获取一个对象下面的对象的属性?
el表达式:用于替换脚本表达式,在各个作用域中找我们的脚本语言;
${stu.classbean.name}
JSP表达式的缺陷:表达式冗余笨拙,在对象获取对象中难以操作;
EL表达式:
1、主要用来替换JSP中的脚本表达式。可以从各个域中去找到java对象,获取数据。(JAVABEAN对象、list集合、map集合、数组)
2、利用el表达式可以在jsp页面中进行一些简单的运行,算数运算、逻辑运算、关系运算。
${user == null } 直接输出null
<% request.setAttribute("user","123") %>;
${ user } 直接在页面输出123;
【EL表达式后台原理】:传入表达式${user} String PageContext
调用PageContext.findAttribute(user)方法去找内容, 按照从page-request-session-application的顺序去找,找到了就返回以字符串形式输出,没找到就输出“”空字符串
因此${user} 等价于 request.getAttribute("user");
当几个都拥有相同的属性名的时候,找到最先找到的;session有就找不到app的;
这个要得到内容必须要从域中得到;必须将这些值放在session等!

1.2获取对象
1.2.1获取到list集合中的内容:
session.setAttribute("list",list);
${ list[0].name };
1.2.2获取到Map中的值:
Map<String,String> map = new HashMap<String,String>();
map.put("a","wade");
request.setAttribute("map",map);
${map.a} ${map["1"]}: 当键值对的键值是数字或有字符的时候{ ["asd-yu"] }
(二)、在EL表达式中使用的隐式变量:
pageContetx :  包含所有的;JSP中一致;
${pageScope.name} : 表示当前page域中获取到数据;
requestScope等类似
//直接获取从客户请求过来的内容; param是一个MAP,按照键取值;
${param.username}
//在复选框的时候,paramValues 返回的是一个数组;
${paramValues.like[0].}
//获取请求头, 包括请求头字符串的MAP类
${header.["cache-control"]}
//获取cookie cookie获取到一个map集合,key取出来是一个Cookie对象,value获取到值;
${header.cookie}
${cookie.JSESSIONID.value}

(三)、EL运算符
3.1算数运算符,都可以 +-*/;
<h3>${1+2}</h3>
3.2关系运算符: empty() 判断对象是否为空
${1<2} true
${user eq null} true
${empty(user)}
3.3二元表达式:
${1>2?"ok":"fail"}
3.4逻辑运算符:
${1>0 && 2<3} true
${1>0 and 2<3}
${!true}
${not true}


(四)、标准标记库JSTL:用于处理页面业务逻辑;替换JAVA逻辑代码;弥补HTML不足,没有处理逻辑;
【基本分类】
主要研究核心库,14个标签;
A/表达式控制标签:out标签、set标签、remove标签、catch标签(捕获异常)
B/流程控制标签:if标签,choose标签,when标签,otherwise标签
C、循环标签:foreach标签、fortokens标签
D、URL标签:import、url标签(自带url重写功能)、redirect标签、param标签;
【引入使用】:
<%@ taglib prefix="c"uei="http://java.sun.com/jsp/jstl/core" %>
prefix="c" 引入标准标签库的核心库
【标签含义】:
//输出数据标签,后台也是用过out.write 输出的
<c:out value="123456"></c:out>
<c:out value="${username}"></c:out>
${username}:直接在body中输出,难以控制,使用out标签输出加标签便于控制;
<c:out value="${null}" default=“默认值”></c:out> 值为空默认输出默认值;
<c:out value="${null}">默认值</c:out> 与上面相同

//set 用于把一个对象存放在制定的域范围内;
var表示属性名字, value:属性值, scope:当前将属性放在什么域中;
<c:set var="username" value="123" scope="request"></c:set>
<c:out value="${requestScope.username}"></c:out>
//target:指定要操作的某个对象并操作他的属性;
property:对象的属性;
<c:set target="${bean}" property="name" value="xiaoming"></c:set>
给bean对象的name属性设置为xiaoming ;
<c:set target="${map}" property="a" value="333"></c:set>
给map设置键为a 值为 333;

//remove:用于从指定的域里面移除内容:
从session中删除name1 属性;
<c:remove var="name1" scope="session"></c:remove>

//catch标签:用于捕获异常信息;
<c:catch var="errorinfo">
异常语句
</c:catch>
<c:out value="${errorinfo}"></c:out> 打印出异常错误值;
流程控制标签
if标签: 实现条件的控制
<c:if test="${param.username=='tiger' && param.pwd=='123'}" var="boo">
<c:out value="ok"></c:out> //判断正确执行这个语句
</c:if>
${param.username=='tiger' && param.pwd=='123'} EL表达式得到结果正确或错误
var="boo" 实现获取信息之后的结果判断判断正确为true;

choose+when 类似if-else;
<c:choose>
<c:when test="${grade>=90}">
输出优秀
</c:when>
<c:other>
</c:choose>

循环标签:items:获取要遍历的集合 var:每次循环产生的结果
begin:开始的位置从0开始 end:从哪里结束 step:每次循环的步长;
varStates:当前循环获取到的对象的状态;【下标为多少,循环了多少次;】
res.index:下标 res.count:循环了多少次 res.first :是否是第一个
res.last:是否是最后一个;

for-each
<c:forEach items="${list}" var="bean">
<tr>
<td><c:out value="${}"></c:out></td>
</tr>
</c:forEach>
【细节】:对象中属性为集合 items="${pageBean.date}" var="bean"
<c:out value="${ bean.id }"></c:out></td>

【补充知识】jsp bean程序可以和 java一起套用吗?可以,jsp的对象传入九大隐式对象,就可以相互传值了;
0 0
原创粉丝点击