一、域对象?
1.page域(pageContext):只能作用于当前页面,既不能用来做做转发的数据分享,也不能做重定向的数据分享。
2.request域:只能作用于同一个请求的数据共享,所以只能在请求的转发中使用。
3.session域:只能作用于一次对话中共享数据(一次对话:用户打开浏览器,浏览多个web站点后,关闭该浏览器),转发和重定向都可以使用
4.context域(application):只能在同一个web应用中使用。(全局的)
之所以他们是域对象,原因是他们都内置了map集合,都有setAttribute和getAttribute方法
域对象的作用:临时的存储有效的数据,四个作用域保存的值
域对象的范围:pageContext<request<session<application
代码如下(示例):
<!-- 通过jsp表达式的方式进行输出作用域保存的值 -->
<%=pageContext.getAttribute("杨过") %>
<br/>
<%=request.getAttribute("张无忌") %>
<br/>
<%=session.getAttribute("郭靖") %>
<br/>
<%=application.getAttribute("宋威") %>
<hr/>
<!--
EL表达式
属于JSP的一个基础语法,作用:让数据调用的更简单。
$ { }
-->
<h2>EL表达式获取域对象所保存的值</h2>
<!-- 通过EL表达式的方式进行输出域对象所保存的值 -->
<%=pageContext.getAttribute("杨过") %> ==== ${杨过 }
<br/>
${郭靖 }
<!-- 通过域对象保存同一个键 不同的值 -->
<%
//存储值
pageContext.setAttribute("zkingzz", "西施");
request.setAttribute("zkingzz", "王昭君");
session.setAttribute("zkingzz", "貂蝉");
application.setAttribute("zkingzz", "杨玉环");
%>
<hr/>
<!-- 获取 -->
<!-- 通过jsp表达式的方式进行输出作用域保存的值 -->
<%=pageContext.getAttribute("zkingzz") %>
<br/>
<%=request.getAttribute("zkingzz") %>
<br/>
<%=session.getAttribute("zkingzz") %>
<br/>
<%=application.getAttribute("zkingzz") %>
<h3>通过EL表达式获取同一个键不同的值</h3>
${zkingzz }
<!-- 超链接跳转 属于重定向 -->
<p>
<a href = "demo3.jsp">跳转</a>
</p>
<!-- 转发 -->
<%-- <jsp:forward page="demo3.jsp"></jsp:forward> --%>
<!-- 通过EL表达式获取四个域对象分别保存的值 -->
<!-- EL表达式中提供了四个隐式域对象 -->
<hr/>
${pageScope.zkingzz }
<br/>
${requestScope.zkingzz }
<br/>
${sessionScope.zkingzz }
<br/>
${applicationScope.zkingzz }
<hr/>
<!-- EL表达式获取的值可以有哪些? -->
${123 }
${"123" }
${1==2 }
${"love"=="爱" }
equals
${"love" eq "爱" }
${1>2 }
<%
List<String> list = new ArrayList<String>();
list.add("zhangsan");
list.add("lisi");
session.setAttribute("list",list);
%>
${list }
<hr/>
<!-- 保存实体 -->
<%
Student stu = new Student("张三","男");
session.setAttribute("stu", stu);
%>
${sessionScope.stu.name }
<!-- empty 判断EL表达式中的变量是否存在 -->
${empty list }
二、EL表达式
概述
EL 是 JSP 表达式语言,全称是 ExpressionLanguage,使用 EL 的目的是简化在 JSP 中访问变量的方式,简单静态 HTML 与 Java 代码的耦合
基本语法格式
${ EL Expression}
1.示例代码
${ "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. "."与"[ ]"的相同点和差别
(1)相同点:都可以访问对象有属性。
(2)不同点:当属性的名字包含有空格,点号等复杂符号时。使用"." 来访问对象有属性将会出现异常
3. EL表达式中的操作符
(1)算术操作符 (+,-,*,/,%)
(2)逻辑操作符 (&&,||,! 或 and,or,not )
(3)比较操作符 (>,>=,<,<=,==,!==) 可以自动转换数据类型
(4)空操作符 (empty) 当值为 null 时返回 true
【注意事项】
(a)EL的算术运算符和Java中的运算符的大致相同,优先级也相同。
(b)'+' 运算符不会连接字符串了,他只用于加法运算。
==========================================================================
4.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 } | false
5.集合访问
代码如下(示例):
<!-- 通过JSTL库中提供的if标签来实现对数据进行有效的判断 -->
<c:if test="${1==12 }">
<c:out value="你的条件是OK的"></c:out>
</c:if>
三、JSTL库
由JSP所提供的一套标准标签
--通用标签:set out remove
--条件标签:if if...else
--迭代标签:forEach for循环
JSTL库怎么使用
导入------taglib指令
代码如下(示例):
<!-- 通过JSTL库中的if标签实现一个登录案例 -->
<!--
已登录----显示当前的登录名
未登录 ----显示登录的表单
-->
<%
//获取
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
if(username!=null){
Student student = new Student(username,"男");
session.setAttribute("student", student);
}
%>
<c:if test="${empty student }">
<form action = "demo4.jsp" method = "post">
账户 <input type = "text" name = "username"/>
<br/>
<br/>
密码 <input type = "password" name = "password"/>
<br/>
<br/>
<input type = "submit" value = "登录"/>
</form>
</c:if>
<c:if test="${not empty student }">
<h4>欢迎您回来!${student.username }</h4>
</c:if>
<!-- remove标签 移除 -->
<c:set var="bb" value="123456"></c:set>
移除前: <c:out value="${bb }"></c:out>
<!-- 移除 -->
<hr/>
<c:remove var="bb" />
移除后:<c:out value="${bb }"></c:out>
<!-- foreach循环标签 -->
<hr/>
<!--
sb 变量
begin 起始值
end 终值
step 每次增长2
varStatus 获取数据对应的行号(Y1阶段 J2EE 自定义JSP标签)
-->
<c:forEach var="sb" begin="1" end="100" step="2" varStatus="demo" >
${sb }----${demo.index }----${demo.count } <br/>
</c:forEach>
<br/>
<%
List<Student> myList = new ArrayList<Student>();
myList.add(new Student("张三1","男"));
myList.add(new Student("张三2","男"));
myList.add(new Student("张三3","男"));
myList.add(new Student("张三4","男"));
myList.add(new Student("张三5","男"));
session.setAttribute("myList", myList);
%>
<c:forEach items="${myList }" var="stu">
${stu.username } ${stu.sex }
</c:forEach>
总结