目标
- 在JSP中使用El表达式
- 在JSP中使用JSTL
- 使用javabean、el、 jstl 编写无脚本的jsp页面
el表达式
全称:Expression Language
语法示例:
${ stu.classbean.name }
功能:
1.el表达式主要用来替换jsp中的脚本表达式。可以用各个域中去找到java对象,获取到数据。
(JavaBean , list集合,map集合 ,数组)
利用el表达式可以在jsp页面进行一些简单的运算,算数运算,逻辑运算,关系运算。
eg:
${user == null}
执行的原理:
- 首先在执行内容的时候,会调用pageContext.findAttribute(xxxx)。分别从page,request,session ,application 四个域获取内容。
- 找到了就返回当前的对象,找不到就返回”” .(返回的不是null 是”“)
使用el获取list集合的内容:
<%
List<StudentBean> list = new ArrayList<StudentBean>();
StudentBean b = new StudenBean("张三",18);
StudentBean b2 = new StudenBean("张四",18);
list.add(b);
list.add(b2);
session.setAttribute("list",list);
%>
${list[0].name}
使用el获取map集合的内容:
<%
Map<String,String> mao = new HashMap<String,String>();
mao.put("a","wade");
mao.put("b","james");
mao.put("1","kobe");
request.setAttribute(mao);
%>
${mao.a}
${mao["1"]}
<!--返回0就表示没有找到对应的值-->
<!--有连字符的话-->
${mao.["asd-u"]}
<!--pageScope 表示从当前page域中获取数据-->
el隐式对象:
param :请求参数字符串的map类;
<!--param 获取到用户请求过来的内容,返回的是map集合-->
${param.name}
paramValues : 获得的是请求过来的数组
<!--键是一样的,比如爱好参数-->
${paramValues.like[0]}
<!--这个返回的是字符串数组-->
header : 获得请求头信息
headerValues : 获得请求头的值数组
cookie:
// cookie获取到的是一个map集合,map.key 取出来的是一个cookie对象 ,再通过cookie对象.value 获得值
${cookie.JSESSIONID.value}
在el中可以
${user eq null}
eq 比较两个是否相等
使用empty() 判断是不是空
${empty(user)}
el中使用二元表达式:
–就是java中的三目运算符
${1>2? "ok" : "fail"}
逻辑运算符还可以:
${1>0&& 2>1}
${1>0 and 2>1}
一些关键字:
and , or , not true , !true ,
标准标记库 JSTL
jstl是为了弥补html不足。
需要导入2个jar文件:
- jstl.jar
- standard.jar
赋值到WEB-INF BIN 目录下
使用jstl目的:为了消除页面上的java逻辑代码。
主要研究核心库:
表达式控制标签: out 、set 、remove、catch
流程控制标签: if 、choose 、when 、otherwise
循环标签:forEach、forTokens、
URL标签:import 、 URL 、redirect 、param
导入标签库
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%>
out 标签: 输出数据(后台也是通过out.write())
<c:out value = "1234"></c:out> <c:out default = "默认值" values = "${null}"></c:out> <!--default 输出默认值 两种不能混合使用--> <c:out value = "${null}">默认</c:out>
set 标签:把一个对象存放在指定的域范围内
//var : 设置的属性名字 //value : 属性值 //scope : 当前属性放在什么域中 <c:set var = "username" values = "123" scope = "request"></c:set> <c:out value = "${requestScope.username}"></c:out> <% StudentBean stu = new StudentBean(); request.setAttribute("bean",bean); Map map = new HashMap(); map.put("a","123"); request.setAttribute("map",map); %> <!--target : 指定要操作的某一个对象 ,不能属性,只能是javabean或者map--> <c:set target="${bean}" property ="name" value = "张三"></c:set> <c:set target="${map}" property ="a" value = "321"></c:set>
3.remove 标签 :主要用来从指定的域里面移除内容
-
<c:set var = "name1" values = "123" scope = "session"></c:set>
<c:set var = "name2" values = "123" scope = "session"></c:set>
<c:remove var = "name1" scope = "session"></c:remove>
4.catch 标签 : 主要是用来捕获jsp里面的异常信息。
<c:catch var = "errorinfo">
<c:set target = "${classbean}" property ="name" value = "313"></c:set>
<c:catch>
<c:out value = "${errorinfo}"></c:out>
if 标签 : 实现条件的控制。
<form> <input type= "text" name = "name"> <input type = "submit" value = "提交"/> </form> //var 获取的是前面的test的结果 <c:if text = "${param.name == 'tiger'&& param.passwor == '123'}" var = "boo"> <c:out value = "OK"></c:out> </c:if>
choose 、when 、otherwise 标签 混合使用
<% request.setAttribute("grade",79); %> <c:choose> <c:when test = "${grader>=90}"> <c:out value = "优秀"></c:out> </c:when> <c:when test = "${grader>=80 && grade <90}"> <c:out value = "还可以"></c:out> </c:when> <c:otherwise> <c:out value = "垃圾"></c:out> </c:otherwise> </c:choose>
forEach 标签
item:获取要遍历的集合 var :每次循环产生的结果 begin:开始的位置,从开始 end: 在哪里结束 step : 每次循环的步长 varStatus : 当前循环获取到的对象的状态 , <% List<UserBean> list = new ArrayList<UserBean>(); UserBean us1 = new UserBean(); UserBean us2 = new UserBean(); list.add(us1); list.add(us2); request.setAttribute("list",list); %> <table border=1> <c:forEach items="${list}" var = "bean" begin ="1" step ="1" varStatus = "res"> <tr> <td> <c:out value = "${bean.id}"></c:out></td> <td><c:out value = "${bean.name}"></c:out></td> </tr> <!--下标--> <c:out value = "${res.index}"></c:out> <!--循环的次数--> <c:out value = "${res.count}"></c:out> <!--是不是第一个--> <c:out value = "${res.first}"></c:out> <!--是不是最后一个--> <c:out value = "${res.last}"></c:out> </c:forEach> </table>