JSTL常用标签

来源:互联网 发布:问道手游刷元宝软件 编辑:程序博客网 时间:2024/05/18 01:25
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,current,step,begin,end等属性] 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> 第三大类: 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/> 

0 0
原创粉丝点击