目录
一、EL
1.EL概述
用来解决在JSP页面写Java代码导致混乱的问题,在 JSP2.0 规范中提供了 EL 表达式。EL 是 Expression Language 的缩写,它是一种简单的数据访问.
2.EL的使用
EL 表达式的语法非常简单,都是以“${”符号开始, 以“}”符号结束的,具体格式如下: ${...}
代码示例:
Servlet
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("username", "lisi");
request.setAttribute("password", "123456");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
jsp页面
<boby>
用户名:${username }
密码:${password }
</body>
3.EL语法
EL标识符规范
1. 不能以数字开头;
2. 不能是 EL 中的保留字,如 and、or、gt;
3. 不能是 EL 隐式对象,如 pageContext;
4. 不能包含单引号()、双引号(")、减号(-)和正斜线等特殊字符常量
EL表达式中的变量
EL 表达式中的变量就是一个基本的存储单元,EL 表达式可以将变量映射到一个对象上。 ${name } name 就是一个变量,EL 表达中的变量不用事先定义就可以直接使用,${name }就可以访 问变量 name 的值。
EL 表达式中的常量
它是不能改变的数据 包括 布尔常量 整型常量 浮点数常量 字符串常量 Null 常量
EL 表达式中的点运算符
用于问 JSP 页面中某些对象的属性 ${user.name } 访问 user 对象中的 name 属性
EL 表达式中的方括号运算符
与点运算符的功能相同,都用于访问 JSP 页面中某些对象的属 性,当获取的属性名中包含一些特殊符号,如“-”或“?”等并非字母或数字的符号,就 只能使用方括号运算符来访问该属性,其语法格式如下
${user["My-name"]} 访问 user 对象中的 My-name 属性
示例:
与点运算符的区别
1. 点运算符和方括号运算符在某种情况下可以互换 如 ${user.name} 等价于 ${user["name"]}
2. 方括号运算符和点运算符可以相互结合使用 例如,表达式${users[0].name}可以访问集合或数组中的第一个元素的 name 属性
3. 方括号运算符还可以访问 List 集合或数组中指定索引的某个元素, 如表达式${users[0]}用于访问集合或数组中第一个元素。在这种情况下,只能使用方括号运算符而不能使用点运算符
以及以下运算符:
empty 运算符用于判断某个对象是否为 null 或”” ${empty var} ${empty user}
示例:
4、EL隐式对象(重点)
获取指定作用域数据
<body>
<%
pageContext.setAttribute("name","aaa");
request.setAttribute("name","bbb");
session.setAttribute("name","ccc");
application.setAttribute("name","ddd");
%>
使用脚本取域里的值
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name") %><br>
EL表达式取值:依次(小到大)从域中找key为name的值<br>
${name}
从指定域中去取值:<br>
pageContext:${pageScope.name }<br>
request:${requestScope.name }<br>
session:${sessionScope.name }<br>
application:${applicationScope.name }<br>
</body>
运行结果:
获取头信息
<body>
${header.Host }<br>
${headerValues }<br>
User-Agent:
${headerValues["User-Agent"][0]}
</body>
结果:
获取初始化参数的信息
<body>
取到初始化的所有的值:
${initParam }<br>
取到初始化指定的值:
${initParam.name }
</body>
在web.xml里写初始化参数
运行结果:
获取cookie
<title>EL获取cookie</title>
</head>
<body>
<%
Cookie c=new Cookie("JSESSIONID","F5AE0956598D88878F20A961C4D9F15F");
%>
${cookie }<br>
${cookie.JSESSIONID }<br>
${cookie.JSESSIONID.value}<br>
</body>
运行结果:
获取数据
<title>EL获取Map</title>
</head>
<body>
<%
Map m=new HashMap();
m.put("name","yyy");
m.put("age","18");
request.setAttribute("m",m);
%>
脚本方式:
<%=((Map)request.getAttribute("m")).get("name") %><br>
EL方式:
${m }<br>
${m.name}
</body>
运行结果:
二、JSTL
1.概述
标准标签库( JavaServer Pages Standard Tag Library),简称 JSTL
2.安装和测试
下载JSTL包并导入
下载地址:http://tomcat.apache.org/download-taglibs.cgi#Standard-1.2.5
导入项目:
测试:
导入Core标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>(必须加上)
示例:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>测试</title>
</head>
<body>
<c:out value="哈哈"></c:out>
</body>
</html>
运行结果:
3.标签介绍
set标签
属性介绍:
1. value 属性用于设置属性的值
2. var 属性用于指定要设置的域对象属性的名称
3. scope 属性用于指定属性所在的域对象
4. target 用于指定要设置属性的对象,这个对象必须为 JavaBean 对象或 Map 对象
5. property 用于指定要为当前对象设置的属性名称
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
设置域中的值:
<c:set value="yyy" scope="session" var="userName"></c:set>
<c:out value="${userName}"></c:out>
</body>
</html>
运行结果:
if标签
属性介绍:
1. test 属性用于设置逻辑表达式
2. var 属性用于指定逻辑表达式中变量的名字
3. scope 属性用于指定 var 变量的作用范围,默认值为 page,如果属性 test 的计 算结果为 true,那么标签体内将被执行,否则标签体不会被执行。
<body>
<c:if test="${3<4}">
3小于4
</c:if>
</body>
运行结果:
choose标签
<body>
<c:set value="5" scope="session" var="day"></c:set>
<c:choose>
<c:when test="${day==1}">周一</c:when>
<c:when test="${day==2}">周二</c:when>
<c:when test="${day==3}">周三</c:when>
<c:when test="${day==4}">周四</c:when>
<c:when test="${day==5}">周五</c:when>
<c:when test="${day==6}">周六</c:when>
<c:when test="${day==7}">周日</c:when>
<c:otherwise>未知</c:otherwise>
</c:choose>
</body>
运行结果:
forEach标签
<body>
<%
List list=new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list);
%>
${list }<br>
${list[0] }<br>
<c:forEach begin="1" end="10" step="1" var="i" varStatus="vs">
${i }--${vs.count }--${vs.current }<br>
</c:forEach>
<c:forEach items="${list}" var="v">${v }<br></c:forEach>
</body>
运行结果: