本篇主要是自己对 JavaWeb中 EL、OGNL、Taglib 个人理解。

因为以上内容都是在 JSP 的基础下产生的概念, 首先得说说我眼中的 JSP。

她自由的、奔放的,就像辽阔的大海,跨越任何服务器屏障、运行在各种平台。

她能容纳下各种形式的代码和标签库,Java 原生代码、JSTL 表达式、Struts Taglib 、JSF Taglib 、Webwork Taglib ....任何人自定义的各种标签。

Web 视图层的基本思想已被 JSP 阐述的淋漓尽致,但 IT 领域人们不喜欢阳关积极的老人。

眼下琳琅满目的模版引擎以其灵活的表现形式和简洁的书写方式大有取缔 JSP 的势头。

1. Taglib(tag library) 标签库

JSP 中原生的 java 代码,总是给人一种杂乱的感觉,与整个 JSP 页面不搭调。

而且增加维护难度和成本、前端 JSP 美工也必须是程序员、增加程序开发成本。

Taglib 是在这种前提下孕育而生,在很久以前已经被很多 Javaweb mvc 框架采用和扩展,发扬广大。

小巧活泼的 Taglib 将杂乱的原生 java 代码移出了 JSP 的世界,还原了 JSP 原本整洁干净的样子。

未引入 taglib 实例代码:

<% @page import="cn.javass.user.UserModel" %>
<% UserModel user = (UserModel)request.getAttribute("user"); %>
<table border="1">
<tr>
<td colspan="2">用户信息</td>
</tr>
<tr>
<td>姓名</td>
<td><%=user.getName()%></td>
</tr>
<tr>
<td>年龄</td>
<td><%=user.getAge()%></td>
</tr>
</table>

引入 struts <c:/>标签和 EL 表达式 实例代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table border="1">
<tr>
<td colspan="2">用户信息</td>
</tr>
<tr>
<td>姓名</td>
<td><c:out value="${user.name}"/></td>
</tr>
<tr>
<td>年龄</td>
<td><c:out value="${user.age}"/></td>
</tr>
</table>

可能是业务逻辑不够复杂,所以你可能没有满脸络腮胡子的大叔,变为阳光活泼的小鲜肉的感觉,没关系,听我慢慢道来。

下面是比较主流的一些 TagLib,和具体的参考资料:

由 apache 开发维护的 JSTL(JSP Standard Tag Library),具体参考资料: http://www.runoob.com/jsp/jsp-jstl.html

Struts2 Taglib : http://www.blogjava.net/hwpok/archive/2008/10/12/233853.html

webwork Tablib:http://wenku.baidu.com/link?url=EjR9GEfZUMw9nW3Asq6OUSTmXAuKf018QDV7

当然你也可以自定义扩展 Taglib:http://www.cnblogs.com/edwardlauxh/category/277227.html

2. EL(Expression Language) 表达式

EL 设计灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。

EL 依次从Web Page、Request、Session、Application 范围查找值,同样也能从定义的隐式对象 pageScope、requestScope、sessionScope和applicationScope 中获取数据。

EL 既不是编程语言、也不是脚本语言、最佳搭档为 JSTL,能使用简单方便的符号来表达和操作复杂的行为。

不引入 EL 和 JSTL,Java 原生代码 HTML 中渲染数据代码示例:

<%
for (User user : UserList) {
%>
<h5>遍历的当前用户名称:<%=user.getName()%></h5>
<h5>遍历的当前用户组织机构:<%=user.getOrg()%></h5>
<%
}
%>

引入 EL 和 JSTL代码实例:

<c:forEach var="user" items="${userList}" >
<h5>遍历的当前用户名称:<c:out value="${user.name}"/></h5>
<h5>遍历的当前用户组织机构:<c:out value="${user.org}"/></h5>
</c:forEach>

${userList} 为 EL 取值,<c:forEach> <c:out> 为 JSTL 循环和输出标签,引入 EL 和 JSTL 后的代码是不是简洁、易懂?

至于 EL 和 JSTL 的使用方式和书写规则,参考资料:

EL :https://my.oschina.net/passer007/blog/610380

JSTL: http://www.runoob.com/jsp/jsp-jstl.html

这些东西罗列出来没意义,遇到具体项目和具体业务规则时,进行搜索吧。

3. OGNL(Object-Graph Navigation Language) 对象图航语言

OGNL 是 EL 的升级版,最佳搭档一般为 struts <s:/> 和 webwork <ww:/> 等框架标签库配合使用。

OGNL 提供了很多高级而必须的特性,例如强大的类型转换功能,静态或实例方法的执行,跨集合投影,以及动态 lambda 表达式定义等。

OGNL 的计算围绕着 OGNL 上下文进行,可以在属性驱动的框架如 struts、webwork..值栈中增、删、改、查数据。

引入 OGNL 和 struts <s:/> 标签库页面渲染代码实例:

<s:iterator var="user" value="${userList}" id="user" status="status">
<h5>当前对象索引:<s:property value="#status.index"/></h5>
<h5>遍历的当前用户名称:<s:property value="user.name"/></h5>
<h5>遍历的当前用户组织机构:<s:property value="user.org"/></h5>
</s:iterator> 

#status.index 为 OGNL 取值,<s:property/> <s:iterator/> struts 标签库输出和遍历便签。

上述例子的举基本为简单常规的样例,但实际业务逻辑总是伴随着变化和复杂规则,OGNl 基本都能满足你的要求。

OGNL 具体的使用方式和书写规则也不进行罗列了,比较好的参考资料:

Struts2中的OGNL详解: http://blog.csdn.net/tjcyjd/article/details/6850203

Webwork 学习之路【02】前端OGNL试练 :http://www.cnblogs.com/java-class/p/5016578.html

杂谈 Taglib、EL、OGNL的更多相关文章

  1. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  2. 1.6(学习笔记)EL表达式

    1.表达式输出属性 先来看一个简单的表达式小例子 el.jsp <%@ page language="java" contentType="text/html; c ...

  3. JAVA学习笔记及知识积累

    为什么说Java具有跨平台特性? 我们知道计算机只认识1,0两种电平的信号,所有信息或者计算指令最终都编码成16进制的机器码,这些机器码作为程序保存于计算机的内存中,由CPU去单个取指令执行直到程序执 ...

  4. Struts(二十三):使用声名式验证

    Struts2工程中的验证分为两种: 1.基于XWork Validation Framework的声明式验证:Struts2提供了一些基于XWork Validation Framework的内建验 ...

  5. Java EE - JSP 小结

    Table of Contents 前言 JSP 与 Servlet JSP 初始化参数 脚本元素 page 指令 禁用脚本元素 EL 表达式 EL 函数 taglib 指令 标记 TLD 文件的位置 ...

  6. Struts2学习小结

    1 基础 使用:导入 jar 包,配置 web.xml,并引入 struts.xml 文件 DMI:动态方法调用,调用时使用!分隔 action 名与方法名,如 index ! add.action, ...

  7. Taglib、EL、OGNL

    Taglib.EL.OGNL 阅读目录 1. Taglib(tag library) 标签库 2. EL(Expression Language) 表达式 3. OGNL(Object-Graph N ...

  8. JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总

    一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出.       1,JSTL标签总结: a).JSTL标签有什么用?          JSTL是由JCP(Java Commu ...

  9. Struts标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系和各自作用

    我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进行整合区分,加深了解, 一 介绍 1.Struts2的作用   Struts2标签库提供了主题.模板支持,极大地简化了视图页面的 ...

随机推荐

  1. 深入理解和应用Float属性

    一.Float的特性 1. 应用于文字围绕图片 2. 创建一个块级框 3. 多列浮动布局 4. 浮动元素的宽度.高度自适应,但可以设置其值. 二.核心解决的问题 文字围绕图片:img标签与多个文本标签 ...

  2. 标准BST二叉搜索树写法

    本人最近被各种数据结构的实验折磨的不要不要的,特别是代码部分,对数据结构有严格的要求,比如写个BST要分成两个类,一个节点类,要给树类,关键是所以操作都要用函数完成,也就是在树类中不能直接操作节点,需 ...

  3. UITableViewHeaderFooterView的封装

    UITableViewHeaderFooterView的封装 特点 1. 封装的 UITableViewHeaderFooterView 能够让用户更好的自定义自己的 headerView; 2. 封 ...

  4. iOS 根据银行卡号判断银行名称

    如何根据银行卡号判断银行名称? + (NSString *)getBankName:(NSString*) cardId{ //"发卡行.卡种名称", NSArray* bankN ...

  5. OS的沙盒机制 --基础知识

    /* iOS的沙盒机制,应用只能访问自己应用目录下的文件. iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容. iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙 ...

  6. 处理Xcode 警告

    除了代码中我们手动加入的 #Waring  标示 所产生的警告,我们都应该重视.下面是一些警告的处理. 1,方法过期,或 使用新的api  替换方案 multipartFormRequestWithM ...

  7. Android客户端与Eclipse服务器端的Socket通信

    Server端代码 用来实现客户端socket的监听 package MyServer; import java.io.BufferedReader; import java.io.BufferedW ...

  8. linux内存使用计算方式

    Linux开机后,使用top命令查看,4G物理内存发现已使用的多大3.2G,占用率高达80%以上: Mem: 3889836k total, 3341868k used, 547968k free, ...

  9. Storm基础

    Storm基本概念 Storm是一个开源的实时计算系统,它提供了一系列的基本元素用于进行计算:Topology.Stream.Spout.Bolt等等. 在Storm中,一个实时应用的计算任务被打包作 ...

  10. 用户故事驱动的敏捷开发 – 2. 创建backlog

    本系列的第一篇[用户故事驱动的敏捷开发 – 1. 规划篇]跟大家分享了如何使用用户故事来帮助团队创建需求的过程,在这一篇中,我们来看看如何使用这些用户故事和功能点形成产品backlog.产品backl ...