JSTL和EL
JSTL和EL
1.EL表达式总是放在大括号里,而且前面有一个美元符前缀。
person.name2.相似点:(1).都可以让我们在静态内蓉中插入动态信息。EL:室外温度是{emp}度
JSP:室外温度是<%=temp%>度
PS:web容器会以同样的方式处理二者(一旦接受到请求,容器将计算表达式,将其转换为一个字符串,然后插入到响应输出流中)
(2).这些表达式同时还允许我们更改标准标记或自定义标记的属性。
< div style=mystyle>HELLO</div>3.不同点:(1).所有EL表达式以“{”开始,以“}”结尾,JSP是<% %>
(2)很细小,处理表达式内部变量的方式。
JSP:<%! Int i=100; %>
EL:表达式是不能在脚本中定义变量。如果上面的变量声明后,返回一个未定义的值。
PS:我们一般采用javabean的属性或者自定义标记库和标准标记库来定义变量,但是最简单的变量访问是使用JSP本身提供的隐私对象
4.EL表达式中使用隐式变量
EL中的隐式变量
类别 隐式变量名 描述
JSP pageContext 用来访问JSP隐式对象
作用域 pageScope 与page作用域属性的名称和值相关联的Map类
requestScope 与requset作用域属性的名称和值相关联的Map类
sessionScope 与session作用域属性的名称和值相关联的Map类
applicationScope 与application作用域属性的名称和值相关联的Map类
请求参数 Param 包含请求参数字符串的Map类
paramValue 包含请求参数字符串数组(String[])的Map类
请求头 Header 包含请求头自妇女换的Map类
headerValues 包含请求头字符串数组(String [])的Map类
Cookie Cookie 按名称存储请求附带的Cookie的Map类
PS:并没有直接赋予我们EL中直接访问真正的page、servletRequest、HttpSession以及ServletContext的权力,他们返回的只是一个与分别page作用域,Session作用域、application作用域有关的属性名和值的Map对象。
pageContext隐式变量相当于JSP中的javax.serlvet.jsp.PageContext对象
例:pageContext.request.requsURL为了获得请求的HTTP方法例:{pageContext.request.method}
JSP可以使用method方法
例:<%=request.getMethod() %>
(1)使用totalPrice属性处理用户的多个购买
sessionScope.totalPricePS:通过applicationScope隐式变量去访问ServletContext里的属性,而不是通过PageContext变量例:{param.name}
header.accept(2)最后一个隐式变量cookie,用于返回servlet的getCookies()方法的结果PS:当容器解析EL表达式变量时,列如{x}中的x,容器首先检查隐式变量。如果隐式变量中找不到x,它将一次查找page,request,session,application范围的属性,如果还没有找到x,就直接返回null
5.EL运算符
(1)用于访问属性和集合的EL运算符
A.a.b:返回a的属性b的值
B.a[b]:返回a的键或者索引为b的值
${header[“host”]}
Header是一个Map。调用header.get(“host”)方法来去的并显示这个EL表达式的结果。类似的,headerValues.host则会返回一个数组
(2)EL算术、关系、逻辑运算符
除 /或div
取模 %或mod
小于 <或lt
大于 >或gt
小于等于 <=或le
大于等于 >=或ge
是否为空 empty
6.EL函数
(1)将函数插入到JSP页面中的过程共包含创建和更改四个文件
1.方法类(.Java):包含需要在JSP中使用的Java方法
2.标记库描述文件(*.tld):映射每个Java方法到xml函数名
3. 部署描述文件(web.xml):饮食和TLD到标记库URL(注意:改变本文件不是必须的,但是推荐改变本文件)
4.JSP页面(*.jsp):使用标记库URL和函数名调用方法
(2)创建静态方法upper()和length()
PS:
1.方法必须被声明为public和static,而方法所属的类必须声明为public。这样servlet就可以直接访问该类及其方法,而不用创建一个对象。
2.方法的参数和返回值必须在EL中是有效的,否则,web容器将不能识别方法签名
3.类文件必须保存在/WEB-INFO/classes目录下
(3)创建标记库描述文件(TLD)
TLD的目标是将静态方法映射到可以再JSP中使用的函数名。EL中不允许直接调用Java方法
1.元素function中的内容用于定义如何将Java方法映射到函数,对于每个function函数,我们需要提供3类信息
(1)name元素定义要在JSP中使用的函数名
(2)Function-class元素定义方法所在的类的全名
(3)Function-signature元素定义静态方法及其参数和返回值的全数据类型
(4)更改部署描述文件
1.taglib元素中必须包含两个子元素
(1)taglib-uri元素定义用于servlet和JSP要访问该标记库的URL。这个URL可以是绝对的(http://….),可以是相对的(/….)
(2)taglib-location元素定义标记库描述文件的上下文路径。因为我们TLD是在WEB-INFO下面的myFunc目录下,所以元素值是/WEB-INF/myFunc/Functions.tld
(5)在JSP内访问EL函数
1.使用taglib指令访问TLD,并用于一个前缀代表该标记库
2.使用TLD前缀和函数名创建一个EL表达式,必须使用正确参数类型
7.JSP自定义标记库与标准标记库JSTL
JSTL标准标记库
功能范围 作用 URI 前缀
核心 一般用途处理的标记 http://java.sun.com/jsp/jstl/core c
Xml 解析、选择、转换xml数据的标记 http://java.sun.com/jsp/jstl/xml x
数据库 访问关系型数据库的标记 http://java.sun.com/jsp/jstl/sql sql
国际化 为国际化应用格式化数据的标记 http://java.sun.com/jsp/jstl/fmt Fmt
函数 处理字符串和集合的标记 http://java.sun.com/jsp/jstl/function fn
我们就可以使用前缀c来引用JSTL核心标准库中的JSTL标记
(1)通用标记
1.< c:catch>和< c:out>,catch标记不会自己执行这些例程,但是会将抛出的一场保存到catch标记的var属性中
2.Out有一个必要的属性value,标记的功能就是显示value的值
< c:out value=”${number}”/>
(2)变量支持标记
1.< c:set>:设置变量和对象的值
2.< c:remove>:将一个变量从其作用域中删除
(3)流程控制
1.JSTL条件处理:< c:choose>和< c:if>
(1)< c:choose>本身不包含任何属性。但是可以包含多个
< c:when>,when标记中实现比较与测试属性分离
2.循环:< c:forEach>和< c:forTokens>
(4)JSTL访问URL信息
1.核心标记库汇总最后一类是处理URL访问
(1)< c:url>重写URL并对其参数编码
(2)< c:import>访问web应用程序之外的内容
(3)< c:redirect>重定向到不同的URL
2.< c:url>
< c:url value=”/page.html” var=”pagename”/>
还可以用scope属性指定var访问(page,request,session,applicationx)
<c:url value=”/page.html” var=”pagename”>
<c:param name=”param1”value=”${2*2}”/>
</c:url>
< c:import>
通过JSP的include指令范文URL,但是如果访问servlet容器外的内容,就必须使用标记
<c:import url=”/content.html” var=”newstuff”scope=”session”>
<c:param name=”part1” value=”val1”/>
<c:param name=”part2” value=”val2”/>
</c:import>
< c:redirect>
和httpservlet的sendRedirect()方法相同,发送一个重定向响应到客户端
<c:redirect url=”/content.html”>
<c:param name=”par1”value=”val1”/>
<c:param name=”par2”value=”va2”/>
</c:redirect>
JSTL和EL的更多相关文章
- JS中也可以使用JSTL和EL标签
//往上滑是调用分页 function Ajax(currPage, pageSize) { // ajax后台交互String currPage,String pageSize var el, Pl ...
- JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
一下纯属个人总结摘抄,总结一起方便查看,解决疑问,有遗漏或错误,还请指出. 1,JSTL标签总结: a).JSTL标签有什么用? JSTL是由JCP(Java Commu ...
- JSTL、EL、ONGL、Struts标签的区别与使用
一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以 ...
- <Chapter 2>2-2-2-1.介绍JSPs,JSTL,和EL(Introducing JSPs, JSTL, and EL)
现在,我们的时钟显示了UTC时区的时间.我们希望我们的应用可以让用户自定义时区,并且为将来的访问记住用户的偏好.为了做到这一点,我们使用Google帐户来识别哪个用户正在使用这个应用. 在我们深入了解 ...
- JSTL与EL之间的千丝万缕
一.关于JSTL和EL: 什么是JSTL? JSTL( JSP Standard Tag Library)是JSP标准 标签库,由apache实现. 什么是EL? EL(Expression Lang ...
- JSTL与EL常用标签(转)
JSTL与EL EL相关概念 JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程 ...
- JAVA学习JSTL与EL
一.基础 1.EL(Expression Language):为了使jsp写起来更加简单,提供了在Jsp中简化表达式的方法 2.JSTL:(JSP Standard Tag Library)jstl标 ...
- Java之旅(三)--- JSTL和EL表情
先给大家看一段JSP的代码.看看有什么感受? <% List<UsEL> usELList = pageModel.getList(); for (ItELator<Us ...
- JSTL和EL的使用
JSTL和EL的使用 使用JSTL前的准备 想要使用JSTL,首先需要给工程导入JSTL的包(JSTL.jar和standard.jar). JSTL标签库 在JSTL中分为以下五个标签 核心标签 格 ...
随机推荐
- private + virtual in Java/C++
在Java中,private方法是隐式final的,就是说即使在子类中定义一个一模一样的方法,编译器认为这是两个没有联系的方法.private方法不参与运行时多态,这点和 final方法.static ...
- linux系统PXE+Kickstart自动安装系统
一.PXEPXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 ...
- 1.1. 如何使用XproerUI库
项目类型:MFC XproerUI结构: 3rd 第三方库目录 cximage dll 编译的DLL目录 pug ...
- UCS2和UTF16有区别
UCS2是定长的,固定2个字节,所以不能支持扩展字符,而UTF16是变长的. UCS2是落伍的. msdn里有这样一段描述: UCS-2 is a predecessor of UTF-16. ...
- Python 操作FTP
import sys, os, ftplib, socket CONST_HOST = "FTP服务器地址" CONST_USERNAME = "FTP用户名" ...
- 正确理解javascript当中的面向对象
认识面向对象: 为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 1.万物皆为空:万物皆对象 2.对象具有封装和继承特性 ...
- Java内部类,枚举
模式: 模板模式: 简单工厂模式: 适配器模式: interface ICellPhone { void sendMsg(); } class Android implements ICel ...
- 关于js中的for(var in)遍历属性报错问题
之前遇到过这个问题,但是没找到问题的所在,将for(var i in array){} 改成了for(var i ;i<array.length;i++)循环,但是今天又遇到了,mark一下错 ...
- ubuntu源码安装node7+
在官网上下载了node的tar.xz文件(node7.3.0),安装分为两步:1.解压 2.安装 解压也分成两步,首先用xz -d xxx.tar.xz解压为xxx.tar,然后用tar -xvf ...
- 检测Java程序运行时间的2种方法(高精度的时间[纳秒]与低精度的时间[毫秒])
第一种是以毫秒为单位计算的. 代码如下: long startTime=System.currentTimeMillis(); //获取开始时间 doSomeThing(); //测试的代码段 lon ...