- 浏览: 1139050 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (240)
- javascript (24)
- Struts (3)
- Hibernate (9)
- spring (3)
- 学海无涯 (45)
- jstl (4)
- java (21)
- js (4)
- Ajax (2)
- 开源框架-ajax (1)
- oracle spring (38)
- unix (6)
- 美国骆驼 American Camel 骆驼皮鞋 骆驼正品 (0)
- android (1)
- BIEE (16)
- informatica (13)
- 触摸屏 (1)
- 诈×骗×电话 (4)
- 远程桌面无法连接 (1)
- 旅游 (3)
- 生活 (8)
- hp6531s (2)
- oracle (6)
- 短信病毒 (1)
- 手机诈骗 短信病毒 (3)
- 骗子 (3)
- ultraedit (1)
- sql2008 (0)
- 苏宁易购大骗子 苏宁易购二手当新品卖 苏宁易购以次充好 苏宁易购您还敢下单吗 (0)
- 苏宁易购二手当新品卖 (0)
- informatica etl (5)
- etl (8)
- NoClassDefFoundError: com/opensymphony/xwork2/util/classloader/ReloadingClas (1)
- mysql (2)
- jquery ajax post (1)
- jason (1)
- json (1)
- struts2 (1)
- jsp 文本编辑器 (2)
- beyond compare (1)
- svn (3)
- EAS BOS (3)
- tapestry5 (1)
- obiee (3)
- java dll (2)
- office (1)
- kettle 8.2 org.gjt.mm.mysql.Driver (1)
最新评论
-
JianCaesar:
oracleStr2Clob,为什么要用反射,直接调用不可以吗 ...
java String和Clob转换 -
vip_gg:
...
邮件失败!javax.mail.AuthenticationFailedException: 535 Error: authentication -
cherryQQ:
我把敏感的用*号代替啦,这样可以了吧,等你加一个号,等着租房子 ...
**同城租房需要加房东的微*号 -
sam.sheng.3:
dream80 写道是的,这个主要就是二步验证的问题,很多人不 ...
AttributeError: can't set attribute -
ooo456mmm:
不错
oracle job 定时执行 存储过程
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="JSTL标签测试!" /><br> //纯粹进行字符串的输出
<c:out value="${10/5}"/><br> //把计算结果输出
[即] 对于c:out,只要指定value值即可
<c:out value="JSTL标签测试!<br>" escapeXml="true" />
<c:out value="JSTL标签测试!<br>" escapeXml="false" />
[进阶]c:out 里面还有个 escapeXml属性,如果它设置成TRUE,则忽略""里面的 HTML标签,如果设置成
FALUSE,则上面第二行中的<BR>会输出一个回车
c:out还可以输出EL表达式的值
例如:<c:out value="${header['User-Agent']}"/> 输出的结果是:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
也可以这样用:<title><c:out value="<c:redirect>、<c:param>标签测试"/></title>
二> c:set
----------
[作用] 把变量值设置到JSP内置对象中,或者设置到JAVABEAN属性中
与JSP的动作指令<jsp:setProperty>类似
[四种用法]
1> <c:set var="number" value="2" [scope="{page|request|session|application}"]/>
///var是变量名,value是值,scope是使用范围
2> <c:set var="number" [scope="{page|request|session|application}"]>2</c:set>
3> <c:set value="wzk" target="Userbean" propertyName="name"/>
///针对JAVABEAN进行操作,target是对应的JAVABEAN名
4> <c:set target="Userbean" propertyName="name">"wzk"</c:set>
[注:] 默认范围都是page
三> c:remove
-------------
[作用:] 和c:set正好相反 [注:]必须指定var属性,scope可以不指定
四> c:if
---------
[作用:] 与IF一样,用于条件判断
<c:set var="number" value="2" scope="request"/> //先设置一个属性及其相应值
<c:if test="${number==1}"><c:out value="给定数字的值为1"></c:out></c:if>
五> c:choose, c:when, c:otherwise
----------------------------------
c:choose 没有具体的作用,它只是后面两个的父标签,这里把三者一起介绍
<c:set var="IDE" value="Eclipse"/>
<c:choose>
<c:when test="${IDE=='JBuilder'}">
<c:out value="你使用的开发工具为JBuilder"/>
</c:when>
<c:when test="${IDE=='Eclipse'}">
<c:out value="你使用的开发工具为Eclipse"/>
</c:when>
<c:when test="${IDE=='JCreator'}">
<c:out value="你使用的开发工具为JCreator"/>
</c:when>
<c:otherwise>
<c:out value="你是高手!用记事本写代码?"/>
</c:otherwise>
</c:choose>
[即:] 这里就和JAVA中的switch case,case,case,default类似
[注:] <c:otherwise>的个数是<=1个
六> c:forEach
--------------
[作用:] 遍历一个集合中的内容,可以数组,list,array,listlinkedlist,set vector,map等
[两种用法]
1> <c:forEach [var="varname" items="collection" [varStatus="varStatusName"] [begin="beginname"]
[end="endname"] [step="step"]> 循环体中要执行的内容</c:forEach>
[解释:] items指定要遍历的对象, var是集合中当前的对象,varstatus是遍历的当前状态信息[包
括:index,count,first,last等属性]
2> <c:forEach [var="varname" items="collection" [varStatus="varStatusName"] begin="beginname"
end="endname" [step="step"]> 循环体中要执行的内容</c:forEach>
[注:]和上面的区别就是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); ///注意用法
%>
<c:out value="<c:forEach>标签示例:"/><br>
<c:forEach items="${list}" var="current" varStatus="status">
<c:out value="序号:"/>
<c:out value="${status.count}"/> ///得到当前对象的序号
///[注:]${status.index}的值是从0开始,而status.count的值从1开始
<c:out value="值:"/>
<c:out value="${current}"/><br> ///得到当前对象的值
</c:forEach>
七> c:forTokens
----------------
[作用:] 对一个字符串进行迭代循环,该字符串是用符号分开的
<c:forTokens items="string" delims="selimiters" [var="varname"] [varStatus="varStatusName"]
[begin="begin"] [end="end"] "step="step">
循环中要执行的内容
</c:forTokens>
[解释:] items指定要处理的字符串, delims指定串中的分割符,var指定当前字符串,其它与上面 类似,不
再解释
<%
String question = "What*is*your*name*?";
request.setAttribute("question",question);
%>
<c:out value="<c:forTokens>标签示例"/><br>
<c:forTokens items="${question}" var="current" delims="*" varStatus="status">
第<c:out value="${status.count}"/>次取出的单词为:<c:out value="${current}"/><br>
</c:forTokens>
八> c:import
-------------
[作用:] 把其它表态或动态页面包含到当前页面,与JSP中<jsp:include>类似,不同之处是:<jsp:include>只是可
以包含当前WEB应用中的页面,而c:import可以包含其它WEB中的应用
[两种用法]
1> <c:import url="url" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] [charEncoding="charEncoding"].
可以包含<c:param>标签
</c:import>
[解释:] url可以是当前WEB下的页面,也可以是通过URL链接到其它网站的文件
2> <c:import url="url" [context="context"] varReader="varReader" [charEncoding="charEncoding"].
可以包含<c:param>标签
</c:import>
<c:out value="下面是引入文件的操作:"></c:out><br>
<c:import var="include" url="inc/content.txt" charEncoding="gb2312"/>
<c:out value="下面显示引入的内容:"/><br>
<c:out value="${include}"/>
[注:] 这时是把页面里面的内容都显示出来,即使里面有HTML代码也不会执行的
九> c:redirect
--------------
[作用:] 把用户的请求从一个页面转向另外一个页面 与JSP中的response内置对象类似
[两种用法]
1> <c:redirect url="url" [context="context"]/>
[解释:] 这里仅仅是实现页面跳转,没有传递任何参数
2> <c:redirect url="url" [context="context"]>
<c:param>
</c:rediect>
<c:out value="<c:redirect>、<c:param>标签测试"/>
<c:redirect url="getParam.jsp">
<c:param name="paramName" value="Hello!"/>
</c:redirect>
//则:在getParam.jsp中应用下面两行代码
<%
out.println("传递过来的参数的值为:<br>");
out.println(request.getParameter("paramName"));
%>
[执行结果为:] 传递过来的参数的值为:
Hello!
[不理解:] 书上说这个标签应该不会把参数名和值显示在URL上,可是我的却会显示
显示为:http://localhost:8080/JstlDemo/getParam.jsp?paramName=Hello!
[难道又不是IE7搞鬼?]
十> c:url
---------
[作用:] 用来产生一个URL
[两种用法]
1> <c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]/>
[解释:] 这种用法仅仅是产生一个URL
[例如:] <c:url value="www.sina.com"/>
1> <c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]>
<c:param>
</c:url>
[解释:] 产生一个带参数的URL
[例如:] <c:url value="www.sina.com"/>
<c:param name="message" value="hello"/>
</c:url>
十一> c:catch
--------------
[作用:] 用来捕捉页面产生的错误,和JAVA中的catch功能类似
<c:catch var="exception">
<!--下面这里是要捕获异常的代码部分-->
<%
out.println("10/0的商为:<br>");
out.println(10/0);
%>
</c:catch>
下面是对异常进行的处理:<br>
<c:out value="${exception.message}"/>
[执行结果为:]
10/0的商为:
下面是对异常进行的处理:
/ by zero
////第二大类,数据库方面的标签<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
一> sql:setDateSource
---------------------
[作用:] 当然是设置数据源啦
[两种用法]
1>
<sql:setDataSource driver="driverName" url="URL" [user="userName"] [password="password"] [var="varName"]
[scope="{page|request|session|application}"] />
// 下面以连接 SQL SERVER 2000O 为例,使用JDBC驱动器,数据库用户名为:sa, 密码为:123456 则可以用下面的语句
<sql:setDataSource var="conn" driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
user="sa" password="1985315"/>
[注:]这里是连接SQL SERVER 自带的数据库pubs,取得连接后就可以进行各种数据库操作,在后面会介绍
2>
<sql:setDataSource dataSource="dataSource" [var="varName"] [scope="{page|request|session|application}"] />
//这种方法其实就是已经知道一个存在的数据源
二> sql:query
--------------
[两种用法]
1>
<sql:query var="varName" dataSource="dataSource" [maxRows="max"] [startRow="start"]
[scope="{page|request|session|application}"]>
SQL语句
</sql:query>
2>
///就是简单地把SQL写到里面,只是一句话展现出来,方便
<sql:query sql="SQL语句" var="varName" dataSource="dataSource" [maxRows="max"] [startRow="start"]
[scope="{page|request|session|application}"] />
<sql:query var="rs" dataSource="${conn }">
select * from stores
</sql:query>
<c:out value="一共查出${rs.rowCount}记录:"/><br>
<c:forEach items="${rs.rows}" var="job" varStatus="status">
<c:out value="第${status.count}条记录:"/>
<c:out value="stor_id为${job.stor_id}"/>
<c:out value="city为${job.city}"/>
<c:out value="state为${job.state}"/>
<c:out value="zip为${job.zip}"/>
<br>
</c:forEach>
三> sql:update
---------------
[两种用法]
1>
<sql:update dataSource="datasource" [var="varName"] [scope="{page|request|session|application}"] >
SQL语句
</sql:update>
2>
<sql:update sql="SQL语句" dataSource="datasource" [var="varName"] [scope="{page|request|session|application}"] />
四> sql:param
--------------
[作用:] 主要是配合 PrepareStatement使用, 主要功能就是向<sql:query>里面的SQL语句动态地传递参数值
<sql:query var="rs" dataSource="datasource" >
select * from storee where stor_id=? and stor_name=?
<sql:param value="10">
<sql:param value="wzk">
</sql:query>
五> sql:dateParam
------------------
[作用:] 设置日期格式 使用方法和<sql:param>完全相同
<sql:dateParam value="value" [type="{timestamp|time|date}" />
///其中timestamp是日期加时间的完整格式
六> sql:transaction
--------------------
[作用:]看到名称就是处理事务的
<sql:transaction [isolation="{read_uncommitted|read_committed|repeatable_read|serializable}"] [dataSource="datasource"]>
数据库操作
</sql:transaction>
<sql:transaction dataSource="${database}">
<sql:update>
更新数据库语句
</sql:update>
<sql:query>
查询数据库语句
</sql:query>
</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>
<x:parse {doc="xmldoc" | xml="xmldoc"} {var="varName"} [scope="{page|request|session|application}"] | {varDom="varName" |
[scope="{page|request|session|application}"] } [systemId="systemId"] [filter="filter"] />
[解释:]doc或xml指明了要处理的XML文档,解析以后的文档放在变量VAR中, 如果是以DOM的方式解析XML文档,则解析后的文档放在变量varDom中
2>
<x:parse { var="varName" [scope="{page|request|session|application}"]|
varDom="varName"[scope="{page|request|session|application}"] }
[systemId="systemId"] [filter="filter"]XML文档内容
</x:parse>
[区别:]不用指定相应的XML文档,而是直接把XML文档的内容写在中间
它的例子与下面的 x:out 一起介绍
二> x:out
--------------
[作用:] XML文档经 x:parse解析后就由 x:out来进行输出各个结点
<x:out select="node" [escapeXML="{true|false}"] />
[解释:] 其中node是xml文档定位的表达式,这里使用 XPath的语法[一种定位XML节点的语言]
举例: 假设XML文档的内容如下:
<?xml version="1.0" encoding="gb2312"?>
<students>
<student>
<name>Bill</name>
<age>23</age>
<sex>boy</sex>
</student>
</students>
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
<font size="2">
<c:out value="<x:Parse>、<x:out>标签示例"/><br>
<c:import var="doc" url="Students.xml" charEncoding="gb2312"/> ///以后就用doc这个变量名代表这个XML文档
<x:parse var="studentDoc" doc="${doc}"/> ///通过${doc}来解析该文档,并把解析后的文档放到变量studentDoc中
<c:out value="学生姓名:"/>
<x:out select="$studentDoc/students/student/name"/><br> ///取某个结点值 [该方法就是所谓的 XPath语法]
<c:out value="学生年龄:"/>
<x:out select="$studentDoc/students/student/age"/><br>
<c:out value="学生性别:"/>
<x:out select="$studentDoc/students/student/sex"/><br>
</font>
三> x:set
----------
把XML中某个结点的内容赋值到一个变量中
<x:set select ="node" var="varName" [scope="{page|request|session|application}"] />
[解释:] node是其一个结点[这是一个XPath表达式], varName就是用来接受该节点内容的变量
[切记:] 若想用x:set这个标签,必须先对XML文档进行解析,不然这里的XPath表达式不能生效
四> x:if
---------
和c:if有相似之处,只是这里的判断条件变成了XPath表达式[即:判断在XML文档中是否有满足该表达式的节点]
[两种用法]
1>
<x:if select ="node" var="varName" [scope="{page|request|session|application}"] />
[注:] 其中node 就是XPath表达式, 如果文档中存在该结点,则varName的值为true,否则为false
2>
<x:if select ="node" var="varName" [scope="{page|request|session|application}"] >
判断条件成立时执行的操作
</x:if>
[两者区别仅仅是第二个方法可以进行进一步的操作]
五> x:choose, x:when, x:otherwise [三者同时用,与上面的核心库用法完全一样,可是判断条件变成了XPath表达式而以]
-----------------------------------
六> x:forEach
--------------
[作用:] 对XML文档进行遍历
例子:
<?xml version="1.0" encoding="gb2312"?>
<teachers>
<teacher>
<name>Bill</name>
<age>26</age>
<sex>boy</sex>
</teacher>
<teacher>
<name>Jack</name>
<age>33</age>
<sex>girl</sex>
</teacher>
</teachers>
遍历的方法是:
<c:import var="doc" url="Teachers.xml" charEncoding="gb2312"/> ////注意这一行代码,和C接合用
<x:parse var="teacherDoc" doc="${doc}"/> ///进行解析
<x:forEach select="$teacherDoc//teacher" varStatus="status">//开始进行循环 [注意status的巨大作用!!!]
//[$teacherDoc//teacher含义:取出所以名为teacher的节点]
<c:out value="第${status.count}个老师:"/>
<c:out value="姓名 "/>
<x:out select="name"/> ///注意: 取出父结点后,可以直接通过名称取出其子结点的内容
<c:out value="年龄 "/>
<x:out select="age"/>
<c:out value="性别 "/>
<x:out select="sex"/><br>
</x:forEach>
第四大类:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
一> 国际化标签
---------------------
对于数字和货币等的表示,各个国家是有所不同的,在JSTL中提供情报了这样的标签,可以用来处理这些国际化带来的问题
例子:
<font size="2">
<fmt:setLocale value="en-US" /> ///在美国
美国:<br>
数字格式:<fmt:formatNumber value="123456789" /><br>
百分数格式:<fmt:formatNumber type="percent">123456789</fmt:formatNumber><br>
货币格式<fmt:formatNumber value="12345.67" type="currency" /><br> //[用中国当地的符号,即在数字前加一个:$]
<fmt:setLocale value="zh_CN" /> ///在中国
中国:<br>
数字格式:<fmt:formatNumber value="123456789" /><br> ///默认是number格式,即一般的数字格式
百分数格式:<fmt:formatNumber type="percent">123456789</fmt:formatNumber><br> //表示用百分数
货币格式<fmt:formatNumber value="12345.67" type="currency" /><br> //[用中国当地的符号,即在数字前加一个:¥]
</font>
[注:] type的值可以为: currency,number,percent
二> 日期格式标签
-----------------
例子:
<font size="2">
<c:set var="date" value="<%=new java.util.Date()%>"/> ///得到当前时间
<fmt:formatDate value="${date}" pattern="yyyy年MM月dd日" type="date" dateStyle="full"/><br>
////取出日期,按相应格式输出
<fmt:formatDate value="${date}" pattern="HH:mm:ss" type="time" timeStyle="full"/><br>
<fmt:formatDate value="${date}" pattern="yyyy年MM月dd日 HH:mm:ss" type="both" dateStyle="full" timeStyle="full"/><br>
<fmt:formatDate value="${date}" type="both" timeStyle="full" var="formatted"/>
<fmt:parseDate value="${formatted}" type="both" timeStyle="full" timeZone="GMT" var="parsed"/>
///上面这行代码,把formatted变量的值转化成一个日期型号的变量 ,把解析的结果放在parsed变量中
<c:out value="${parsed}"/><br>
</font>
[执行结果:]
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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
////正文开始
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
////上面两行说明版本问题,第二句说明该标签库要求的JSP版本为 1.2
<short-name>dateTagExample</short-name>
<uri>/mytags</uri>
////真正开始
<tag>
<name>date</name> //标签名 [也即在JSP页面上访问的名称为:date]
<tag-class>taglibs.DateTag</tag-class> ///这里指明了该标签的处理功能类
<body-content>empty</body-content>
</tag>
</taglib>
[注意:] 每个标签库可以包含一组标签,也可以只描述一个标签,一般情况下,把一组功能类似的标签旋转在一个标签库中...
[若有多个标签时,只要多加几<tag>节点即可]
JSP页面上应用刚才那个标签
<%@ taglib uri="/WEB-INF/datetag.tld" prefix="mytags" %>
应用: 下面是使用自定义标签输出的内容:<br> <mytags:date/>
目的:用这些标签取代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="JSTL标签测试!" /><br> //纯粹进行字符串的输出
<c:out value="${10/5}"/><br> //把计算结果输出
[即] 对于c:out,只要指定value值即可
<c:out value="JSTL标签测试!<br>" escapeXml="true" />
<c:out value="JSTL标签测试!<br>" escapeXml="false" />
[进阶]c:out 里面还有个 escapeXml属性,如果它设置成TRUE,则忽略""里面的 HTML标签,如果设置成
FALUSE,则上面第二行中的<BR>会输出一个回车
c:out还可以输出EL表达式的值
例如:<c:out value="${header['User-Agent']}"/> 输出的结果是:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)
也可以这样用:<title><c:out value="<c:redirect>、<c:param>标签测试"/></title>
二> c:set
----------
[作用] 把变量值设置到JSP内置对象中,或者设置到JAVABEAN属性中
与JSP的动作指令<jsp:setProperty>类似
[四种用法]
1> <c:set var="number" value="2" [scope="{page|request|session|application}"]/>
///var是变量名,value是值,scope是使用范围
2> <c:set var="number" [scope="{page|request|session|application}"]>2</c:set>
3> <c:set value="wzk" target="Userbean" propertyName="name"/>
///针对JAVABEAN进行操作,target是对应的JAVABEAN名
4> <c:set target="Userbean" propertyName="name">"wzk"</c:set>
[注:] 默认范围都是page
三> c:remove
-------------
[作用:] 和c:set正好相反 [注:]必须指定var属性,scope可以不指定
四> c:if
---------
[作用:] 与IF一样,用于条件判断
<c:set var="number" value="2" scope="request"/> //先设置一个属性及其相应值
<c:if test="${number==1}"><c:out value="给定数字的值为1"></c:out></c:if>
五> c:choose, c:when, c:otherwise
----------------------------------
c:choose 没有具体的作用,它只是后面两个的父标签,这里把三者一起介绍
<c:set var="IDE" value="Eclipse"/>
<c:choose>
<c:when test="${IDE=='JBuilder'}">
<c:out value="你使用的开发工具为JBuilder"/>
</c:when>
<c:when test="${IDE=='Eclipse'}">
<c:out value="你使用的开发工具为Eclipse"/>
</c:when>
<c:when test="${IDE=='JCreator'}">
<c:out value="你使用的开发工具为JCreator"/>
</c:when>
<c:otherwise>
<c:out value="你是高手!用记事本写代码?"/>
</c:otherwise>
</c:choose>
[即:] 这里就和JAVA中的switch case,case,case,default类似
[注:] <c:otherwise>的个数是<=1个
六> c:forEach
--------------
[作用:] 遍历一个集合中的内容,可以数组,list,array,listlinkedlist,set vector,map等
[两种用法]
1> <c:forEach [var="varname" items="collection" [varStatus="varStatusName"] [begin="beginname"]
[end="endname"] [step="step"]> 循环体中要执行的内容</c:forEach>
[解释:] items指定要遍历的对象, var是集合中当前的对象,varstatus是遍历的当前状态信息[包
括:index,count,first,last等属性]
2> <c:forEach [var="varname" items="collection" [varStatus="varStatusName"] begin="beginname"
end="endname" [step="step"]> 循环体中要执行的内容</c:forEach>
[注:]和上面的区别就是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); ///注意用法
%>
<c:out value="<c:forEach>标签示例:"/><br>
<c:forEach items="${list}" var="current" varStatus="status">
<c:out value="序号:"/>
<c:out value="${status.count}"/> ///得到当前对象的序号
///[注:]${status.index}的值是从0开始,而status.count的值从1开始
<c:out value="值:"/>
<c:out value="${current}"/><br> ///得到当前对象的值
</c:forEach>
七> c:forTokens
----------------
[作用:] 对一个字符串进行迭代循环,该字符串是用符号分开的
<c:forTokens items="string" delims="selimiters" [var="varname"] [varStatus="varStatusName"]
[begin="begin"] [end="end"] "step="step">
循环中要执行的内容
</c:forTokens>
[解释:] items指定要处理的字符串, delims指定串中的分割符,var指定当前字符串,其它与上面 类似,不
再解释
<%
String question = "What*is*your*name*?";
request.setAttribute("question",question);
%>
<c:out value="<c:forTokens>标签示例"/><br>
<c:forTokens items="${question}" var="current" delims="*" varStatus="status">
第<c:out value="${status.count}"/>次取出的单词为:<c:out value="${current}"/><br>
</c:forTokens>
八> c:import
-------------
[作用:] 把其它表态或动态页面包含到当前页面,与JSP中<jsp:include>类似,不同之处是:<jsp:include>只是可
以包含当前WEB应用中的页面,而c:import可以包含其它WEB中的应用
[两种用法]
1> <c:import url="url" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] [charEncoding="charEncoding"].
可以包含<c:param>标签
</c:import>
[解释:] url可以是当前WEB下的页面,也可以是通过URL链接到其它网站的文件
2> <c:import url="url" [context="context"] varReader="varReader" [charEncoding="charEncoding"].
可以包含<c:param>标签
</c:import>
<c:out value="下面是引入文件的操作:"></c:out><br>
<c:import var="include" url="inc/content.txt" charEncoding="gb2312"/>
<c:out value="下面显示引入的内容:"/><br>
<c:out value="${include}"/>
[注:] 这时是把页面里面的内容都显示出来,即使里面有HTML代码也不会执行的
九> c:redirect
--------------
[作用:] 把用户的请求从一个页面转向另外一个页面 与JSP中的response内置对象类似
[两种用法]
1> <c:redirect url="url" [context="context"]/>
[解释:] 这里仅仅是实现页面跳转,没有传递任何参数
2> <c:redirect url="url" [context="context"]>
<c:param>
</c:rediect>
<c:out value="<c:redirect>、<c:param>标签测试"/>
<c:redirect url="getParam.jsp">
<c:param name="paramName" value="Hello!"/>
</c:redirect>
//则:在getParam.jsp中应用下面两行代码
<%
out.println("传递过来的参数的值为:<br>");
out.println(request.getParameter("paramName"));
%>
[执行结果为:] 传递过来的参数的值为:
Hello!
[不理解:] 书上说这个标签应该不会把参数名和值显示在URL上,可是我的却会显示
显示为:http://localhost:8080/JstlDemo/getParam.jsp?paramName=Hello!
[难道又不是IE7搞鬼?]
十> c:url
---------
[作用:] 用来产生一个URL
[两种用法]
1> <c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]/>
[解释:] 这种用法仅仅是产生一个URL
[例如:] <c:url value="www.sina.com"/>
1> <c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]>
<c:param>
</c:url>
[解释:] 产生一个带参数的URL
[例如:] <c:url value="www.sina.com"/>
<c:param name="message" value="hello"/>
</c:url>
十一> c:catch
--------------
[作用:] 用来捕捉页面产生的错误,和JAVA中的catch功能类似
<c:catch var="exception">
<!--下面这里是要捕获异常的代码部分-->
<%
out.println("10/0的商为:<br>");
out.println(10/0);
%>
</c:catch>
下面是对异常进行的处理:<br>
<c:out value="${exception.message}"/>
[执行结果为:]
10/0的商为:
下面是对异常进行的处理:
/ by zero
////第二大类,数据库方面的标签<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
一> sql:setDateSource
---------------------
[作用:] 当然是设置数据源啦
[两种用法]
1>
<sql:setDataSource driver="driverName" url="URL" [user="userName"] [password="password"] [var="varName"]
[scope="{page|request|session|application}"] />
// 下面以连接 SQL SERVER 2000O 为例,使用JDBC驱动器,数据库用户名为:sa, 密码为:123456 则可以用下面的语句
<sql:setDataSource var="conn" driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"
user="sa" password="1985315"/>
[注:]这里是连接SQL SERVER 自带的数据库pubs,取得连接后就可以进行各种数据库操作,在后面会介绍
2>
<sql:setDataSource dataSource="dataSource" [var="varName"] [scope="{page|request|session|application}"] />
//这种方法其实就是已经知道一个存在的数据源
二> sql:query
--------------
[两种用法]
1>
<sql:query var="varName" dataSource="dataSource" [maxRows="max"] [startRow="start"]
[scope="{page|request|session|application}"]>
SQL语句
</sql:query>
2>
///就是简单地把SQL写到里面,只是一句话展现出来,方便
<sql:query sql="SQL语句" var="varName" dataSource="dataSource" [maxRows="max"] [startRow="start"]
[scope="{page|request|session|application}"] />
<sql:query var="rs" dataSource="${conn }">
select * from stores
</sql:query>
<c:out value="一共查出${rs.rowCount}记录:"/><br>
<c:forEach items="${rs.rows}" var="job" varStatus="status">
<c:out value="第${status.count}条记录:"/>
<c:out value="stor_id为${job.stor_id}"/>
<c:out value="city为${job.city}"/>
<c:out value="state为${job.state}"/>
<c:out value="zip为${job.zip}"/>
<br>
</c:forEach>
三> sql:update
---------------
[两种用法]
1>
<sql:update dataSource="datasource" [var="varName"] [scope="{page|request|session|application}"] >
SQL语句
</sql:update>
2>
<sql:update sql="SQL语句" dataSource="datasource" [var="varName"] [scope="{page|request|session|application}"] />
四> sql:param
--------------
[作用:] 主要是配合 PrepareStatement使用, 主要功能就是向<sql:query>里面的SQL语句动态地传递参数值
<sql:query var="rs" dataSource="datasource" >
select * from storee where stor_id=? and stor_name=?
<sql:param value="10">
<sql:param value="wzk">
</sql:query>
五> sql:dateParam
------------------
[作用:] 设置日期格式 使用方法和<sql:param>完全相同
<sql:dateParam value="value" [type="{timestamp|time|date}" />
///其中timestamp是日期加时间的完整格式
六> sql:transaction
--------------------
[作用:]看到名称就是处理事务的
<sql:transaction [isolation="{read_uncommitted|read_committed|repeatable_read|serializable}"] [dataSource="datasource"]>
数据库操作
</sql:transaction>
<sql:transaction dataSource="${database}">
<sql:update>
更新数据库语句
</sql:update>
<sql:query>
查询数据库语句
</sql:query>
</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>
<x:parse {doc="xmldoc" | xml="xmldoc"} {var="varName"} [scope="{page|request|session|application}"] | {varDom="varName" |
[scope="{page|request|session|application}"] } [systemId="systemId"] [filter="filter"] />
[解释:]doc或xml指明了要处理的XML文档,解析以后的文档放在变量VAR中, 如果是以DOM的方式解析XML文档,则解析后的文档放在变量varDom中
2>
<x:parse { var="varName" [scope="{page|request|session|application}"]|
varDom="varName"[scope="{page|request|session|application}"] }
[systemId="systemId"] [filter="filter"]XML文档内容
</x:parse>
[区别:]不用指定相应的XML文档,而是直接把XML文档的内容写在中间
它的例子与下面的 x:out 一起介绍
二> x:out
--------------
[作用:] XML文档经 x:parse解析后就由 x:out来进行输出各个结点
<x:out select="node" [escapeXML="{true|false}"] />
[解释:] 其中node是xml文档定位的表达式,这里使用 XPath的语法[一种定位XML节点的语言]
举例: 假设XML文档的内容如下:
<?xml version="1.0" encoding="gb2312"?>
<students>
<student>
<name>Bill</name>
<age>23</age>
<sex>boy</sex>
</student>
</students>
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
<font size="2">
<c:out value="<x:Parse>、<x:out>标签示例"/><br>
<c:import var="doc" url="Students.xml" charEncoding="gb2312"/> ///以后就用doc这个变量名代表这个XML文档
<x:parse var="studentDoc" doc="${doc}"/> ///通过${doc}来解析该文档,并把解析后的文档放到变量studentDoc中
<c:out value="学生姓名:"/>
<x:out select="$studentDoc/students/student/name"/><br> ///取某个结点值 [该方法就是所谓的 XPath语法]
<c:out value="学生年龄:"/>
<x:out select="$studentDoc/students/student/age"/><br>
<c:out value="学生性别:"/>
<x:out select="$studentDoc/students/student/sex"/><br>
</font>
三> x:set
----------
把XML中某个结点的内容赋值到一个变量中
<x:set select ="node" var="varName" [scope="{page|request|session|application}"] />
[解释:] node是其一个结点[这是一个XPath表达式], varName就是用来接受该节点内容的变量
[切记:] 若想用x:set这个标签,必须先对XML文档进行解析,不然这里的XPath表达式不能生效
四> x:if
---------
和c:if有相似之处,只是这里的判断条件变成了XPath表达式[即:判断在XML文档中是否有满足该表达式的节点]
[两种用法]
1>
<x:if select ="node" var="varName" [scope="{page|request|session|application}"] />
[注:] 其中node 就是XPath表达式, 如果文档中存在该结点,则varName的值为true,否则为false
2>
<x:if select ="node" var="varName" [scope="{page|request|session|application}"] >
判断条件成立时执行的操作
</x:if>
[两者区别仅仅是第二个方法可以进行进一步的操作]
五> x:choose, x:when, x:otherwise [三者同时用,与上面的核心库用法完全一样,可是判断条件变成了XPath表达式而以]
-----------------------------------
六> x:forEach
--------------
[作用:] 对XML文档进行遍历
例子:
<?xml version="1.0" encoding="gb2312"?>
<teachers>
<teacher>
<name>Bill</name>
<age>26</age>
<sex>boy</sex>
</teacher>
<teacher>
<name>Jack</name>
<age>33</age>
<sex>girl</sex>
</teacher>
</teachers>
遍历的方法是:
<c:import var="doc" url="Teachers.xml" charEncoding="gb2312"/> ////注意这一行代码,和C接合用
<x:parse var="teacherDoc" doc="${doc}"/> ///进行解析
<x:forEach select="$teacherDoc//teacher" varStatus="status">//开始进行循环 [注意status的巨大作用!!!]
//[$teacherDoc//teacher含义:取出所以名为teacher的节点]
<c:out value="第${status.count}个老师:"/>
<c:out value="姓名 "/>
<x:out select="name"/> ///注意: 取出父结点后,可以直接通过名称取出其子结点的内容
<c:out value="年龄 "/>
<x:out select="age"/>
<c:out value="性别 "/>
<x:out select="sex"/><br>
</x:forEach>
第四大类:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
一> 国际化标签
---------------------
对于数字和货币等的表示,各个国家是有所不同的,在JSTL中提供情报了这样的标签,可以用来处理这些国际化带来的问题
例子:
<font size="2">
<fmt:setLocale value="en-US" /> ///在美国
美国:<br>
数字格式:<fmt:formatNumber value="123456789" /><br>
百分数格式:<fmt:formatNumber type="percent">123456789</fmt:formatNumber><br>
货币格式<fmt:formatNumber value="12345.67" type="currency" /><br> //[用中国当地的符号,即在数字前加一个:$]
<fmt:setLocale value="zh_CN" /> ///在中国
中国:<br>
数字格式:<fmt:formatNumber value="123456789" /><br> ///默认是number格式,即一般的数字格式
百分数格式:<fmt:formatNumber type="percent">123456789</fmt:formatNumber><br> //表示用百分数
货币格式<fmt:formatNumber value="12345.67" type="currency" /><br> //[用中国当地的符号,即在数字前加一个:¥]
</font>
[注:] type的值可以为: currency,number,percent
二> 日期格式标签
-----------------
例子:
<font size="2">
<c:set var="date" value="<%=new java.util.Date()%>"/> ///得到当前时间
<fmt:formatDate value="${date}" pattern="yyyy年MM月dd日" type="date" dateStyle="full"/><br>
////取出日期,按相应格式输出
<fmt:formatDate value="${date}" pattern="HH:mm:ss" type="time" timeStyle="full"/><br>
<fmt:formatDate value="${date}" pattern="yyyy年MM月dd日 HH:mm:ss" type="both" dateStyle="full" timeStyle="full"/><br>
<fmt:formatDate value="${date}" type="both" timeStyle="full" var="formatted"/>
<fmt:parseDate value="${formatted}" type="both" timeStyle="full" timeZone="GMT" var="parsed"/>
///上面这行代码,把formatted变量的值转化成一个日期型号的变量 ,把解析的结果放在parsed变量中
<c:out value="${parsed}"/><br>
</font>
[执行结果:]
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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
////正文开始
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
////上面两行说明版本问题,第二句说明该标签库要求的JSP版本为 1.2
<short-name>dateTagExample</short-name>
<uri>/mytags</uri>
////真正开始
<tag>
<name>date</name> //标签名 [也即在JSP页面上访问的名称为:date]
<tag-class>taglibs.DateTag</tag-class> ///这里指明了该标签的处理功能类
<body-content>empty</body-content>
</tag>
</taglib>
[注意:] 每个标签库可以包含一组标签,也可以只描述一个标签,一般情况下,把一组功能类似的标签旋转在一个标签库中...
[若有多个标签时,只要多加几<tag>节点即可]
JSP页面上应用刚才那个标签
<%@ taglib uri="/WEB-INF/datetag.tld" prefix="mytags" %>
应用: 下面是使用自定义标签输出的内容:<br> <mytags:date/>
相关推荐
<c:catch var="e"> <%=10/1 %></c:catch> <c:out value="${e}">没有出现异常</c:out> ``` 3. **条件标签** - **`<c:if>`**:进行条件判断,当条件满足时执行标签体。 示例: ```html <c:if test="${1==1}">...
<c:set var="str1" value="123"></c:set> <c:set var="str2" value="123"></c:set> <c:if test="${str1 == str2}"> <c:out value="相等" /> </c:if> ``` 这相当于Java中的`if`语句,检查`str1`和`str2`是否相等。 ...
<c:set var="currentPage" value="${pageNum }"></c:set> </c:if> <c:set var="currentPage" value="${currentPage}" scope="session" /> <!-- 循环查找记录 --> <c:forEach var="row" items="${rs.rows}" ...
<c:set var="ip" value="localhost"/> <c:set var="port" value="3306"/> <c:set var="user" value="root"/> <c:set var="pwd" value=""/> <c:set var="db" value="demo"/> <c:set var="table" value="student...
本文将详细介绍JSTL中的核心标签:<c:if>、<c:choose>、<c:forEach>、<c:forTokens>、<c:catch>、<c:remove>、<c:set>、<c:import>、<c:redirect>、<c:url>以及与之相关的<fmt>标签库。 #### 1. <c:if> <c:if>标签...
<c:set var="name" value="chengguoyong" /> <c:out value="${name}" /> <c:set target="${sessionScope.user}" property="name" value="chengguoyong" /> ``` 3. **<c:remove>`标签**: - 用于删除指定作用域...
- 示例:`<c:set var="username" value="admin" scope="session"/>` 设置 session 范围内的变量 username 为 admin。 - `<c:remove>`:移除指定作用域内的变量。 - 示例:`<c:remove var="username" scope=...
异常信息:<c:out value="${error.message}"></c:out> ``` 这里捕获了一个除零错误,并将其信息存储在变量`error`中。 #### 条件控制语句:实现逻辑判断与分支 1. **`<c:if>`**:基于条件的分支。例如,`<c:if ...
count 的值是:<c:out value="${count}"/></font> </body> </html> ``` 通过使用这些条件标签,开发者可以避免在JSP页面中直接使用脚本let,从而使页面更专注于表现层,降低代码的耦合度,提高可维护性和可读性...
以上只是JSTL 1.2语法的一部分,实际上还有更多的标签和功能,如循环标签(`<c:forEach>`、`<c:forTokens>`)、条件操作(`<c:if>`、`<c:choose>`等)、URL操作(`<c:url>`、`<c:redirect>`)等,它们极大地简化了...
<c:set var="sum" value="${sum + i}" /> </c:forEach> <c:out value="sum=${sum}" /> ``` - 遍历集合或数组 ```jsp <% String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"}; pageContext....
本文将深入探讨JSTL的核心标签库(core tag library),主要包括`<c:set>`、`<c:remove>`、`<c:catch>`、`<c:if>`、`<c:choose>`以及`<c:forEach>`等标签的使用。 1. `<c:set>`标签: `<c:set>`用于设置变量的值,...
<c:set var="variableName" value="value" scope="scope"/> ``` - **示例**: ```jsp <c:set var="username" value="lisi" scope="session"/> ``` 这行代码将在`session`作用域中设置一个名为`username`的变量...
<c:set var="myVar" value="Hello, World!" scope="request"/> ``` ### 2. `<c:out>`标签 `<c:out>`用于安全地输出数据,防止跨站脚本攻击(XSS)。它会自动转义HTML特殊字符。 ```jsp <c:out value="${myVar}"/> ``...
<c:set value="hellking" var="userName" scope="page"/> <c:out value="${userName}"/> <c:set var="name"> value </c:set> <c:out value="${name}"/> <jsp:useBean id="test" class="com.test.Demo"/> <c:set ...
<c:set var="count" value="0" /> ``` 创建一个名为`count`的变量,并将其值初始化为0。 3. `<c:forEach>`:遍历集合或数组。例如: ```jsp <c:forEach items="${users}" var="user"> <p>${user.name}</p> </c:...
例如:`<c:set var="name" value="John Doe"/>`,这样就在页面作用域内创建了一个名为`name`的变量。 3. `<c:remove>` 这个标签用于删除已设置的变量。如:`<c:remove var="name"/>`,这将移除之前通过`<c:set>`...
<c:set var="data" value="${data[status.index + 1..]}"/> </c:if> </c:forEach> </table> <%-- 方法allCellsEqual未展示,需要自行实现,检查行中所有单元格是否相同 --%> ``` 这两种方法都有其适用场景,第...