Java EE day15学习总结

今天主要学习EL表达式和 JSTL

思维导图:

Java EE day15学习总结

 

一.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的判断和循环的对比

Java EE day15学习总结

 

8.三层架构和MVC的开发模式:

JSP的开发模式:但是在SUM公司推出jsp之后,其实也提供一个对应的开发模式,到目前为止,JAVAWEB的开发至少经历了两代甚至三代的开发模式的变革

9.Model1代的开发模式

Java EE day15学习总结

10.Model2代的开发模式

 

Java EE day15学习总结