el,jstl,ognl概念上的区分
2015-09-22 17:29
691 查看
到目前为止,我对jsp页面中el,jstl,ognl得使用之前一直处于迷茫的状态,$,#,%这三大符号把我搞晕了。看来有必要好好掌握理解一下。先从宏观上把握,这几个概念和关系,知道什么时候适合使用什么,然后从细节上掌握如何在项目中快速准确的使用。
1.背景介绍
我们都知道HTML描述的是一种静态页面。静态页面不能满足我们的需求,比如:
![](http://img.blog.csdn.net/20150922172558578?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
我用红色框框出了登录的用户名。如果是静态页面,这个位置显示的名字是一定的,现在我们要做到它显示得是动态的,不同用户登录显示得是不同用户的名称。这时我们能体会到动态页面的必要性了吧。当然我只是举了一个很简单的例子。
我们来看看代码中会如何做到动态的?
在HTML中加入Java代码可以让页面动起来了。但是这样会有一些问题存在,比如这样分工不够明确,页面是用来显示的,可现在需要插入大段JAVA代码,这也是最初我们使用model1模式的做法。耦合性大,不够灵活,项目变大了以后会有很多麻烦,所以逐渐发展到model2模式,也就是MVC模式---把业务逻辑写在Controller层,页面显示写在View层。采用MVC模式后,我们尽量做到VC的分离,但是即使这样,我们还是需要动态往HTML中绑定值,尤其遇到页面复杂的情况,这时el和jstl就应运而生了。el可以解决<%=user.getUserName()
%>这类问题。而jstl可以解决<%@ page import="java.util.*" %> ,<% %>这类问题。
2 EL是什么
EL是(Expression Language)的简称,是一种表示式语言。它提供了在 JSP 中简化表达式的方法。
a、语法结构:${expression}
b、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:${ user. My-Name}应当改为${user["My-Name"]}如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${sessionScope.user[data]}中data 是一个变量
c、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
3 JSTL是什么?
JSTL ( JSP Standard Tag Library ),也就是JSP标准标签库。其实到现在我才觉得自己理解了。要想理解JSTL,要先理解什么是标签库。当然要写标签库也可以写一篇博客。我之前写过一篇自定义标签库(自定义jsp标签),可参考。简单讲,当页面显示后台数据比较复杂时,比如,要循环显示后台list中的值绑定到前台table中。那我们就封装一个通用的标签,这个标签的命名可以随意,但是要参照<HTML>里面的格式,<>
,那我们可以命名为<s:iterator> <c:forEach> 等等,< c:forEach>这个c也是我们自主加入的前缀,用来做区分。只有这些肯定玩不转的。没有后台代码支持,怎么可以?我们必须封装JAVA代码,把你的逻辑写入,或许也可以加入一些HTML元素。把需要的变量设置到tld文件中做个整合。然后在前台引入tld文件。如<%@ taglib uri="/WEB-INF/tld/aofsoft.tld" prefix="c"%>. 就可以使用了。其实我描述得这些就是自定义标签的一个过程。不理解得要参照我前面的一篇博客。
在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现。鉴于此,出现了 JSTL 。大家应该明白了JSTL是个什么了吧。有了它,我们就不用在JSP页面中写入JAVA代码了。我们可以把它封装成标签,封装好的话,还可以复用。
知识都是相通的,我们还可以联系到struts2的那一套标签,<s:textfield>,<s:property>,<s:if><s:elseif><s:else>,<s:iterator>,<s:select>等等。这是不是也没有什么新鲜的。我们知道原理后,掌握它如何使用即可。
我们可以将<%=user.getUserName() %>改为el表达式为${user.userName} 可以。这只是简单介绍。
4. OGNL是什么?
OGNL是Struts 2默认的表达式语言。是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象。它可以用于JSP的标签库中,以便能够方便的访问各种对象的属性;它用于界面将参数传递到Action(并进行类型转换)中;它还可以用于struts2的配置文件中。
说到这,你可以联想到可以跟OGNL对比的是什么?EL。EL也是表达式语言。可以说EL是基础。OGNL是Struts 2默认的表达式语言,但是这并不能说明struts2不能使用其他表达式语言。其实往往我们都是混着用的。什么好用用什么。
那么OGNL怎么结合sturts2来使用呢?我们主要在下一篇博客中讲解。
1.背景介绍
我们都知道HTML描述的是一种静态页面。静态页面不能满足我们的需求,比如:
我用红色框框出了登录的用户名。如果是静态页面,这个位置显示的名字是一定的,现在我们要做到它显示得是动态的,不同用户登录显示得是不同用户的名称。这时我们能体会到动态页面的必要性了吧。当然我只是举了一个很简单的例子。
我们来看看代码中会如何做到动态的?
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <%@ page import="java.util.*" %> <%@ page import="java.text.*" %> <%@ page import="com.bjpowernode.drp.sysmgr.domain.*" %> <%@ page import="com.bjpowernode.drp.sysmgr.manager.*" %> <%@ page import="com.bjpowernode.drp.util.*" %> <% String command = request.getParameter("command"); if ("del".equals(command)) { String[] userIds = request.getParameterValues("selectFlag"); //for (int i=0; i<userIds.length; i++) { //out.println(userIds[i]); // UserManager.getInstance().delUser(userIds[i]); //} UserManager.getInstance().delUser(userIds); } int pageNo = 1; int pageSize = 4; String pageNoString = request.getParameter("pageNo"); if (pageNoString != null) { pageNo = Integer.parseInt(pageNoString); } PageModel<User> pageModel = UserManager.getInstance().findUserList(pageNo, pageSize); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GB18030"> <title>用户维护</title> <link rel="stylesheet" href="../style/drp.css"> </head> <body class="body1"> <form name="userform" id="userform"> <table width="95%" border="1" cellspacing="0" cellpadding="0" align="center" class="table1"> <tr> <td width="55" class="rd6"> <input type="checkbox" name="ifAll" onClick="checkAll(this)"> </td> <td width="119" class="rd6"> 用户代码 </td> <td width="152" class="rd6"> 用户名称 </td> <td width="166" class="rd6"> 联系电话 </td> <td width="150" class="rd6"> email </td> <td width="153" class="rd6"> 创建日期 </td> </tr> <% List<User> userList = pageModel.getList(); for (Iterator<User> iter=userList.iterator(); iter.hasNext();) { User user = iter.next(); %> <tr> <td class="rd8"> <input type="checkbox" name="selectFlag" class="checkbox1" value="<%=user.getUserId() %>"> </td> <td class="rd8"> <%=user.getUserId() %> </td> <td class="rd8"> <%=user.getUserName() %> </td> <td class="rd8"> <%=user.getContactTel()%> </td> <td class="rd8"> <%=user.getEmail() %> </td> <td class="rd8"> <%=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(user.getCreateDate()) %> </td> </tr> <% } %> </table> </form> </body> </html>我们可以分析一下这个jsp页面。在开头引入了java类<%@ page import="java.util.*" %> 在<% %>中可加入了大段的java代码,还有<%=user.getUserName() %> 获取后台的变量值。
在HTML中加入Java代码可以让页面动起来了。但是这样会有一些问题存在,比如这样分工不够明确,页面是用来显示的,可现在需要插入大段JAVA代码,这也是最初我们使用model1模式的做法。耦合性大,不够灵活,项目变大了以后会有很多麻烦,所以逐渐发展到model2模式,也就是MVC模式---把业务逻辑写在Controller层,页面显示写在View层。采用MVC模式后,我们尽量做到VC的分离,但是即使这样,我们还是需要动态往HTML中绑定值,尤其遇到页面复杂的情况,这时el和jstl就应运而生了。el可以解决<%=user.getUserName()
%>这类问题。而jstl可以解决<%@ page import="java.util.*" %> ,<% %>这类问题。
2 EL是什么
EL是(Expression Language)的简称,是一种表示式语言。它提供了在 JSP 中简化表达式的方法。
a、语法结构:${expression}
b、[ ]与.运算符
EL 提供“.“和“[ ]“两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:${ user. My-Name}应当改为${user["My-Name"]}如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${sessionScope.user[data]}中data 是一个变量
c、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
3 JSTL是什么?
JSTL ( JSP Standard Tag Library ),也就是JSP标准标签库。其实到现在我才觉得自己理解了。要想理解JSTL,要先理解什么是标签库。当然要写标签库也可以写一篇博客。我之前写过一篇自定义标签库(自定义jsp标签),可参考。简单讲,当页面显示后台数据比较复杂时,比如,要循环显示后台list中的值绑定到前台table中。那我们就封装一个通用的标签,这个标签的命名可以随意,但是要参照<HTML>里面的格式,<>
,那我们可以命名为<s:iterator> <c:forEach> 等等,< c:forEach>这个c也是我们自主加入的前缀,用来做区分。只有这些肯定玩不转的。没有后台代码支持,怎么可以?我们必须封装JAVA代码,把你的逻辑写入,或许也可以加入一些HTML元素。把需要的变量设置到tld文件中做个整合。然后在前台引入tld文件。如<%@ taglib uri="/WEB-INF/tld/aofsoft.tld" prefix="c"%>. 就可以使用了。其实我描述得这些就是自定义标签的一个过程。不理解得要参照我前面的一篇博客。
在 JSP 页面中,使用标签库代替传统的 Java 片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现。鉴于此,出现了 JSTL 。大家应该明白了JSTL是个什么了吧。有了它,我们就不用在JSP页面中写入JAVA代码了。我们可以把它封装成标签,封装好的话,还可以复用。
知识都是相通的,我们还可以联系到struts2的那一套标签,<s:textfield>,<s:property>,<s:if><s:elseif><s:else>,<s:iterator>,<s:select>等等。这是不是也没有什么新鲜的。我们知道原理后,掌握它如何使用即可。
我们可以将<%=user.getUserName() %>改为el表达式为${user.userName} 可以。这只是简单介绍。
4. OGNL是什么?
OGNL是Struts 2默认的表达式语言。是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象。它可以用于JSP的标签库中,以便能够方便的访问各种对象的属性;它用于界面将参数传递到Action(并进行类型转换)中;它还可以用于struts2的配置文件中。
说到这,你可以联想到可以跟OGNL对比的是什么?EL。EL也是表达式语言。可以说EL是基础。OGNL是Struts 2默认的表达式语言,但是这并不能说明struts2不能使用其他表达式语言。其实往往我们都是混着用的。什么好用用什么。
那么OGNL怎么结合sturts2来使用呢?我们主要在下一篇博客中讲解。
相关文章推荐
- JavaScript所有保留字
- Extjs操作Dom
- JavaScript实现异步的4种方法
- js 比较日期
- 奇葩的JS数组
- json转换为map
- 项目____js实现重新提交表单&&避免重新提交表单
- DataTable转为JSON数据格式代码
- js如何终止程序
- JS高级程序设计读书笔记(第七章)
- knockoutJS学习笔记05:控制文本和外观绑定
- 无限滚动js
- MyEclipse修改默认的Servlet和jsp代码内容
- JS实现鼠标双击页面向下滚动,单击停止的特效
- Json解析 Json数据文件 例子
- ewebeditor上传文件大小及在线编辑器jsp版使用心得
- JSP标签实现分页功能(ORM-mybatis)
- js数组去重的三种常用方法总结
- javascript浏览器匹配
- JavaScript得到屏幕宽高、页面宽高