一.jsp与java分离
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
【注意事项】
(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 } | false
(6)集合访问
3.JSTL库
由JSP所提供的一套标准标签
--通用标签:set out remove
--条件标签:if if...else
--迭代标签:forEach for循环
JSTL库怎么使用
导入------taglib指令
二.JSTL库
由JSP所提供的一套标准标签
--通用标签:set out remove
--条件标签:if if...else
--迭代标签:forEach for循环
JSTL库怎么使用
导入------taglib指令
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.zking.entity.Student"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 使用taglib指令引入JSTL库 -->
<!-- prefix="" 为标签库命令 -->
<!-- uri="" 引入标签库的文件 -->
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!--
JSTL
1.由JSP内部提供的一套标签库
问题:纯JSP页面中不允许Java代码 需要使用JSTL提供的标签去替代。
2.JSTL
out,set,if,foreach
3.使用步骤:
(1)导入依赖库 lib
(2)在指定的页面中通过taglib指令来引入具体的标签库依赖文件
-->
<%
//通过JSP脚本保存一个值
session.setAttribute("username", "admin");
out.println(session.getAttribute("username"));
%>
<%=session.getAttribute("username") %>
${sessionScope.username }
<!-- 通过JSTL库中的out标签进行值的输出 -->
<!-- default 当value值访问的结果不存在时 会输出默认结果 -->
<c:out value="${username }" default="sb"></c:out>
<!-- 通过JSTL库中的set标签进行对值的设置 -->
<!--
属性:
var 存储的变量名
value 存储的值
scope 作用域(pageContext request session application)
-->
<c:set var="uname" value="风清扬" scope="session"></c:set>
${uname }
<c:out value="${uname }"></c:out>
<!-- 通过JSTL库中提供的if标签来实现对数据进行有效的判断 -->
<c:if test="${1==12 }">
<c:out value="你的条件是OK的"></c:out>
</c:if>
<!-- 通过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>