浅谈EL与JSTL
讲道理,自己在博大精深的Java世界里还只是一个很小很小的菜鸟。处于成长与学习之中,但学习一个漫长的过程。尤其对于那些知识点我觉得总结是尤为重要的。反正在我看来这段时间里虽然过了很多知识但却是一脸懵逼,心中 很少有那种系统的知识体系架构。归咎于还是因为自己的对知识的理解领悟总结少了。因此今天开始我希望自己能养成一个时刻总结的好习惯。无论是站在前辈们的总结的基础上还是有自己的新的领悟,我都想写下来。望能勉励自己继续前进。
关于EL与JSTL有过了解,但没认真去想过,也没怎么用过,今天又算是过了一遍,重新认识一下。首先先来谈一下概念吧,EL(Expression Language)是一种表达式语言,主要用于查找作用域中的数据,然后对它们执行一些简单的操作,用于对jsp标签的属性赋值。它不是编程语言。JSTL( JSP Standard Tag Library)是JSP标准 标签库,由apache实现,因为在jsp中出现大量Java代码不利于维护,sun公司就制定了一个类似于html标签一下的jsp标签技术,也有开始于结束标记。我们可以引用标签来调用标签库中的Java代码片段来实现一下操作。使用jsp标准标签库有利于程序的可读性,提高了代码的复用性与编程效率。其目的就是为了jsp中不出现Java代码片段。这两者关系,JSTL通常会结合EL一起使用。也有理解为EL是JSTL的一部分。EL也可以单独使用。
EL表达式的基本格式由$与{}组成,例如:${user.name} 即其意思就是查询得到user对象中的name属性的值。
如果仅使用EL表达式的话则不需要导包,但需要在作用域中去取值。该作用域可以是 其范围由小到大依次是 page(页面上下文对象) request(一次请求对象) session(会话期间对象) application(程序应用对象) 。访问规则: 当容器解析到当前EL表达式时,会依次从pageScope,requestScope,sessionScope以及applicationScope当中取值,查找绑定名为user的对象,调用其getName方法。el表达式如果获取到null值,会 自动把null值转换为空字符串输出。
当没有指定作用域,则默认取值依次从小到大来取
例1:User user=new User(); user.setName("zs"); request.setAttribute("user",user) - -->获取request绑定的name值 ${user.name}等价于User u=(User)request.getAttribute("user");String name=u.name; 例2:还可以以${user["name"]}来表达;
可以进行一些简单的运算
1 算数运行 + - * / % 注:+只能做算数运算,不能做求和运算
算术运算:${1+"1" } 其结果为2 它会自动将“1”转化为数字进行运算
2 关系运算 == >= <= !=
关系运算:${5=="5"}其结果为true
3 逻辑运算 & | ! && ||
逻辑运算:${a>b&&4<5}其结果为false
4 (empty)空运算:判断某个集合、字符串、对象是否为空。
以下四种情况结果为true:空字符串,空的集合,值为null,找不到对应的值
<%
List list=new ArrayList();
list.add(1);
request.setAttribute("list", list);
request.setAttribute("a", "");
request.setAttribute("b", null);
%>
${empty list } 其结果为false
${empty a } 其结果为 true
${empty b } 其结果为 true
${empty user}其结果为false
JSTL:(JSP Standard Tag Library) JSP标准标签库
JSTL的由来:
JSP标签是Sun公司定义的一套标准,由Apache组织基于这套标准开发的一套标签
库后又转给Sun公司,被称为JSTL,成为了JavaEE5.0的核心
如何使用jstl ?
第一步:引入jstl.jar以及 standard.jar两个架包注:在javaEE5.0以上的版本不需要引入这两个架包,因为在javaEE5.0以上的版本已经包含了这两个架包。
将jstl.jar和standard.jar两个包考到现有工程 WebRoot / WEB-INF / lib 目录下
第二步: 使用taglib指令导入要使用的JSP标签 <%@taglib uri="" prefix="" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
uri:JSP标签的命名空间
prefix:命名空间的前缀(简称)
第三步: 使用常见的标签
1 if标签
< c:if test= "" var = "" scope= "" >
标签体的内容
</c:if >
注: test中传入的只能是boolean值,如果值为false则不执行标签体,为true
则执行标签体。
var :代表当前test表达式的结果。
scope:指test表达式执行的结果绑定范围
2 choose标签
<c : choose >
<c:when test =""></c : when>
...
<c : otherwise></c : otherwise>
</c : choose >
注:when可以出现一次以上,当test属性为true时,会执行标签体的内容
otherwise只能出现0或1次。
3 foreach标签
<c:foreach items="" var="" varStatus="s">
</c:foreach>
items属性:指定要遍历的集合,—般使用EL表达式来赋值
var属性:指定一个绑定名称,容器每次从集合中取一个对象,
然后绑定到pageContext对象上,作用域只能是在当前页面。
varStatus :指定一个绑定名称。绑定值是一个由容器创建的对象
,该对象封装了当前迭代的状态 。对于迭代状态 有默认的两个方法:
getIndex: 下标从0开始 ,返回当前正则被迭代对象的下标值
getCount: 下标从1开始,统计个数。
如何定义自定义标签?
1 新建一个java类,把需要引入的java代码搬家 ,同时该类需要继承
SimpleTagSupport(简单标签技术支持类)
2 重写doTag方法。
3 新建一个XX.tld的文件,注意该文件需要放置在web-inf文件夹下。
文件里面的结构可以参照 standard.jar包中的c.tld文件格式。
<body-content>JSP</body-content>
只有复杂标签技术才有,支持在标签体中可以出现java代码片段。
<body-content>empty</body-content>
简单标签技术,不支持标签体出现任何内容。
<body-content>scriptless</body-content>
标签中可以出现内容,但是内容不允许是java代码。
<say:print><% %></say:print>错误
浅谈EL与JSTL的更多相关文章
- 浅谈EL
一.了解EL 1.EL是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点.在使用 EL 从 scope 中得到参数时可以自动转换类型, ...
- 浅谈Vue.js
作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈padding
浅谈padding padding是CSS盒子模型的一部分,代表盒子模型的内边距. 用法 padding属性有四个值,分别代表上.右.下.左的内边距. .box { padding: 10px 5px ...
- 前端性能优化--为什么DOM操作慢? 浅谈DOM的操作以及性能优化问题-重绘重排 为什么要减少DOM操作 为什么要减少操作DOM
前端性能优化--为什么DOM操作慢? 作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩( ...
- 浅谈Vue下的components模板
浅谈Vue下的components模板在我们越来越深入Vue时,我们会发现我们对HTML代码的工程量会越来越少,今天我们来谈谈Vue下的 components模板的 初步使用方法与 应用 我们先来简单 ...
- 阿里P7浅谈SpringMVC
一.前言 既然是浅谈 SpringMVC,那么我们就先从基础说起,本章节主要讲解以下内容: 1.三层结构介绍 2.MVC 设计模式介绍 3.SpringMVC 介绍 4.入门程序的实现 注:介绍方面的 ...
- 浅谈Vue中计算属性(computed)和方法(methods)的差别
浅谈Vue中计算属性(computed)和方法(methods)的差别 源码地址 methods方法和computed计算属性,两种方式的最终结果确实是完全相同 计算属性是基于它们的响应式依赖进行缓存 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
随机推荐
- 我的github教程
这篇文章记录个人常用的一些命令,和记不住的一些命令. 安装 在 Windows 上安装 Git ,有个叫做 msysGit 的项目提供了安装包: http://msysgit.github.io/ 完 ...
- EF code first Acceleration - CodeFirst 加速
EntityFramework Code First 用起来很方便,可是有时感觉卡,就是有点慢.可以采用以下措施来加速一下,原来取出1万条记录并显示在Winform窗体上第一次需要1.9秒的时间,加速 ...
- jQuery——自定义动画
动画方法:animate(json,1000, function (){}) 参数说明:json代表属性设置,1000是动画时间,最后一个是回调函数,其中动画时间可选 属性支持:http://www. ...
- css学习笔记---盒模型,布局
1.外边距叠加 当一个元素出现在另一个元素上面时第一个元素的底边距与第二个元素的上边距发生叠加,元素被包含时也有可能会发生叠加(如果没有内边距和边框),如果一个空元素没有内边距和边框本身也会发生上下边 ...
- vim之补全1(完全个人定制版)
关于vim的补全最初的感觉是蛋疼, 真正的蛋疼! 由于在接触linux之前曾经在windows下面学过一段时间软件开发, 那时使用的是vs2010, 现在看来虽然vs启动相当的慢, 编辑器的定制和配置 ...
- MHA的MySQL高可用方案实战
功能: 1)master的故障切换(keepalived VIP的飘移) 2)主从复制角色的提升和重新转向 其中master 对外提供写服务,备选master2(实际的slave提供读服务,slave ...
- 爬虫系列(三) urllib的基本使用
一.urllib 简介 urllib 是 Python3 中自带的 HTTP 请求库,无需复杂的安装过程即可正常使用,十分适合爬虫入门 urllib 中包含四个模块,分别是 request:请求处理模 ...
- 小白两篇博客熟练操作MySQL 之 第二篇
小白两篇博客熟练操作MySQL 之 第二篇 一. 视图 视图是一个虚拟表,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集, 并可以将其当做表来使用. s ...
- Git下的标签
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来.所以,标签也是版本库的一个快照 ...
- android 数据存储之SQLite
使用嵌入式关系型SQLite数据库存储数据 除了可以使用文件或SharedPreferences存储数据,还可以选择使用SQLite数据库存储数据. 在Android平台上,集成了一个嵌入式关系型数据 ...