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)出错提示不明确,不容易调试;

(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代码!

时间: 2024-08-04 22:21:48

Java之旅(三)--- JSTL和EL表达式的相关文章

【转】JSP中的JSTL与EL表达式用法及区别

对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程语言,甚至不是脚本编制语言.通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为. EL基本格式 EL表达式的格式:用美元符号($)定

jstl,el表达式

在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22;%> <%if(a>20){%> hello world <%}else{%> world hello <%}%> 这是很烦很痛苦的的 一件事,那么怎么解决这个问题呢,这里用到了jstl技术: 再写jstl技术之前,我们先简单了解一下el表达式,el表达式要和j

jsp中的JSTL与EL表达式用法

JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. JSTL的核心标签库主要包括:表达式操作.流程控制.迭代操作和URL操作.以下是JSTL常用标签的用法总结: 一.表达式操作 1.<c:out> 作用:用于显示数据的内容.语法1:没有本体内容 <c:out value="value" [escapeXml="{

Jsp2.0自定义标签(第三天)——EL表达式的使用

1.提出问题: 我们经常会看到这样的jsp页面代码: 浏览器显示: 为什么会在页面输出:Hello World  ,${per}究竟是如何找到“Hello World”的呢? 2.分析问题: 要想解决上述疑问,首先要试试自己能不能自定义出上面的标签. 比如我想定义<myout:demo print="${per}"/>拥有打印出EL表达式值的功能. 同前面几章一样,自定义标签我分为几个部分: 第一部分:定义标签的地方(*.tld). <?xml version=&qu

EL表达式(三)自定义 EL 表达式

自定义EL函数(静态方法): 编写步骤: 1.编写一个Java类,提供一个静态方法 import java.util.List; public class GetLength { public static Integer getLength(List list){ return list.size(); } } 2.在WEB-INF目录下建立一个拓展名为tld(描述文件)的xml文件 <?xml version="1.0" encoding="UTF-8"

jstl和EL表达式混合使用

EL表达式里判断字符串,或者... ${(wrt.acceptName eq '刘立荣') || (wrt.acceptName eq '卢伟冰') } <tr> <td height="24" width="70" align="left" >董事长:</td> <c:forEach items="${wfRdTasks }" var="wrt" varStatu

在JSP中如何使用JSTL(EL表达式)格式化日期

第1步:引入指令 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt " %> 第2步:使用 <1>日期 <fmt:formatDate value="${ user.lastConnectTime }"  type="both" /> 2015-12-11 15:43:59 <fmt:formatDate val

JSTL中EL表达式无法直接取size的处理

jsp中使用${list.size }会编译成list.getSize()方法,并不能获取list的长度,因为程序回去找List对象中的getSize()方法,所以只能想别的办法, 一种方法是在后台程序Action中声明一个变量存储list的长度,并对这个变量设置get set方法,但是这个方法有点麻烦,还多了一个变量,另外一种方法可以使用jstl中的functions函数实现,具体步骤如下: 1.引入jstl和jstl函数包 <%@ taglib uri="http://java.sun

JSTL标签+EL表达式遍历List内容

经常用到以下代码遍历呈现后台返回来的List,特此Mark一下: JSP页面头部引用JSTL标签: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> JSP内容: <c:if tes