EL表达式
EL表达式的介绍
EL(Express Lanuage)表达式 可以嵌入在jsp页面内部 减少jsp脚本的编写,EL出现的目的是要代替jsp页面的脚本编写
EL表达式是在jsp2.0之后加入的新的功能,使用表达式语言可以输出存储在标志位置上的对象,比如获取设置的域对象的信息,参数等等,可以大量的减少在jsp中存在Java代码,而且使用EL表达式也非常的简单${标志位置上的对象}。
EL表达式的作用:
- 减少jsp中的以scriptlet形式存在的Java代码
- 空值取代错误信息
- 可以精确的访问对象的属性
- 可以访问集合
- 可以使用运算符
空值取代错误消息表示:如果没有设置任何域对象范围的age信息的时候,使用传统的getAttribute()方法,获取的信息是null,并且能够显示null,那么使用EL表达式之后,这个问题就不存在了,没有设置过的信息,获取的就是空值。EL从域中取出数据
EL最主要的作用式获得四大域中的数据 格式 ${EL表达式}
- EL获得pageContext域中的值:${pageContextScope.key};
- EL获得request域中的值:${requestScope.key};
- EL获得sessiont域中的值:${sessionScope.key};
- EL获得application域中的值:${applicationScope.key};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16例如
<!-- 脚本法是取出域中的值 -->
<%=request.getAttribute("company") %>
<%
User sessionUser = (User)session.getAttribute("user");
out.write(sessionUser.getName());
%>
<!-- 使用EL表达式获得域中的值 -->
${requestScope.company }
${sessionScope.user.name }
${applicationScope.list[1].name}
<!-- 使用el表达式 全域查找 -->
${company }
${user.name }
${list[1].name}
EL的内置对象
四个内置对象
- pageScope
- requestScope
- sessionScope
applicationScope
作用
获取JSP中域的数据
param paramValues 接受参数
相当于request.getParameter()
request.getParameterValues()- header headerValue 接受参数
相当于 request.getHeader(name)
request.getHeaderValues(name) - initParam
获取全局初始化参数
相当于 this.getServletContext().getInitParameter(name) - cookie
WEB开发中cookie
相当于 request.getCookies() cookie.getName() cookie.getValue() - pageContext
WEB开发中pageContext
可以获得其他八大内置对象
${pageContext.request.contextPath}
相当于
<%=pageContext.getRequest().getContextPath%>
获得WEB应用的名称
1
2
3
4
5
6
7
8
9
10
11
12
13 例子
<!-- 使用el获得参数 -->
${param.username }
<br>
${header["Host"] }
<br>
${cookie.name}
<br>
${cookie.name.value }
<br>
<!-- 通过el表达式获得request对象 -->
${pageContext.request }
${pageContext}
EL可以执行表达式运算
<!-- el可以执行表达式运算 -->
${1+1 }
${1==1?true:false }
<!-- empty 判定某个对象是否是null 是null返回true -->
${empty list}
其他内置对象
序号 | 内容 | 说明 |
---|---|---|
1 | pageContext | 表示的javax.servlet.jsp.PageContext对象 |
2 | pageScope | Page范围 |
3 | requestScope | Request范围 |
4 | sessionScope | Session范围 |
5 | applicationScope | Application范围 |
6 | param | 接收传递到本页面的参数 |
7 | paramValues | 接收传递到本页面的一组参数 |
8 | header | 获取一个头信息的内容 |
9 | headerValues | 获取一组头信息的内容 |
10 | cookie | 获取cookie |
11 | initParam | 获取初始化参数 |
使用EL表达式获取不同范围相同名称的域对象信息的时候,获取的是最小的范围。
通过表达式的内置对象就可以获取指定范围的域对象的信息
操作运算符
表达式语言中,为了方便的进行操作,提供了数学运算符、关系运算符、逻辑运算符,三元运算符等操作,在编写过程中,之前使用java 代码进行的运算都可以使用EL表达式完成,结合JSTL一起使用。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33<h3>arg1:${ arg1}</h3>
<h3>arg2:${ arg2}</h3>
<!-- 数学运算 -->
<h3>加法运算:${arg1+arg2 }</h3>
<h3>减法运算:${arg1-arg2 }</h3>
<h3>乘法运算:${arg1*arg2 }</h3>
<h3>除法运算:${arg1/arg2 }</h3>
<h3>取模运算:${arg1%arg2 }</h3>
<!-- 关系运算 -->
<h1>关系运算 :${arg1 == 10 }</h1>
<h1>关系运算 :${arg1 != 10 }</h1>
<h1>关系运算 :${arg1 > 10 }</h1>
<h1>关系运算 :${arg1 < 10 }</h1>
<h1>关系运算 :${arg1 >= 10 }</h1>
<h1>关系运算 :${arg1 <= 10 }</h1>
<!-- 逻辑运算符 &&(and) ||(or) !(not) -->
<h1>逻辑运算符:${arg1 > arg2 && arg1 <30 }</h1>
<h1>逻辑运算符:${arg1 > arg2 and arg1 <30 }</h1>
<h1>逻辑运算符:${arg1 < arg2 || arg1 > 30 }</h1>
<h1>逻辑运算符:${arg1 > arg2 or arg1 <30 }</h1>
<h1>逻辑运算符:${!(arg1 < arg2 or arg1 >30) }</h1>
<h1>逻辑运算符:${not(arg1 < arg2 or arg1 >30) }</h1>
<h1>三元运算:${arg1<arg2?100:1000 }</h1>
<h1>判断是否为空:${empty list }</h1>
<!-- 在开发中,逻辑运算,关系运算,判断是否为空,都经常接口 jstl标签使用 -->
<c:if test="${empty list }">
<h1>集合是空的</h1>
</c:if>
JSTL技术
JSTL(JSP standard Standard Tag Library)
jsp标准标签库
可以嵌入到jsp页面中使用标签的形式完成业务逻辑等功能
JSTL标准标签库有五个子库 主要使用核心库:
- core: c
- I18N: fmt
- SQL: sql
- XML: x
- Functions:fn
导入相对性的jar包
将两个jar包导入到我们的lib工程中
使用jsp的taglib指令
jstl.jar
standar.jar
<%@taglib uri =”http://java.sun.com/jsp/jstl" prefix=”c” %>
JSTL核心库的常用标签
- <c:if test=” “ >标签
其中test是返回boolean的条件 - <c:forEach >标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23例子:从内置对象获取值
<h1>取出字符串List的数据</h1>
<c:forEach begin="0" end="5" var ="i">
${i}
</c:forEach><br/>
<c:forEach items="${strList}" var="str">
${str }<br/>
</c:forEach>
<h1>取出user对象List的数据</h1>
<c:forEach items="${userList}" var="user">
user的name:${user.name }------user的password:${user.password }<br/>
</c:forEach>
<h1>取出字符串Map的数据</h1>
<c:forEach items="${strMap }" var="entry">
${entry.key }====${entry.value }<br/>
</c:forEach>
<h1>取出user对象 Map的数据</h1>
<c:forEach items="${userMap }" var="entry">
${entry.key }:${entry.value.name }--${entry.value.password }<br/>
</c:forEach>
javaEE模式
model1模式:
技术组成:jsp+javaBean
model2模式
技术组成: jsp+servlet+javaBean
jsp数据显示
servlet 获取数据
MVC
MVC 属性web层的技术
M:model ---JavaBean :封装数据
V:View --- 视图 jsp:单纯的页面展示
C:Controller --- 控制器 servlet:获取数据 对数据进行处理 传递数据 指派显示的页面
三层架构
web层: servlet封装javaBean jsp显示 SpringMVC
service层: 业务代码 Spring
dao层: 数据库查询 Mybatis
小结
EL表达式能够进行的操作有很多,可以大量的减少jsp中Java的代码量,在开发中,经常使用