Java之旅(三)--- JSTL和EL表情
先给大家看一段JSP的代码。看看有什么感受?
<%
List<UsEL> usELList = pageModel.getList();
for (ItELator<UsEL> itEL=usELList.itELator(); itEL.hasNext();) {
UsEL usEL = itEL.next();
%>
<tr>
<td class="rd8">
<input type="checkbox" name="selectFlag" class="checkbox1"
value="<%=usEL.getUsELId() %>">
</td>
<td class="rd8">
<%=usEL.getUsELId() %>
</td>
<td class="rd8">
<%=usEL.getUsELName() %>
</td>
<td class="rd8">
<%=usEL.getContactTel()%>
</td>
<td class="rd8">
<%=usEL.getEmail() %>
</td>
<td class="rd8">
<%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(usEL.getCreateDate()) %>
</td>
</tr>
<%
}
%>
这就是掺杂着Java代码的JSP页面,它的不足之处显而易见:
(1)jsp维护难度添加;
(2)出错提示不明白,不easy调试;
(3)分工不明白,美工人员还须要了解Java代码;
上述三点,终于会添加程序的开发成本;
解决上面的问题就出现了JSTL和EL表达式,JSTL使JSP开发人员能够降低对脚本元素的需求,甚至能够不须要它们,降低代码工作量,界面更加简洁,便于维护,后台java人员和前端的美工人员能够分工合作,从而可提高团队开发的效率。
那么到底什么是JSTL呢?什么是EL表达式呢?为什么每次说到JSTL都要说到EL表达式呢?它们两者到底是什么关系呢?又有什么差别呢?且看以下慢慢说来~
一、什么是JSTL?
JSTL是一个不断完好的开放源码的JSP标签库。
JSTL1.0由四个定制标记库(core、format、xml和
sql)和一对通用标记库验证器组成。
(1)core
标记库提供了定制操作。通过限制了作用域的变量管理数据,以及运行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL的标记。
(2)format标记库定义了用来格式化数据(尤其是数字和日期)的操作;
(3)xml库包括一些标记,这些标记用来操作通过XML表示的数据。
(4)而 sql库定义了用来查询关系数据库的操作。
二、什么是EL表达式?
EL表达式主要用于查找作用域中的数据,然后对它们运行简单操作。它不是编程语言,甚至不是脚本编制语言。
通常与
JSTL标记一起作用,能用简单而又方便的符号来表示复杂的行为。
EL表达式的格式:用美元符号($)定界,内容包含在花括号({})中。比如:
${PageScope.UserName}。
再次对此不再赘述。网上有非常多极为具体的使用教程。
三、EL表达式变量的作用域?
EL隐含对象:pageScope,requestScope,sessionScope。applicationScope。
作用域范围依次从小到大。
|
EL名称/ JSTL名称 |
有效范围 |
|
PageScope / Page |
用户请求此页面过程 |
|
RequestScope / Request |
用户的整个请求过程 |
|
SessionScope / Session |
用户的整个会话期 |
|
ApplicationScope / Application |
WEB应用程序运行期间 |
当${username}不写明变量作用域时,默认按上述顺序查找变量,找到就返回,不再继续找。可是假设所有的范围都没找到,则返回null。
假设写明作用域,则搜索步骤例如以下:
|
实例 |
说明 |
|
${ PageScope .UserName} |
取得Page范围内的 UserName |
|
${ RequestScope.UserName} |
取得Request范围内的UserName |
|
${SessionScope.UserName} |
取得Session范围内的UserName |
|
${ ApplicationScope.UserName} |
取得Application范围内的UserName |
四、JSTL和EL表达式有何差别?
(1)功能:EL是用来显示数据的,功能跟<%=表达式%>一样。可是它的功能有限,如:针对于空给出默认的非空字符串输出,迭代循环数组元素等是无法实现的。
而JSTL则弥补了上述问题。它经常使用来实现网页逻辑推断和迭代显示,功能跟<%程序代码%>一样。
所以,普通情况下,我们都会选择JSTL配合EL表达式一起使用,这样基本能够实现JSP中不出现Java代码。
(2)配置:JSTL和EL表达式都是自己定义标签,web server容器会把jsp
解析成servlet。在解析的过程中调用解析器,这个解析器集合就包括EL、JSTL等解析器。
可是EL是servlet标准,容器中都会集成所以我们在使用EL表达式时不须要引用不论什么东西;而JSTL则须要引入它的包方可使用。引入方法例如以下:使用taglib指令---用来指示这个JSP页面所使用的标签库<%@
taglib uri=" " prefix=" " %>
(3)空值处理:当搜索所有范围后仍没有数据时。会返回NULL。可是EL表达式对此做出了优化。页面上显示空白,而不是打印输出NULL。
而JSTL则是优化的更为彻底,当返回NULL时,通过JSTL能够返回“无”。
如今,对JSTL和EL表达式有了基本了解了,事实上说白了就是一句话:两者结合,彻底消除JSP页面的Java代码。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Java之旅(三)--- JSTL和EL表情的更多相关文章
- JAVA学习JSTL与EL
一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...
- 第75节:Java的中的JSP,EL和JSTL
第75节:Java中的JSP,EL和JSTL 哭吧看不完的!!! Cookie和`Session 请求转发和重定向的区别: 地址不一样 请求次数也不一样 数据无法传递 4.跳转范围有限制 效率 请求转 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...
- JAVA之旅(三十四)——自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫
JAVA之旅(三十四)--自定义服务端,URLConnection,正则表达式特点,匹配,切割,替换,获取,网页爬虫 我们接着来说网络编程,TCP 一.自定义服务端 我们直接写一个服务端,让本机去连接 ...
- JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录
JAVA之旅(三十三)--TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录 我们继续网络编程 一.TCP 说完UDP,我们就来说下我们应该重点掌握的TCP了 TCP传输 Soc ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- JAVA之旅(三十一)——JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件
JAVA之旅(三十一)--JAVA的图形化界面,GUI布局,Frame,GUI事件监听机制,Action事件,鼠标事件 有段时间没有更新JAVA了,我们今天来说一下JAVA中的图形化界面,也就是GUI ...
- JAVA之旅(三十)——打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码
JAVA之旅(三十)--打印流PrintWriter,合并流,切割文件并且合并,对象的序列化Serializable,管道流,RandomAccessFile,IO其他类,字符编码 三十篇了,又是一个 ...
随机推荐
- 阐述php(四) 流量控制
一个.选择结构 1. 单路分支 <? php if(条件){ 运行一条语句; } ?> 2. 双路分支 <?php if(条件) 运行一条语句; }else 运行一条语句; } ?& ...
- 修改linux系统时间、rtc时间以及时间同步
修改linux的系统时间用date -s [MMDDhhmm[[CC]YY][.ss]] 但是系统重启就会从新和硬件时钟同步. 要想永久修改系统时间,就需要如下命令:hwclock hwclock - ...
- hdu 4885 (n^2*log(n)推断三点共线建图)+最短路
题意:车从起点出发,每次仅仅能行驶L长度,必需加油到满,每次仅仅能去加油站或目的地方向,路过加油站就必需进去加油,问最小要路过几次加油站. 開始时候直接建图,在范围内就有边1.跑最短了,再读题后发现, ...
- java中处理字符编码(网页与数据库)(转)
首先声明一下,此文章时从网上转载的.如下的某些方法是确实管用,但是从中发现了有一点不足,就是原文笔者没考虑使用不同Web Server时出现的情况,比如文章里我用红色字体画出来的部分代码在Tomcat ...
- Git使用操作指南和GitHub
本文记录Git的使用操作,把散落的记忆整理到一起.并介绍GitHub的使用. 使用Git代表着一种思想和境地,和SVN相比,不是技术上的差异有多么大,而是代表融入了一种新的生态环境.一种开放开源的心态 ...
- 这么多的技术,作为一个freshman,什么研究?
科学技术,从哪里学习? 杨问了我几个最近:"如何学习技术?".说实话,其实,我自己只是一个资深兄弟.对于这个答案.这是更难以在本身回答. 可是.既然比师弟们多吃了几年 ...
- List Set Map用法和区别
List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是.如图: Collection ├List │├LinkedList │├ArrayList │└Vec ...
- c++ primer 函数传值1
不看c++ primer 永远不知道自己基础有多差 函数的參数传值一般有两种方式:值传递,引用传递. 值传递有以下两种形式: void func( int a ) { // } void func1 ...
- 【Linux探索之旅】第二部分第二课:命令行,世界尽在掌握
内容简介 1.第二部分第二课:命令行,世界尽在掌握 2.第二部分第三课预告:文件和目录,组织不会亏待你 命令行,世界尽在掌握 今天的标题是不是有点霸气侧漏呢? 读者:“小编,你为什么每次都要起这么非主 ...
- nyoj 7 街区最短路径问题 【数学】
找出横纵坐标的中位数,怎么找:先对x排序找x的中位数x0,再对y排序找y的中位数y0:最后统计各点到中位数点(x0, y0)的总距离: 街区最短路径问题 时间限制:3000 ms | 内存限制:6 ...