一:域对象
四大作用域对象:
pageContext request session application
作用:
用于保存数据,获取数据,在不同资源之间共享数据。
方法:
setAttribute(name,object) ; 保存数据方法
getAttribute(name) 获取数据
romveAttribute(name) 清除数据
作用范围:
pageContext域 | 处于同一个jsp页面中数据共享是有效的,其他页面无效(范围最小) |
request域 | 处于同一个请求中数据共享是有效的,其他无效(转发有效) |
session域 | 处于同一个会话(打开浏览器和关闭浏览器的过程)中数据共享是有效的 |
application域 | 处于同一个web应用中数据共享是有效的 |
二:EL表达式
1. EL(expression language) 是 JSP 表达式语言,全称是 ExpressionLanguage,使用 EL 的目的是简化在 JSP 中访问变量的方式,简单静态 HTML 与 Java 代码的耦合,提供了在jsp中简化表达式的方法,让jsp的代码更加简化
基本语法格式:
?
${ EL Expression}?
2. EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,找到就输出,与四个域对象声明的先后顺序无关
?
?
<!-- 通过域对象保存同一个键 不同的值 --><%//存储值pageContext.setAttribute("李白", "西施");request.setAttribute("李白", "王昭君");session.setAttribute("李白", "貂蝉");application.setAttribute("李白", "杨玉环");%><hr/><!-- 获取 --><!-- 通过jsp表达式的方式进行输出作用域保存的值 --><%=pageContext.getAttribute("李白") %><br/><%=request.getAttribute("李白") %><br/><%=session.getAttribute("李白") %><br/><%=application.getAttribute("李白") %><h3>通过EL表达式获取同一个键不同的值</h3>${李白 }??
3. EL表达式中的四个隐式域对象 :
pageScope requestScope sessionScope applicationScope
4. EL表达式中可以获取的值:
${ "Helloworld" } // 输出字符串常量${ str } // 输出字符串变量 str 的值${ 3 + 2 } // 输出 3+2 的结果${ user.name} // 输出 user 对象的 name 属性${user["name"] } // 同上${ sessionScope ["user"].name } // 同上${user.name} //访问对象 user 的 getName () 方法以得到 name 成员的值。${list[1]} //访问 list 对象的第二项。${map["key"]} //访问 map 指定键的值。
5. empty运算:
empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false
以下几种情况为空(在原本的key之前加empty关键字):
(1)值为null、空串
(2)值为Object类型的数组且长度为0 (注:其他类型的长度为0的数组值为非空)
(3)List、Map集合元素个数为0
6."."与"[ ]"的相同点和差别:
(1)相同点:都可以访问对象有属性。
(2)不同点:当属性的名字包含有空格,点号等复杂符号时。使用"." 来访问对象有属性将会出现异常
三:JSTL库
由JSP所提供的一套标准标签 ,在纯JSP页面中用JSTL提供的标签去替代Java代码
使用步骤:
(1)导入依赖库---- lib
(2)在指定的页面中通过taglib指令来引入具体的标签库依赖文件
使用标签时,一定要在jsp文件头加入以下代码:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1. <c:out> 用来显示数据对象(字符串、表达式)的内容或结果
使用Java脚本的方式为:<% out.println("hello") %> <% =表达式 %>
使用JSTL标签:<c:out value="字符串">,例如:
<c:out value="${username }" default="ok"></c:out>
注:default 当value值访问的结果不存在时 会输出默认结果
2. <c:set> 用于将变量存取于 JSP 范围中或 JavaBean 属性中。
属性:
var 存储的变量名
value 存储的值
scope 作用域
?<c:set var="uname" value="李太白" scope="session"></c:set>${uname }<c:out value="${uname }"></c:out>?
3.<c:remove> 主要用来从指定的 jsp 范围内移除指定的变量。使用类似,语法如下:
<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>
<c:set var="bb" value="123456"></c:set>移除前: <c:out value="${}"></c:out><hr/><c:remove var="cc" />移除后:<c:out value="${bb }"></c:out>
4.<c:if>
<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:remove>
<c:if test="${1==12 }"><c:out value="你的条件是OK的"></c:out></c:if>
5.<c:forEach>
语法:<c:forEach var="name" items="Collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>
属性:
var 变量名
begin 起始值
end 终值
step 每次增长量
varStatus 获取数据对应的行号
<c:forEach var="wa" begin="1" end="100" step="2" varStatus="demo" >${wa }----${demo.index }----${demo.count } <br/></c:forEach>
案例:遍历集合数据
<%List<Student> myList = new ArrayList<Student>();myList.add(new Student("李白","男"));myList.add(new Student("李世民","男"));myList.add(new Student("成吉思汗","男"));myList.add(new Student("刘邦","男"));myList.add(new Student("刘备","男"));session.setAttribute("myList", myList);%><c:forEach items="${myList }" var="stu">${stu.username } ${stu.sex }</c:forEach>