Java EE day15学习总结
今天主要学习EL表达式和 JSTL
思维导图:
一.EL表达式
1.概述:
EL表达式是可以嵌入在JSP的页面的当中的,本质上是为的去减少JAVA代码的编写,因为从原则上来说,JSP里面JAVA代码越少越好,甚至不出现任何JAVA代码。
2.EL表达式的格式:
在JSP的内置表达式当中,所有的操作都是使用 <% %>进行,其实这种操作符号是非常反人类的,绝大部分的语言基本都不会出现这种操作符号。正常的操作符号应该是"$",比如mybits/ajax/juqey/php..类型的框架和语言都是采用"$"。
而EL表达式为了符合正常的表达式的操作定义习惯,也是使用了$.
${表达式}
注意:
因为JSP当中,默认是支持EL表达式的,所以我们直接使用,但是回想下我们之前学JSP的时候,是可以禁止EL(注意)
3.EL获取作用域 不同类型的数据:
EL获取普通字符串
获取上下文作用域
${applicationScope.key_con}
获取会话作用域
${sessionScope.key_sess}
获取请求作用域
${requestScope.key_req}
获取JSP作用域
${pageScope}
简写:
${key}
注意:
当作用域的名字不一致,取出各自作用域的值.
当作用域的名字一致,按照findAttribute的方式,从小到大去寻找作用域
4.EL获取普通对象的数据
request.setAttribute("u",user);
${u.username}
${u.password}
5.EL获取数组或者集合
request.setAttribute("l",list);
${l}
${l[0]}
${l[1]}
${l[2]}
6.EL获取Map集合
request.setAttribute("map",map);
${map}
${map.u1}
${map.u1.username}
或者
${map['day01.user'].username} (这种方式,主要是避免在请求名当中,命名存在了".",比如 day01.user 上面的方式就没法获取)
7.EL的内置11个对象:
对象调用getxxx()方法,例如pageContext.getRequest()可以写为${pageContext.request)
pageContext对象来获取当前项目的名称:
${pageContext.request.contextPath}
8.EL的运算符:
算数运算符:
+ - * /
逻辑运算符:
&& || !
比较运算符:
> < >= <= ==
三元运算符:
(true) ? xx : xx
判空运算符(为null或者没有元素值都为空):
empty
${empty list2}
9.注意:
(1)EL的主要作用其实就是减少JSP页面当中的输出语句的编写(本质上就是少些代码,完成输出)
(2)EL如果获取到的数据是一个null,则不会显示到页面
二.JSTL
1.JSTL概念:
JSTL是JSP的标签库,可以嵌入在JSP页面当中,使用标签的形式完成大部分的业务逻辑功能,JSTL的出现和EL的出现是一样的;主要也是为了解决减少JSP页面大量编写Java代码的问题的,但是EL解决的输出的问题,而JSTL解决的是逻辑问题,一般JSTL基本上都是和EL搭配使用。学习JSTL一共要学习5个库,但是随着开发态势的不断调整,JSP的优势几乎丧失,目前所谓的5个库,在代码当中基本只能见到核心库。
2.JSTL的核心标签库:
核心标签(core): 核心标签库,我们学习的重点;
格式化标签 :只需要学习两个标签即可;
SQL 标签( sql):数据库标签库,不需要学习了,它过时了;
XML 标签: 不需要学习了,它过时了。
JSTL 函数: 主要定义对字符串操作的函数库,在EL表达式中运行。
3.如何使用JSTL:
(1)先导入Jar包
javax.servlet.jsp.jstl.jar
jstl-impl.jar
(2)在JSP页面使用taglib指令导入JSTL的标签库
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)测试导入是否成功
在页面输入 <c: 看有没有core库的代码提示,有一些编译器可能没有,那么就只能写好再去测。
4.JSTL的常用标签:
JSTL的核心库当中存在很多的标签,但是目前常用的标签只有if和foreach标签,其余的几乎见不到,万一见到就百度
5.if标签的使用:
if标签的属性:
test:用于判断表达式
scope:可以将执行的结果保存到一个指定的作用域当中(基本不用)
var:可以将执行的属性的执行结果保存当某个作用域的某个属性的名称(基本不用)
<c:if test="${num == 5}">
<span style="color: red">这个值大于5</span>
</c:if>
注意:
JSTL没有else和else if
6.foreach标签的属性:
var:代表的循环当中的变量(循环变量)
begin:代表这个var的初始化值(循环初始化值)
end:代表判断条件的结束的值(循环的结束值,结束值本身也算)
step:代表执行多少次(循环每次自增的次数)
items:代表需要遍历的容器
varStatus:定义一个计数器对象,默认从1开始
操作普通循环:
<c:forEach var="i" begin="0" end="5" step="1">
${i}<br/>
</c:forEach>
操作foreach循环:
<c:forEach var="str" items="${list}" varStatus="num">
{str}<br/>
${num.count}
</c:forEach>
7.JSTL的判断和循环的对比
8.三层架构和MVC的开发模式:
JSP的开发模式:但是在SUM公司推出jsp之后,其实也提供一个对应的开发模式,到目前为止,JAVAWEB的开发至少经历了两代甚至三代的开发模式的变革
9.Model1代的开发模式
10.Model2代的开发模式