EL表达式
EL表达式介绍
什么是EL表达式?
EL是expression Language的缩写,它是jsp内置的一种表达式语言,从jsp2.0开始,就不让在使用java脚本,而是使用el表达式来替换jsp中java脚本。
El表达式格式 ${表达式}
使用el表达式的主要敘是代替jsp页面上的<%=%>,也就是说,el表达式主要作用是向浏览器输出数据,例如${1+2} 会浏览器输出3.
为什么使用el表达式
主要目的是为了替换jsp页面上的脚本,使用jsp更加简单,安全。
EL主要作用:
1.
获取数据(主要是域中数据)
2.
执行运算
3.
获取web常用对象
4.
调用java方法(EL函数)
El表达式使用时注意事项
EL表达式是在jsp2.0规范中的一门技术,要想使用el表达式必须使用支持jsp2.0技术的web服务器(tomcat)
Jsp2.0对应的servlet版本是servlet2.4 对应 javaEE1.4.
而我们现在使用的servlet版本是servlet2.5 javaEE5.0
如果在程序中发现el不可以使用:
1.
tomcat是否版本有问题,使用tomcat6以上
2.
在jsp页面上是否设置了isELIgnored="true"
El表达式获取数据
El表达式怎样获取域中数据
1.
page域----------------------${pageScope.name}
2.
request域----------------------${requestScope.name}
3.
session域----------------------${sessionScope.name}
4.
application域----------------------${applicationScope.name}
使用el表达式获取时,如果没有查找到结果,返回的不是null,而是一个””.
1.
获取域中简单数据
El表达式获取复杂数据
<%@page import="cn.itcast.domain.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
EL获取域中复杂数据
<hr>
<%
//定义一个数组
String[] st = { "aa", "bb", "cc" };
request.setAttribute("st", st);
%>
获取request域中st数组第二个值:
<br> jsp:<%=((String[]) request.getAttribute("st"))[1]%><br>
el:${requestScope.st[1]}
<hr>
<%
//定义一个集合List
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
request.setAttribute("list", list);
%>
获取request域中list集合中第二个值:
<br> jsp:<%=((List<String>) request.getAttribute("list")).get(1)%>
<br> el:${requestScope.list[1]}
<hr>
<%
//定义一个Map集合
Map<String, String> map = new HashMap<String, String>();
map.put("one", "aaa");
map.put("two", "bbb");
request.setAttribute("map", map);
%>
获取request域中map集合key=two的value值
<br> jsp:<%=((Map<String, String>) request.getAttribute("map"))
.get("two")%>
<br> el:${requestScope.map.two }
<hr>
<%
//向request中存储一个javaBean
User user = new User();
user.setUsername("tom");
user.setPassword("123");
request.setAttribute("user", user);
%>
获取requst域中user对象的username属性值
<br> jsp:<%=((User) request.getAttribute("user")).getUsername()%><br>
el:${requestScope.user.username}
<br>
<hr>
在el中使用"."与[]可以实现同样的效果:
<br> ${user["username"]}
<br> ${user.username}
<br> 问题:.与[]有什么区别?
<br> 注意:如果名称中不包含特殊符号,那么.与[]一样,但是如果名称中包含了特殊符号,那么我们就只能使用[]
<br>
<%
request.setAttribute("login.msg", "用户名或密码错误");
%>
<br> ${requestScope.login.msg }
<br> ${requestScope["login.msg"] }
<hr>
关于[]中名称如果不使用引号引起有什么问题?
<br>
<%
request.setAttribute("username", "fox");
request.setAttribute("fox", "这是一个好人");
%>
<br>
${requestScope["username"]}<br>
${requestScope[username]}
</body>
</html>
EL执行运算
在el表达式中可以使用运算符来进行操作
1.
算术运算符 + - * /(div) %(mod)
对于算术运算符注意+,它永远执行的就是加法运算。
2.
关系运算符 >(gt) >=(ge) <(lt) <=(le) == (eq) !=(ne)
执行关系运算它得到的结果就是boolean
3.
逻辑运算符
&&(and) ||(or) !(not)
执行逻辑运算得到的结果也是boolean
4.
三目运算符
(表达式1)?(表达式2):(表达式3)
它与java中的三元运算符一样。
5.
empty
i.
如果是一个普通对象,它判断对象是否为null,如果为null返回true.否则返回false.
ii.
如果是一个容器(数组或集合),它不仅判断对象是否为null,还判断是否有元素。
El获取web常用对象
主要是通过el内置对象来操作,它一共有11个内置对象
pageScope requestScope sessionScope applicationScope
以下两个可以用于获取请求参数:
param:获取一个Map<String,String> key就是请求参数名称,value是值
paramValues:获取一个Map<String,String[]>它与request.getParameterMap()结果一样。
header:获取一个Map<String,String>它封装的是所有的http请求头信息
headerValues:获取一个Map<String,String[]>它封装的是所有的http请求头信息
initParam 获取一个Map<String,String>它封装了所有的全局初始化参数
cookie:获取一个Map<String,Cookie> 它封装了所有的http请求的中cookie信息,key就是cookie的名称,value就是这个cookie对象。
pageContext 它与jsp页面上内置对象pageContext一样。
我们在el中使用pageContext一般使用:
${pageContext.request.contextPath}
El函数
Jstl标签库,在jstl标签库中有已经定义好的一些EL函数。
EL函数它的本质是调用了一个java类的方法。
在jsp页面上要使用EL函数必须导入jstl标签库。
在jsp页面上就可以使用el函数,例如
注意:如果在开发中,我们使用的不是myeclipse,那么我们在使用el函数时,必须导入jstl的jar包。因为我们使用的是myeclipse,它会默认导入javaee5.0的库,在这个库中包含了jstl标签库的jar文件,所以不用导入了。
JSTL标签库
JSTL介绍
JSTL(jsp standard tag Library) jsp标准标签库,它是apache对el表达式的扩展,jstl与el结合可以完成更强大的功能。
JSTL它是一种标签语言,它不是jsp内置标签,所以在使用JSTL需要导入相关的jar包。但是我们使用myeclipse开发,在创建web project时,会导入javaee5.0的类库,它已经包含了JSTL标签jar包所以我们不需要导入了,但是如果你使用的不是myeclipse,那么在使用jstl标签时,需要手动导入JSTL标签库。
注意,我们使用JSTL1.0版本以上才支持在JSTL中使用el表达式。
JSTL它的作用:
1.
core 核心标签库,重点学习
2.
fmt 格式化标签库,不使用,简单介绍
3.
sql 数据库标签库,过时不使用
4.
xml xml标签库,过时不使用
5.
jstl中包含了el函数库。
怎样在jsp页面上使用jstl标签:
1.
导入jstl的jar包
2.
在jsp页面上使用taglib指令来导入jstl
注意:没有jsp的是jstl1.0版本,它不支持el表达式,我们要使用带jsp,它是jstl1.0以上版本,支持el表达式。
3.
在jsp页面上使用jstl标签。
重点学习jstl的core标签库。
Jstl中核心标签
一共有12个标签
1.
out
2.
set
3.
remove
4.
catch
5.
if
6.
choose when otherwise
7.
forEach(重要)
它的主要作用是用于循环操作。
简单使用
介绍c:forEach基本使用1
<br>
<c:forEach begin="1" end="10" var="n" step="1">
${n}<br>
</c:forEach>
<%--
上述代码相当于是
for(int n=1;n<=10;n++){
out.println(n);
}
begin:循环开始变量
end:循环结束变量
var:定义一个变量,用于接收循环
step:步长
--%>
<hr>
介绍c:forEach基本使用2
<br>
<c:forEach begin="1" end="10" var="n" step="1" varStatus="vs">
${n}--${vs.count }--${vs.index}--${vs.first}--${vs.last}--${vs.current}<br>
</c:forEach>
<%--
varStatus它是用于记录循环状态,它是一个对象,可使用的属性有
count:用来记录循环的元素的个数
index:用来记录所循环的容器中的元素的下标
first:判断当前是否是第一个元素
last:判断当前是否是最后一个元素
current:代表当前循环的元素
--%>
高级使用
c:forEach高级使用:
<hr>
<h1>遍历数组</h1>
<%
String[] st = { "aaa", "bbb", "ccc" };
request.setAttribute("st", st);
%>
<c:forEach items="${st}" var="s" varStatus="vs">
${s}---${vs.index }<br>
</c:forEach>
<%--
items:用于接收一个容器
var:它是用于接收从容器中迭代出来元素
上面代码相当于增强for循环
for(String s:st){
}
--%>
<hr>
<h1>遍历List集合</h1>
<%
List<String> list = new ArrayList<String>();
list.add("111");
list.add("222");
list.add("333");
request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="n">
${n}<br>
</c:forEach>
<hr>
<h1>遍历Map集合</h1>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("one", "111");
map.put("two", "222");
request.setAttribute("map", map);
%>
<c:forEach items="${map}" var="entry">
${entry.key}--${entry.value}<br>
</c:forEach>
<%--
对map集合遍历,它相当于是使用entrySet()方法遍历
Set<Map.Entry<String,String>> entry=map.entrySet();
for(Map.Entry<String,String> me:entry){
me.getKey() me.getValue():
}
--%>
8.
forToken
9.
import
10.
url ----param
11.
redirect
Jstl核心标签案例-显示商品信息
1.
创建一个Product类
类中有以下属性
2.
创建一个test.jsp页面
在页面上显示商品信息
生成数据
展示数据