1、EL是什么?EL即Expression Language(表达式语言)
(1)、表达式是JSP必备的语法元素。EL表达式语言来自于标准化脚本语言ECMAScript和XPath,EL表达简化了JSP语言的写法。
EL的功能: 替代JSP页面中的复杂代码
例如,对应于以下Java代码片段:
<%
if(session.getAttribute(uname)!=null){
out.println(session.getAttribute("uname").toString());
}
%>
如果使用EL表达式,则只需要一行代码,即:${uname}
效果图:1-1
(2)、使用EL表达式的基本语法:它以 “${” 开头,以“}”结束,中间为合法表达式。
EL的语法格式如下:${el表达式 } 、 ${ EL exprission }
${ u.name } 或 ${ u['name'] }
使用EL表达式之后:${u.uname }:意思是从setAttribute中取得用户的name。
使用EL表达式之前,JSP的代码如下:
<%
//实例化一个用户对象
User u = new User(1, uname, upwd, "清澈的爱只为中国");
//把用户对象放到request对象中
request.setAttribute("u", u);
%>
效果图: 1-2
综上所述可知(特点):
自动转换类型:1、 EL得到某个数据时可以自动转换类型 ;对于类型的限制更加宽松
2、EL的语法比传统的JSP代码更方便、简洁。
(3)el作用域:
作用域访问对象:pageScope、requestScope、sessionScope、applicationScope
变量属性范围名称:
属性范围 | EL中的名称 |
page | pageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回Null |
request | requstScope |
session | sessionScope |
application | applicationScope |
EL语法:
(request)Y:${y }
(session)Y:${sessionScope.y }
(application)Y:${applicationScope.y }
对应JSP代码:
<%
//这里是用来演示 作用域的
request.setAttribute("y", "me");
session.setAttribute("y", "and");
application.setAttribute("y", "you");
%>
效果图: 1-3
隐式对象:参数访问对象:param、paramValues
JSP隐式对象:pageContext
EL隐式对象介绍:
对象名称 | 说 明 |
pageScope | 返回页面范围的变量名,这些名称已映射至相应的值 |
requestScope | 返回请求范围的变量名,这些名称已映射至相应的值 |
sessionScope | 返回会话范围的变量名,这些名称已映射至相应的值 |
applicationScope | 返回应用范围内的变量,并将变量名映射至相应的值 |
param | 返回客户端的请求参数的字符串值 |
paramValues | 返回映射至客户端的请求参数的一组值 |
pageContext | 提供对用户请求和页面信息的访问 |
(4)运算符:EL表达式中定义了许多运算符
算术运算符、关系运算符、逻辑运算符、三元运算符等,使用这些运算符,JSP页面会更加简洁。故,复杂的操作可以使用Servlet和JavaBean(实体类)完成,而简单的内容则可使用EL提供的运算符。(下期会讲到)
例如:运算符”[ ]” 运算符”.”
作用:1、获取对象属性【名称】
${user.name}《=====》${user.[name]}
2、获取对象集合中的数据 在Session中保存了一个(list)集合user
${sessionScope.user[1]} : 得到集合中第二位的对象
案例展示:login.jsp
<body>
<h1>登录页面</h1>
<form action="dologin.jsp">
用户名:<input type="text" id="uname" name="uname"><br>
密码:<input type="password" id="upwd" name="upwd"><br>
<input type="submit" value="登录">
<input type="reset" value="重置" >
</form>
</body>
效果图:1-4
dologin.jsp
<%@page import="java.util.ArrayList"%>
<%@page import="com.china.entity.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//实例化一个对象
User us = new User(1,"love","666","咳咳咳");
request.setAttribute("us", us);
//模拟集合
ArrayList<User> ulist = new ArrayList();
for(int i=1;i<=6;i++){
ulist.add(new User(i,"love"+i,"999","他说来日方长"));
}
request.setAttribute("ulist", ulist);
//转发
request.getRequestDispatcher("index.jsp").forward(request, response);
%>
index.jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="sum"%>
<html>
<head>
<title>测试页面</title>
</head>
<body>
<sum:if test="${true }">
这是成立的
</sum:if>
<sum:set var="x" value="18"></sum:set>
<sum:if test="${x>=10 }">
<h1>x大于等于10</h1>
</sum:if>
<sum:if test="${x<10 }" var="name">
<h1>x小于10</h1>
</sum:if>
<hr>
<!-- 本页面:如果用户登录 就显示欢迎XXX,如果没有登录就显示登录的表单
empty:判断对象是否为空,为空返回true
not empty:判断对象不为空,不为空就返回true-->
<sum:if test="${empty us }">
<form action="dologin.jsp">
用户名:<input type="text" name="uname"><br>
密码:<input type="password" name="upwd"><br>
<input type="submit" value="登录">
<input type="reset" value="重置">
</form>
</sum:if>
<sum:if test="${not empty us}">
欢迎:${us.uname }
</sum:if>
<hr>
<!-- forEach遍历集合 -->
<sum:forEach items="${ulist }" var="user">
<h2>${user.uname }____${user.upwd }____${user.uinfo }<br></h2>
</sum:forEach>
<hr>
<!-- for循环 -->
<!-- begin:i从1开始 end:结束 step:i每次加10 (i+=10)-->
<sum:forEach begin="1" step="20" end="100" var="i">
${i }<br>
</sum:forEach>
</body>
</html>
效果图:1-5
2、jstl jsp标准标签库
JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
(1)、jstl使用步骤:(JSTL通常会与EL表达式合作实现JSP页面的编码)
1、在项目中导入驱动包
2、在JSP页面中添加taglib指令(写引用代码),即:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>3、 使用JSTL标签
(2)、JSTL 的优点:
1、提供一组标准标签
2、可用于编写各种动态 JSP 页面
(3)、JSTL标准标签库内的标签:
核心标准库:
通用标签:
set :设置指定范围内的变量值
例如:<c:set var="x" value="18"></c:set>
<c:set>主要用来将变量储存至JSP范围中或是 JavaBean 的属性中。
利用头标记与尾标记赋值
out : 计算表达式并将结果输出显示
例如:<c:out value="${name }"></c:out>
remove : 移除变量(删除指定范围内的变量)
catch 捕获异常 var
条件标签:if标签用于判断条件是否成立,与Java中的If语句作用相同
if choose when otherwise
迭代标签:实现对集合中对象的遍历
forEach: begin:开始 end:结束 step:自增多少 var:用于存放循环的值的变量名
items:存放数组或者集合对象 el varstatus:当前的变量的状态
<!-- forEach遍历集合 -->
<sum:forEach items="${ulist }" var="user">
<h2>${user.uname }____${user.upwd }____${user.uinfo }<br></h2>
</sum:forEach>
总结:理解代码意思,敲起来不费劲。