EL和JSTL表达式

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表达式}

  1. EL获得pageContext域中的值:${pageContextScope.key};
  2. EL获得request域中的值:${requestScope.key};
  3. EL获得sessiont域中的值:${sessionScope.key};
  4. 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的内置对象

四个内置对象

  1. pageScope
  2. requestScope
  3. sessionScope
  4. applicationScope

    作用

    获取JSP中域的数据

  5. param paramValues 接受参数
    相当于request.getParameter()
    request.getParameterValues()

  6. header headerValue 接受参数
    相当于 request.getHeader(name)
    request.getHeaderValues(name)
  7. initParam
    获取全局初始化参数
    相当于 this.getServletContext().getInitParameter(name)
  8. cookie
    WEB开发中cookie
    相当于 request.getCookies() cookie.getName() cookie.getValue()
  9. 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标准标签库有五个子库 主要使用核心库:

  1. core: c
  2. I18N: fmt
  3. SQL: sql
  4. XML: x
  5. Functions:fn

导入相对性的jar包

将两个jar包导入到我们的lib工程中
使用jsp的taglib指令
jstl.jar
standar.jar
<%@taglib uri =”http://java.sun.com/jsp/jstl" prefix=”c” %>

JSTL核心库的常用标签

  1. <c:if test=” “ >标签
    其中test是返回boolean的条件
  2. <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的代码量,在开发中,经常使用

-------------本文结束,感谢您的阅读-------------
您的支持将鼓励我继续创作!!