JSTL
JSTL标签库(Java Server Pages Standard Tag Library)
JSTL是由Apache的Jakarta小组负责维护的,它是一个不断完善的开放源代码的JSP标准标签库,JSTL包含标签库和EL表达式语言两部分。
<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止
JSTL并没有提供设定cookie的动作,
例:要取得cookie中有一个设定名称为userCountry的值,可以使用${cookie.userCountry}来取得它。
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}。
另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用headerValues 来取得这些值。
initParam取得设定web站点的环境参数(Context)
例:一般的方法String userid = (String)application.getInitParameter("userid");
可以使用 ${initParam.userid}来取得名称为userid
pageContext 取得其他有关用户要求或页面的详细信息。 ${pageContext.request.queryString} 取得请求的参数字符串${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath} 服务的web application 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称${pageContext.request.remoteAddr } 取得用户的IP 地址${pageContext.session.new} 判断session 是否为新的${pageContext.session.id} 取得session 的ID${pageContext.servletContext.serverInfo} 取得主机端的服务信息
JSTL标签主要包含核心标签库、格式标签库、SQL标签库、XML标签库和函数标签库共5种标签库。
在使用JSTL标签之前必须在JSP页面的首行使用<%@ talib%>指令定义标签库的位置和访问前缀,(jstl 1.1)各个标签库的定义如下:
核心标签库 支持JSP中的一些基本的操作;
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
格式标签库 I18N capable formatting支持对JSP页面的国际化
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
SQL标签库 Database access (SQL)支持JSP对数据库的操作
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
XML标签库 XML processing支持XML文档的处理
<%@taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>
函数标签库
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
(J2EE1.4)也可写成:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c" %>
<%@ taglib uri="/WEB-INF/fmt.tld" prefix="fmt" %>
<%@ taglib uri="/WEB-INF/fn.tld" prefix="fn" %>
<%@ taglib uri="/WEB-INF/x.tld" prefix="x" %>
<%@ taglib uri="/WEB-INF/sql.tld" prefix="sql" %>
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。
在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。
2、 简化了JSP和WEB应用程序的开发。
3、以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在公司的项目中是不允许有任何的scriptlet代码出现在JSP中。
value 输出的信息,可以是EL表达式或常量 是 无
default value为空时显示信息 否 无
escapeXml 为true则避开特殊的xml字符集 否 true
例子: 您的用户名是:
显示用户的用户名,如为空则显示guest
指定从session中获取username的值显示;
显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示。
value 要保存的信息,可以是EL表达式或常量 否
target 需要修改属性的变量名,一般为javabean的实例 否 无
property 需要修改的javabean属性 否 无
var 需要保存信息的变量 否 无
scope 保存信息的变量的范围 否 page
如果指定了target属性, 那么property属性也必须指定。
例子:
将test.testinfo的值保存到session的test2中,其中test是一个javabean的实例,testinfo是test对象的属性。
将对象cust.address的city属性值保存到变量city中
var 要删除的变量 是 无
scope 被删除变量的范围 否所有范围,包括page、request、session、application等
例子:
从session中删除test2变量。
2、 流控制标签
test 需要评价的条件,相当于if (...){}语句中的条件 是 无
var 要求保存条件结果的变量名 否 无
scope 保存条件结果的变量范围 否 page
算术运算符 + 、 - 、 * 、 / (或 div )和 % (或 mod )
关系运算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )
逻辑运算符 && (或 and )、 || (或 or )和 ! (或 not )
验证运算符 empty
s
这个标签不接受任何属性
test 需要评价的条件 是 无
这个标签同样不接受任何属性
例子:
user.wealthy is true.
如果user.wealthy值true,则显示user.wealthy is true.
user.generous is true.
user.stingy is true.
user.generous and user.stingy are false.
只有当条件user.generous返回值是true时,才显示user.generous is true.
只有当条件user.stingy返回值是true时,才显示user.stingy is true.
其它所有的情况(即user.generous和user.stingy的值都不为true)全部显示user.generous and user.stingy are false.
由于JSTL没有形如if (){…} else {…}的条件语句,所以这种形式的语句只能用
3、 循环控制标签
items 进行循环的项目 否 无
begin 开始条件 否 0
end 结束条件 否 集合中的最后一个项目
step 步长 否 1
var 代表当前项目的变量名 否 无
varStatus 显示循环状态的变量 否 无
current getCurrent() 当前这次迭代的(集合中的)项
index getIndex() 当前这次迭代从 0 开始的迭代索引
count getCount() 当前这次迭代从 1 开始的迭代计数
first isFirst() 用来表明当前这轮迭代是否为第一次迭代的标志
last isLast() 用来表明当前这轮迭代是否为最后一次迭代的标志
begin getBegin() begin 属性值
end getEnd() end 属性值
step getStep() step 属性值
例子:
相当于java语句 for (int i=0;i out.println(vectors.get(i)); } 在这里vectors是一个java.util.Vector对象,里面存放的是String数据,vector是当前循环条件下String对象。实际上这里的vectors可以是任何实现了java.util. Collection接口的对象。 count= 输出: count=0 ... count=100 items 进行循环的项目 是 无 delims 分割符 是 无 begin 开始条件 否 0 end 结束条件 否 集合中的最后一个项目 step 步长 否 1 var 代表当前项目的变量名 否 无 varStatus 显示循环状态的变量 否 无 例子 这个标签的使用相当于java.util.StringTokenizer类。在这里将字符串a:b:c:d以:分开循环四次,token是循环到当前分割到的字符串。 4.导入文件和URL JSTL核心标签库支持使用 url 需要导入页面的url 是 无 context /后跟本地web应用程序的名字 否 当前应用程序 charEncoding 用于导入数据的字符集 否 ISO-8859-1 var 接受导入文本的变量名 否 page scope 接受导入文本的变量的变量范围 否 1 varReader 用于接受导入文本的java.io.Reader变量名 否 无 varStatus 显示循环状态的变量 否 无 url url地址 是 无 context /后跟本地web应用程序的名字 否 当前应用程序 charEncoding 用于导入数据的字符集 否 ISO-8859-1 var 接受处理过的url变量名,该变量存储url 否 输出到页 scope 存储url的变量名的变量范围 否 page 例子: 将url http://www.url.com/edit.js包含到当前页的当前位置,并将url保存到newsfeed变量中 在当前页的当前位置输出,http://www.yourname.com是当前页的所在的位置。 url url地址 是 无 context /后跟本地web应用程序的名字 否 当前应用程序 例子: 将请求重新定向到http://www.yourname.com/login.jsp页,相当于response.setRedirect("http://www.yourname.com/login.jsp"); name 在request参数中设置的变量名 是 无 value 在request参数中设置的变量值 否 无 例子: 将参数888以id为名字传递到login.jsp页面,相当于login.jsp?id=888 格式化日期和数字的标签: 属性 描述 value 格式化的数字,该数值可以是 String 类型或 java.lang.Number 类型的实例 type 格式化的类型 pattern 格式化模式 var 结果保存变量 scope 变量的作用范围 maxIntegerDigits 指定格式化结果的最大值 minIntegerDigits 指定格式化结果的最小值 maxFractionDigits 指定格式化结果的最大值,带小数 minFractionDigits 指定格式化结果的最小值,带小数 下面看一个示例。 该结果将被保存在“ money ”变量中,将根据 Locale 环境显示当地的货币格式。 表 9.22 属性 描述 value 将被解析的字符串 type 解析格式化的类型 pattern 解析格式化模式 var 结果保存变量,类型为 java.lang.Number scope 变量的作用范围 parseLocale 以本地化的形式来解析字符串,该属性的内容应为 String 或 java.util.Locale 类型的实例 下面看一个示例。 解析之后的结果为“ 0.15 ”。 表 9.23 属性 描述 value 格式化的日期,该属性的内容应该是 java.util.Date 类型的实例 type 格式化的类型 pattern 格式化模式 var 结果保存变量 scope 变量的作用范围 timeZone 指定格式化日期的时区 pattern="G yyyy年MM月dd日 E" G表示公元E表示星期几 type: 可以是time,date或both。控制是否只生成时间,只生成日期,或者时间日期都生成。 dateStyle: 可以是short, medium, long 或 full(default)。控制打印日期使用的具体格式。 timeStyle: 可以是short, medium, long 或 full(default)。控制打印时间使用的具体格式。 value: 这是一个java.util.Date 类型的值,用于生成日期和时间。 表 9.24 属性 描述 value 将被解析的字符串 type 解析格式化的类型 pattern 解析格式化模式 var 结果保存变量,类型为 java.lang.Date scope 变量的作用范围 parseLocale 以本地化的形式来解析字符串,该属性的内容为 String 或 java.util.Locale 类型的实例 timeZone 指定解析格式化日期的时区 body content value属性的值是一个命名时区的字符串或者是java.util.TimeZone类的一个实例,它支持动态的值。如果value属性的值为null或空字符串,标签体中的内容就使用GMT时区。 如果value属性的值是表示时区名称的字符串,这个字符串通过静态方法java.util.Time Zone.getTimeZone()被解析为java.util.TimeZone类的一个实例。 XML核心标签库: 设置数据源的标签: 自定义函数:
读取消息资源的标签:
国际化的标签:
XML流程控制标签:
XML文件转换:
SQL操作的标签:
作用:可以在el表达式中运用实现一定的功能,对el的功能进行扩展。
使用:
1)借助taglib指令定位tld文件(函数库位置)
2)形如${mytag:函数名(参数列表值)}
开发:
1)自定义一个类,实现相应静态方法
2)写一个函数库描述文件(tld后缀)
Uri:
Function:说明调用者,java类中对应的方法的关系
Name:对外使用时的名称
Function-class:该方法所在类名
Function-signature:类中该方法的声明,注意:如果引用类型,必须使用类全名
自定义函数可以嵌套:
${calculation:getParameterValue(pageContext.request,calculation:concat("user","name"))}