1.域对象
page域(pageContext):只能作用于当前页面,既不能用来做做转发的数据分享,也不能做重定向的数据分享。
request域:只能作用于同一个请求的数据共享,所以只能在请求的转发中使用。
session域:只能作用于一次对话中共享数据(一次对话:用户打开浏览器,浏览多个web站点后,关闭该浏览器),转发和重定向都可以使用
context域(application):只能在同一个web应用中使用。(全局的)
2.EL表达式的使用
2.1 概述
EL 是 JSP 表达式语言,全称是 ExpressionLanguage,使用 EL 的目的是简化在 JSP 中访问变量的方式,简单静态 HTML 与 Java 代码的耦合。
2.2 基本语法格式
${ EL Expression}
2.3 示例代码
${ "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 指定键的值。
2.4 "."与"[ ]"的相同点和差别
(1)相同点:都可以访问对象有属性。
(2)不同点:当属性的名字包含有空格,点号等复杂符号时。使用"." 来访问对象有属性将会出现异常
2.5 EL表达式中的操作符
(1)算术操作符 (+,-,*,/,%)
(2)逻辑操作符 (&&,||,! 或 and,or,not )
(3)比较操作符 (>,>=,<,<=,==,!==) 可以自动转换数据类型
(4)空操作符 (empty) 当值为 null 时返回 true
$(empty 变量或域对象保存的值)
【注意事项】
(a)EL的算术运算符和Java中的运算符的大致相同,优先级也相同。
(b)'+' 运算符不会连接字符串了,他只用于加法运算。
=================================
(5)EL关系运算符有以下六个运算符
关系运算符 说 明 范例 结果
== 或 eq | 等于 | ${ 5 = = 5 } 或 ${ 5 eq 5 } | true
!= 或 ne | 不等于 | ${ 5 != 5 } 或 ${ 5 ne 5 } | false
< 或 lt | 小于 | ${ 3 < 5 }或 ${ 3 lt 5 } | true
> 或 gt | 大于 | ${ 3 > 5 }或 ${ 3 gt 5 } | false
<= 或 le | 小于等于 | ${ 3 <= 5 }或 ${ 3 le 5 } | true
>= 或 ge | 大于等于 | ${ 3 >= 5 }或 ${ 3 ge 5 } | falseEL 指定域对象获取值
<h4>EL表达式中的隐式对象(域对象)</h4> pageScope/requestScope/sessionScope/applicationScope param 对象 paramValues 等价于getParametervalues ${param.username}等价于 <%=request.getParameter("username")%> <% pageContext.setAttribute("zkingzz", "小笼包"); request.setAttribute("zkingzz", "赵敏"); session.setAttribute("zkingzz", "海飞丝"); application.setAttribute("zkingzz", "坤坤"); %> ${zkingzz } ${sessionScope.zkingzz }
(6)集合访问
<% String[] names = {"黄回","胡庆邦","谢文建","廖加俊"}; session.setAttribute("names",names); List<String> list = new ArrayList<String>(); list.add("张无忌"); session.setAttribute("list",list); Map<String,String> maps = new HashMap<String,String>(); maps.put("刘亦菲", "小老婆"); session.setAttribute("maps",maps); List<Student> list2 = new ArrayList<Student>(); list2.add(new Student("东方不败",18)); session.setAttribute("list2",list2); %> ${names[3] }//获取数组 ${list[0] } //函数 ${maps.刘亦菲 }//Map集合 ${list2[0].name }list集合
3.JSTL库 基本标签的使用
架包下载
文件 密码:ayrh
<!--
JSTL标准标签库的使用步骤
1.导入jar 2个
2.利用taglib指令引入JSTL核心标签库依赖
prefix="c" 给JSTL命名为c标签
uri 核心标签库 依赖路径
3.out,set,remove,if,foreach
-->
引入依赖 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<h4>out标签的使用</h4>
<%
session.setAttribute("username", "admin");
%>
${username }
<!-- 如果el表达式的变量不存在 默认输出sb default -->
<c:out value="${username2 }" default="sb"></c:out>
<h4>set标签的使用</h4>
<!-- var 变量的名称 -->
<!-- value 变量的值 -->
<!-- scope 域对象的范围,默认page -->
<c:set var = "mylove" value="刘亦菲" scope="session" ></c:set>
<c:out value="${mylove }"></c:out>
<h4>remove标签的使用</h4>
<c:set var = "stu" value = "${87+2 }" scope="session"></c:set>
移除前: <c:out value="${stu }"></c:out>
<br/>
<c:remove var="stu" scope="request" />
移除后: <c:out value="${stu }"></c:out>
<h4>if标签的使用(JSTL中有if没有else) if(){}</h4>
<c:if test="${1==1 }">
这是OK的
</c:if>
<c:if test="${1!=1 }">
这是不OK的
</c:if>
<h2>模拟登录</h2>
<!-- 假设域对象中保存一个用户 判断用户是否为空 -->
<%
//当页面提交后 进行登录 保存
String uname = request.getParameter("username");
session.setAttribute("uname", uname);
%>
<!-- 如果用户为空 显示表单 -->
<c:if test="${empty uname }">
<form action = "demo5.jsp" method = "post">
用户名: <input type = "text" name = "username"/>
<input type ="submit" value ="登录"/>
</form>
</c:if>
<!-- 如果点击了登录 说明跳转了 session保存了用户 -->
<!-- uname不为空 显示对应的账户 将表单隐藏 -->
<c:if test="${not empty uname }">
<h4>欢迎您回来!${sessionScope.uname }</h4>
</c:if>
<h4>foreach标签</h4>
<!-- 打印输出1-100的结果 -->
<!-- step="5" 计布器(步长) -->
<c:forEach var = "i" begin="1" end ="100" step="2" varStatus="sb">
${i }-----${sb.index }----${sb.count } <br/>
</c:forEach>
<!-- 遍历集合 使用的属性 items = "遍历的集合"start end 不需要-->
<%
List<Student> listStudents = new ArrayList<Student>();
listStudents.add(new Student("aa",12));
listStudents.add(new Student("bb",12));
listStudents.add(new Student("cc",12));
listStudents.add(new Student("ee",12));
listStudents.add(new Student("dd",12));
listStudents.add(new Student("ff",12));
session.setAttribute("listStudents", listStudents);
%>
<c:forEach items="${listStudents }" var = "stu">
${stu.name }-----${stu.age }
</c:forEach>
遍历一个list集合
pageScope/requestScope/sessionScope/applicationScope 域对象 对应的
<c:if test="${not empty sessionScope.shopping}" > //判断sessionScope这个shopping保存的list集合不可为空 //items="${sessionScope.shopping}"遍历这个集合 var给集合起一个变量名 <c:forEach items="${sessionScope.shopping}" var="goods"> <li> <div class="sfz_01_34"><img src="${goods.gimage }"><a href="#"></a> <p class="sfz_02_34">${goods.gprice }</p> <p class="sfz_03_34">${goods.gname }</p> <div id="Divs"> <p class="sfz_04_34" onclick="addGoods('${goods.gid}')">加入购物车</p> <p class="sfz_05_34">立即购买</p> </div> </div> </li> </c:forEach> </c:if>