Java Web中EL与JSTL重点总结

EL表达式:

为什么要使用EL表达式?

JSP脚本有一些不足:

  1. 代码结构混乱
  2. 脚本与HTML混合,容易出错
  3. 代码不易于维护

EL的特点:

  1. 自动转换类型:EL得到某个数据时可以自动转换类型
  2. 使用简单

使用EL表达式来优化程序代码,增加程序可读性:

示例:

<table>

<c:forEach var="news" items="${list}">

<tr><td><c:out value="${news.title}" /></td></tr>

</c:forEach>

</table>

EL语法:

EL表达式(Expression Language):

${EL表达式}

例如:${username}

1. 通过变量名取值

${变量名}

// 在Servlet或JSP中保存数据

request.setAttribute("username", "LiYang");

// 在JSP中访问数据

姓名: ${username}

按照page ---> request ---> session ---> application的作用域顺序依次查找,找到即返回,最终找不到返回null

指定作用域

属性范围

EL中的名称

page

pageScope,例如${pageScope.username}表示在page作用域查找变量username,找不到返回null

request

requestScope

session

sessionScope

application

applicationScope

 

2. 获取对象的属性值

<%= ( (User) request.getAttribute("user") ) .getName()  %>

a. 点操作符

${user.name}

b. [ ]操作符

${user["name"]}

3. 获取集合元素:List

// 在Servlet或JSP中保存数据

List names = new ArrayList();

names.add(0, "LiYang");

names.add(1,"WangHua");

request.setAttribute("names",names);

// 在JSP中访问数据

姓名:${ names[0] }<br/>

姓名:${ names[1] }<br/>

注:使用[ ]指定元素下标

4. 获取集合元素:Map

// 在Servlet或JSP中保存数据

Map names = new HashMap();

names.put("one", "LiYang");

names.put("two", "WangHua");

request.setAttribute("names", names);

// 在JSP中访问数据

姓名:${ names.one }<br/>

姓名:${ names["two"] }<br/>

5. 执行表达式

关系操作符:

关系操作符

说明

示例

结果

==(或eq)

等于

${23==5}或${23 eq 5}

${"a" =="a"}或${"a" eq "a"}

false

true

!=(或ne)

不等于

${23!=5}或${23 ne 5}

true

<(或lt)

小于

${23<5}或${23 lt 5}

false

>(或gt)

大于

${23>5}或${23 gt 5}

true

<=(或le)

小于等于

${23<=5}或${23 le 5}

false

>=(或ge)

大于等于

${23>=5}或${23 ge 5}

ture

逻辑操作符:

逻辑操作符

说明

示例

结果

&&(或and)

逻辑与   

如果A为true,B为false,则${ A && B } (或${ A and B } )

false

||(或or)

逻辑或

如果A为true,B为false,则${ A || B} (或 ${ A or B } )

true

! (或not)

逻辑非

如果A为true,则${ ! A } ( 或${ not A } )

false

 

empty操作符:

若变量 a为null,或长度为零的String,或size为零的集合则${ empty a }返回的结果为true

${ not empty a }或${ ! empty a }返回的结果为false

 

EL隐式对象:

对象名称

说明

pageScope

与page作用域相关联的Map对象

requestScope

与request作用域相关联的Map对象

sessionScope

与session作用域相关联的Map对象

applicationScope

与application作用域相关联的Map对象

param

按照请求参数名称返回单一值的Map对象

paramValues

按照请求参数名称返回String数组的Map对象

pageContext

提供对页面信息和JSP内置对象的访问

1. Request.setAttribute("name", "admin") ---> 用request.getAttribute("name")取出来

并用${ requestScope .name } 取出来

2. 表单 ---> 提交:用request.getParameter("name")取出来

并用${param.name}取出来

EL操作符:

1. 操作符"."

获取对象的属性,例如: ${news.title}

2. 操作符“[ ]”

获取对象的属性,例如:${newst["title"]}

获取集合中的对象,例如:newslist[0]

EL严格区分大小写,初学者严格按规范书写,有利于养成好的编码习惯

EL功能:

1. 取得JavaBean对象的属性

${news.title}

2. 取得数组、List、Map类型对象的元素

${list[0]}

3. 使用各类运算符对原始数据进行简单处理

${totalRecordCount/pageSize}

4. 屏蔽一些常见的异常

${username}

5. 能实现简单的自动类型转换

${news)相当于(News)request.getAttribute("news")

EL访问作用域:

request. setAttribute(" news ,news);

两种方式取数据:

Java小脚本:request.getAttribute("news");

使用EL表达式:${ news }或者${ requestScope.news}

当直接写${ news }运行方式是根据大小关系在下方的四个作用域中从小到大依次来取属性,直到找到为止

作用域

Java代码取值

EL取值

请求作用域

request.getAttribute("news");

${ requestScope.news }

会话作用域

session.getAttribute("username");

${ sessionScope.username }

程序作用域

application.getAttribute("count");

${applicationScope.count}

页面作用域

pageContext.getAttribute("userNum");

${pageScope. userNum}

JSTL介绍:

JSTL(JavaServerPages Standard Tag Library):

  1. JSP标准标签库
  2. 实现JSP页面中的逻辑控制

JSTL使用步骤:

  1. 下载jstl. jar和standard. jar:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
  2. 将这两个包复制到WEB-INF\lib目录

在JSP页面中添加指令

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

JSTL标签:

标签库名称

资源标示符(uri)

<c:out />

输出文本内容到out对象,常用于显示特殊字符,显示默认值

<c:set/>

在作用域中设置变量或对象属性的值

<c:remove/>

在作用域中移除变量的值

<c:if/>

实现条件判断结构

<c:forEach/>

实现循环结构

<c:url/>

构造url地址

<c:param/>

在url后附加参数

<c:import/>

在页面中嵌入另一个资源内容

<fmt:formatDate/>

格式化时间

<fmt:formatNumber/>

格式化数字

 

1. 通用标签

   a. set:设置指定范围内的变量值

将value值存储到范围为scope的变量variable中:

<c:set  var="variable"  value="value"  scope="scope" />

将value值设置到对象的属性中:

<c:set  target="target"  property="property"  value="value" />

示例:

在Servlet或JSP中设置JavaBean:

User  user = new  User();

request.setAttribute("user",  user);

在JSP中修改JavaBean的属性值:

<c:set target="${user}" property="name" value="defaultName" />

 

 b. out:计算表达式并将结果输出显示

不指定默认值:

<c:out  value="value" />

指定默认值:

<c:out  value="value"  default="default" />

转义特殊字符:

<p>${ "<a href='http://www.baidu.com'>百度</a>" }</p>

<p>

<c:out  escapeXml="false" value="<a href='http://www.baidu.com'>百度</a>" />

<!—escapeXml属性值为false  输出超链接-->

</p>

<c:out value="<a href='http://www.baidu.com'>百度</a>" />

<!—escapeXml属性值为true  输出标签内容-->

 

 

  c. remove:删除指定范围内的变量

<c:remove  var="variable"  scope="scope" />

2. 条件标签

  a. if:实现Java语言中if语句的功能

  b. choose:实现if - else if - else语句的功能

<c:choose>

  <c:when test="condition1">内容1</c:when>

  <c:when test="condition2">内容2</c:when>

  ……

  <c:otherwise>内容n</c:otherwise>

</c:choose >

 

3. 迭代标签:

  a. forEach:实现对集合对象的遍历

示例:

  b. 通过迭代标签遍历Map

// 在Servlet或JSP中准备数据

Map<String, String> map = new HashMap<String, String>();

map.put("tom",  "美国");

map.put("lily",  "英国");

map.put("jack", "中国");

request.setAttribute("map",  map);

// 在JSP中展示数据

<c:forEach  items="${requestScope.map}" var="entry">

     ${ entry.key }

     ${ entry.value }<p>

</c:forEach>

 

  c. forEach:指定迭代的次数

<c:forEach  begin="start"  end="end"  step= "stepSize">

      …循环体代码…

</c:forEach>

 

  d. 格式化时间

<fmt:formatDate value="${news.createdate}" pattern="yyyy-MM-dd"/>

和simpleDataFormate一样格式也一样,使用的各种表示符号也一样

 

EL表达式与JSTL标签结合使用,可以减少JSP中嵌入的Java代码,有利于程序的维护和扩展

总结:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值