jstl set

JSTL : javaserverpages standard tag library JSP标准标签库

目的:用这些标签取代JSP页面上的JAVA代码

分为五类:

JSTL核心库 [基本的I/O, 流程控制, 循环 等功能]
数据库标签库 [基本的数据库操作功能]
XML操作标签库 [用来处理XML文档]
国际化和格式标签库
函数标签库


在这里的例子中
C开头的是核心库的应用[core]一> c:out
----------
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

//纯粹进行字符串的输出

//把计算结果输出
[即] 对于c:out,只要指定value值即可



[进阶]c:out 里面还有个 escapeXml属性,如果它设置成TRUE,则忽略""里面的 HTML标签,如果设置成

FALUSE,则上面第二行中的
会输出一个回车

c:out还可以输出EL表达式的值
例如: 输出的结果是:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)

也可以这样用:<c:out value="<c:redirect>、<c:param>标签测试"/>
二> c:set
----------
[作用] 把变量值设置到JSP内置对象中,或者设置到JAVABEAN属性中
与JSP的动作指令类似
[四种用法]
1>
///var是变量名,value是值,scope是使用范围
2> 2
3>
///针对JAVABEAN进行操作,target是对应的JAVABEAN名
4> "wzk"
[注:] 默认范围都是page

三> c:remove
-------------
[作用:] 和c:set正好相反 [注:]必须指定var属性,scope可以不指定

四> c:if
---------
[作用:] 与IF一样,用于条件判断

//先设置一个属性及其相应值


五> c:choose, c:when, c:otherwise
----------------------------------
c:choose 没有具体的作用,它只是后面两个的父标签,这里把三者一起介绍















[即:] 这里就和JAVA中的switch case,case,case,default类似
[注:] 的个数是<=1个

六> c:forEach
--------------
[作用:] 遍历一个集合中的内容,可以数组,list,array,listlinkedlist,set vector,map等
[两种用法]
1>
[end="endname"] [step="step"]> 循环体中要执行的内容

[解释:] items指定要遍历的对象, var是集合中当前的对象,varstatus是遍历的当前状态信息[包

括:index,count,first,last等属性]

2>
end="endname" [step="step"]> 循环体中要执行的内容

[注:]和上面的区别就是fitst和end属性是必须要指定的,即:按指定次数循环集合

<%
ArrayList list = new ArrayList();
for(int i=0;i<5;i++)
{
Integer newi=new Integer((i+1)*5);
list.add(i,newi); ///因为ADD的参数为(int,object)
}
request.setAttribute("list",list); ///注意用法
%>





///得到当前对象的序号
///[注:]${status.index}的值是从0开始,而status.count的值从1开始


///得到当前对象的值


七> c:forTokens
----------------
[作用:] 对一个字符串进行迭代循环,该字符串是用符号分开的

[begin="begin"] [end="end"] "step="step">
循环中要执行的内容

[解释:] items指定要处理的字符串, delims指定串中的分割符,var指定当前字符串,其它与上面 类似,不

再解释

<%
String question = "What*is*your*name*?";
request.setAttribute("question",question);
%>



次取出的单词为:



八> c:import
-------------
[作用:] 把其它表态或动态页面包含到当前页面,与JSP中类似,不同之处是:只是可

以包含当前WEB应用中的页面,而c:import可以包含其它WEB中的应用
[两种用法]
1>
[scope="{page|request|session|application}"] [charEncoding="charEncoding"].
可以包含标签

[解释:] url可以是当前WEB下的页面,也可以是通过URL链接到其它网站的文件
2> 可以包含标签








[注:] 这时是把页面里面的内容都显示出来,即使里面有HTML代码也不会执行的

九> c:redirect
--------------
[作用:] 把用户的请求从一个页面转向另外一个页面 与JSP中的response内置对象类似
[两种用法]
1>
[解释:] 这里仅仅是实现页面跳转,没有传递任何参数
2>








//则:在getParam.jsp中应用下面两行代码
<%
out.println("传递过来的参数的值为:
");
out.println(request.getParameter("paramName"));
%>
[执行结果为:] 传递过来的参数的值为:
Hello!

[不理解:] 书上说这个标签应该不会把参数名和值显示在URL上,可是我的却会显示
显示为:http://localhost:8080/JstlDemo/getParam.jsp?paramName=Hello!
[难道又不是IE7搞鬼?]


十> c:url
---------
[作用:] 用来产生一个URL
[两种用法]
1>
[scope="{page|request|session|application}"]/>
[解释:] 这种用法仅仅是产生一个URL
[例如:]
1>
[scope="{page|request|session|application}"]>


[解释:] 产生一个带参数的URL
[例如:]



十一> c:catch
--------------
[作用:] 用来捕捉页面产生的错误,和JAVA中的catch功能类似




<%
out.println("10/0的商为:
");
out.println(10/0);
%>

下面是对异常进行的处理:



[执行结果为:]
10/0的商为:
下面是对异常进行的处理:
/ by zero


////第二大类,数据库方面的标签<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
一> sql:setDateSource
---------------------
[作用:] 当然是设置数据源啦
[两种用法]
1>

[scope="{page|request|session|application}"] />
// 下面以连接 SQL SERVER 2000O 为例,使用JDBC驱动器,数据库用户名为:sa, 密码为:123456 则可以用下面的语句
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
user="sa" password="1985315"/>
[注:]这里是连接SQL SERVER 自带的数据库pubs,取得连接后就可以进行各种数据库操作,在后面会介绍
2>

//这种方法其实就是已经知道一个存在的数据源

二> sql:query
--------------
[两种用法]
1>

[scope="{page|request|session|application}"]>
SQL语句

2>
///就是简单地把SQL写到里面,只是一句话展现出来,方便

[scope="{page|request|session|application}"] />


select * from stores














三> sql:update
---------------
[两种用法]
1>

SQL语句

2>


四> sql:param
--------------
[作用:] 主要是配合 PrepareStatement使用, 主要功能就是向里面的SQL语句动态地传递参数值


select * from storee where stor_id=? and stor_name=?




五> sql:dateParam
------------------
[作用:] 设置日期格式 使用方法和完全相同

///其中timestamp是日期加时间的完整格式

六> sql:transaction
--------------------
[作用:]看到名称就是处理事务的

数据库操作




更新数据库语句


查询数据库语句



OK了,,今天晚上先写到这里了,好困,明天还要上班..


第三大类: XML标签库
[注:] 对XML的操作有限,可是在简单应用XML时,它的功能足够了,在较复杂应用XML时,就用SAX或者DOM等API接口来操作XML文档
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>

一> x:parse
-----------
[作用:]用于解析一个XML文档
[两种用法:]
1>

[scope="{page|request|session|application}"] } [systemId="systemId"] [filter="filter"] />
[解释:]doc或xml指明了要处理的XML文档,解析以后的文档放在变量VAR中, 如果是以DOM的方式解析XML文档,则解析后的文档放在变量varDom中

2>

varDom="varName"[scope="{page|request|session|application}"] }
[systemId="systemId"] [filter="filter"]XML文档内容

[区别:]不用指定相应的XML文档,而是直接把XML文档的内容写在中间
它的例子与下面的 x:out 一起介绍

二> x:out
--------------
[作用:] XML文档经 x:parse解析后就由 x:out来进行输出各个结点


[解释:] 其中node是xml文档定位的表达式,这里使用 XPath的语法[一种定位XML节点的语言]


举例: 假设XML文档的内容如下:



Bill
23
boy


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&



///以后就用doc这个变量名代表这个XML文档
///通过${doc}来解析该文档,并把解析后的文档放到变量studentDoc中


///取某个结点值 [该方法就是所谓的 XPath语法]









三> x:set
----------
把XML中某个结点的内容赋值到一个变量中

[解释:] node是其一个结点[这是一个XPath表达式], varName就是用来接受该节点内容的变量
[切记:] 若想用x:set这个标签,必须先对XML文档进行解析,不然这里的XPath表达式不能生效

四> x:if
---------
和c:if有相似之处,只是这里的判断条件变成了XPath表达式[即:判断在XML文档中是否有满足该表达式的节点]
[两种用法]
1>

[注:] 其中node 就是XPath表达式, 如果文档中存在该结点,则varName的值为true,否则为false
2>

判断条件成立时执行的操作

[两者区别仅仅是第二个方法可以进行进一步的操作]

五> x:choose, x:when, x:otherwise [三者同时用,与上面的核心库用法完全一样,可是判断条件变成了XPath表达式而以]
-----------------------------------

六> x:forEach
--------------
[作用:] 对XML文档进行遍历

例子:



Bill
26
boy


Jack
33
girl



遍历的方法是:
////注意这一行代码,和C接合用
///进行解析
//开始进行循环 [注意status的巨大作用!!!]
//[$teacherDoc//teacher含义:取出所以名为teacher的节点]


///注意: 取出父结点后,可以直接通过名称取出其子结点的内容








第四大类:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

一> 国际化标签
---------------------
对于数字和货币等的表示,各个国家是有所不同的,在JSTL中提供情报了这样的标签,可以用来处理这些国际化带来的问题

例子:

///在美国
美国:

数字格式:

百分数格式:123456789

货币格式
//[用中国当地的符号,即在数字前加一个:$]
///在中国
中国:

数字格式:
///默认是number格式,即一般的数字格式
百分数格式:123456789
//表示用百分数
货币格式
//[用中国当地的符号,即在数字前加一个:¥]


[注:] type的值可以为: currency,number,percent


二> 日期格式标签
-----------------

例子:

///得到当前时间


////取出日期,按相应格式输出









///上面这行代码,把formatted变量的值转化成一个日期型号的变量 ,把解析的结果放在parsed变量中






[执行结果:]
2008年04月28日
23:14:18
2008年04月28日 23:14:18
Mon Apr 28 23:14:18 CST 2008


三> 至于函数标签库里面的那些函数个人觉得没有必要看了,用JAVA代码可以容易写出,懒的记啦,呵呵


最后再说一下自定义标签时的步骤[简单的那种,嘿嘿,没办法人比较懒]

1>写功能类
2>写出描述文件TLD,并把它放在 WEB-INFO/目录下
这样以后就可以在页面上调自己的标签啦

下面以一简单例子为例 [功能极其简单[输出当前的系统时间],只是学习一下自快建标签的过程]


1>功能类///-----------DateTag.java
package taglibs;

import javax.servlet.jsp.tagext.BodyTagSupport;
import javax.servlet.jsp.JspWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;

public class DateTag implements Tag {
private PageContext pageContext;
private Tag tag;

public int doEndTag() throws JspException {
try {
Date date = new Date();
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy年MM月dd日");
pageContext.getOut().print(dateFormater.format(date));
} catch (IOException e) {
e.printStackTrace();
}
return Tag.EVAL_PAGE;
}

public int doStartTag() throws JspException {
return Tag.SKIP_BODY;
}

public Tag getParent() {
return null;
}

public void release() {
}

public void setPageContext(PageContext pageContext) {
this.pageContext = pageContext;
}

public void setParent(Tag parent) {
this.tag = parent;
}
}
2> //-----------datetag.tld

"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

////正文开始

1.0
1.2
////上面两行说明版本问题,第二句说明该标签库要求的JSP版本为 1.2
dateTagExample
/mytags


////真正开始

date //标签名 [也即在JSP页面上访问的名称为:date]
taglibs.DateTag ///这里指明了该标签的处理功能类
empty



[注意:] 每个标签库可以包含一组标签,也可以只描述一个标签,一般情况下,把一组功能类似的标签旋转在一个标签库中...
[若有多个标签时,只要多加几节点即可]


JSP页面上应用刚才那个标签

<%@ taglib uri="/WEB-INF/datetag.tld" prefix="mytags" %>

应用: 下面是使用自定义标签输出的内容:

你可能感兴趣的:(jstl)