JSTL详解--搜集整理方便查阅
JSTL详解(一)?
一般用途的标签?
在JSTL中,一般用途的标签只要是指具有输出,设置变量,和错误处理等功能的标签,他们在jsp中使用很频繁,它们有:?

- l?????????<c:out>??
- 2?????????<c:set>??
- 3?????????<c:remove>??
- 4?????????<c:catch>??
下面,我来讲述一下他们的作用:?
<c:out>?
它是一个输出的标签,负责把计算出的结果输出到jspwriter,就跟调用out.println()基本一样。没有BODY的时候,使用下面的语法:?

- <c:out?value=”value”??[escapeXml]=”{true|false}”??[default=”defaultValue”]/>??
有BODY的时候,使用下面的语法:?

- <c:out?value=”value”??[escapeXml]=”{true|false}”?>??
- ???????这里是BODY,可以是任何合法的jsp或者是html代码。??
- </c:out>??
注意,escapeXml的作用是是否将代码交给xml解析器解释,true为交给xml解析器解释,false为交给浏览器解释,见红色部分代码?

- 举例:c_out.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:?c:out的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <hr>??
- <c:set?var="sessionAttr"?value="sessionValue"?scope="session"/>??
- <c:set?var="pageAttr"?value="pageValue"?scope="page"/>??
- <c:set?var="requestAttr"?value="requestValue"?scope="request"/>??
- <c:out?value="以下输出的是前面设置的属性<br>"?[color=red]escapeXml="false"[/color]/>???
- <c:out?value="${sessionAttr}"/>??
- <c:out?value="${pageAttr}"/>??
- <c:out?value="${requestAttr}"/>??
- <c:out?value="${test_nodef}"?default="没有test_nodef这个变量"/>??
- </html>??
<c:set>?
这个标签用于在某个范围(page,request,session,application)里面设置特定的值(默认为page),或者设置某个已经存在的javabean的属性。类似于<%request.setAttribute(“name”,value)%>?
语法:?
1、使用value属性设置一个特定范围里面的属性:?
<c:set value=”value”? var=”varName” [scope= “{page|request|session|application}”]/ >?
2、使用value属性设置一个特定范围里面的属性,带有BODY:?
<c:set value=”value”? var=”varName” [scope= “{page|request|session|application}”] >?
?????? Body content?
</c:set>?
3、设置某个特定对象的一个属性:?
<c:set value=”value”? target=”target”? property=”propertyName”/ >?
4、设置某个特定对象的一个属性, 带有BODY:?
<c:set value=”value”? target=”target”? property=”propertyName” >?
?????? Body content?
</c:set>?

- 举例:c_set.jsp???
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <jsp:useBean?id="user"?class="com.j2ee14.ch12.User"/>??
- <html>??
- <head>??
- ??<title>JSTL:的使用c:set</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <hr>??
- 设置一个属性,然后输出它<br>??
- <c:set?var="maxCount"?value="100"/>??
- <c:out?value="${maxCount}"/>??
- <hr>设置属性时,把它的值放在标签的body中。??
- <c:set?var="password">??
- ksdjfxsdf234234??
- </c:set>??
- <c:out?value="${password}"/>??
- <hr>设置javaBean的属性,然后输出这些属性值:??
- <c:set?value="hellking"?target="${user}"?property="userName"/>??
- userName=<c:out?value="${user.userName}"/>??
- <hr>设置属性,并且指定它们的范围,属性的默认范围是page。??
- <c:set?value="20"?var="maxIdelTime"?scope="session"/>??
- <c:set?value="next.jsp"?var="nextPage"?scope="page"/>??
- </body>??
- </html>??
<c:remove>?
它的作用是删除某个变量或者属性。类似于<%session.removeAttribute(“name”)%>,它的语法是:?
<c:remove var=”varName” [scope= “{page|request|session|application}”]/ >?

- 举例:c_remove.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:c:remove的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:set?value="10000"?var="maxUser"?scope="application"/>??
- <c:set?value="10"?var="count"?scope="session"/>??
- maxUser=<c:out?value="${maxUser}"/><br>??
- count=<c:out?value="${count}"/>??
- <hr>调用c:remove...??
- <c:remove?var="maxUser"?scope="application"/>??
- <c:remove?var="count"/>??
- 调用了c:remove后,参数值为:??
- maxUser=<c:out?value="${maxUser}"/>,??
- count=<c:out?value="${count}"/>,??
- </body>??
- </html>??
JSTL详解(二)?
<c:catch>?
它的作用是捕捉由嵌套在它里面的标签所抛出来的异常。类似于<%try{}catch{}%>,它的语法是:?
<c:catch [var=”varName”]>nested actions</c:catch>?

- 举例:c_catch.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:catch的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:catch?var="error">??
- <%??
- ??Integer.parseInt("sdkfj");??
- ?%>??
- ?</c:catch>??
- ?<hr>异常:??
- ?<c:out?value="${error}"/>??
- ?<hr>异常?exception.getMessage=??
- ?<c:out?value="${error.message}"/>??
- <hr>?异常exception.getCause=??
- ?<c:out?value="${error.cause}"/>??
- </body>??
- </html>???
JSTL详解(三)?
条件标签包括以下几种:?
l???????? <c:if>;?
2???????? <c:choose>;?
3???????? <c:when>;?
4???????? <c:otherwise>;?
下面,我来分别介绍:?
l.<c:if>; 它用来做条件判断,功能类似jsp中的<%if(boolean){}%>?
语法:?
1、无body的情况?
<c:if test=”testCondition” var=”varName” [scope=“{page|request|session|application}”]/>?
2、有body的情况?
<c:if test=”testCondition” var=”varName” [scope=“{page|request|session|application}”]>?
?? Body内容?
</c:if>?

- 举例:c_if.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:c:if的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:set?var="count"?value="100"/>??
- <c:if?test="${count>78}">??
- ??count>78??
- </c:if>??
- </body>??
- </html>??
2.<c:choose>;? 它是用于条件选择,和<c:when>,<c:otherwise>一起使用,它的条件选择是排斥性的,相当于jsp中的<%switch(i){case 0: … case 1:… default :}%>,也可以完成<%if{}…else if{}….else if{} else{} %>的功能?
语法:<c:choose>?
???????????? Body内容(<c:when>,<c:otherwise>)?
????? </c:choose>?
注意:它的body内容只能是由以下的元素组成:?
1.空格;?
2.0个或多个<c:when>子标签,<c:when>必须在<c:otherwise>子标签之前出现;?
3.0个或多个<c: otherwise >子标签?
<c:when> 它是<c:choose>的一个分支?
语法:?
<c:when test=”testCondition”>?
?? Body内容?
</c:when>?
注意:它有两个限制:?
1.必须以<c:choose>作为它的父标签?
2.必须在<c:otherwise>标签之前出现?
<c:otherwise>他代表了<c:choose>的最后选择相当于jsp的<%switch(i){case 0: … case 1:… default :}%> 中的default语句。?
语法:?
<c:otherwise>?
?? Conditional block?
</c:otherwise>?
它的使用有两个限制:?
1.必须以<c:choose>作为它的父标签;?
2.必须以<c:choose>的最后分支方式出现;?
<c:choose>,<c:otherwise>,<c:when>?

- 举例:c_choose.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <c:set?var="count"?value="100"/>??
- <html>??
- <head>??
- ??<title>JSTL:c:choose的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:choose>??
- ????<c:when?test="${count?<=0}">??
- ??????<font?color="blue">??
- ????</c:when>??
- ????<c:when?test="${count<=60&&count>0}">??
- ??????<font?color="red">??
- ????</c:when>??
- ????<c:otherwise>??
- ??????<font?color="green">???
- ????</c:otherwise>?????????
- ??</c:choose>??
- count的值是:<c:out?value="${count}"/>??
- </font>??
- </body>??
- </html>??
JSTL详解(四)?
迭代标签的使用?
如果使用scriptlets,那么,我们经常使用Iterator或者Enumeration来进行迭代,如:?
?????? Iterator it = collection.iterator();?
?????? while(it.hasNext()){?
????????????? SomeBean someBean = (SomeBean)it.next();?
????????????? out.println(someBean.getXXX());?
????????????? …………..?
}?
在前面的一次中,我们开发过一个迭代标签,JSTL中也提供了对迭代进行支持的标签,并且,他的功能比上一章的强大的多。JSTL中的迭代标签有两个:?
1.<c:forEach>;?
2.<c:forTokens>;?
1、<c:forTokens>专门处理TokenString的迭代,可以指定一个或者是多个分隔符。由于他们使用的很少,在这里就不介绍了。?
2、<c:forEach>是最常用的,他几乎能够完成所有的迭代任务,就象jsp中的for(int i=j;i<k;i++)下面我来详细介绍。(注意,“[]”里面的是可选条件)?
语法:a、在Collection中迭代:?
?????? <c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>?
?????? Body 内容?
?????? </c:forEach>?
????? b、迭代固定的次数:?
?????? <c:forEach [var=”varName”] [varStatus=”varStatusName”]? begin=”begin” end=”end” [step=”step”]>?
?????? Body 内容?
?????? </c:forEach>?

- 举例:c_forEach1.jsp(在Collection中迭代)??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>???
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>???
- <%@?page?import="java.util.*,com.j2ee14.ch12.User"%>???
- <%???
- ???Collection?users_c=new?ArrayList();???
- ???for(int?i=0;i<3;i++)???
- ???{???
- ??????User?user=new?User();???
- ??????user.setUserName("foo"+i);???
- ??????user.setPassword("foo"+i);?????????
- ??????users_c.add(user);???
- ???}???
- ???session.setAttribute("users",users_c);???
- %>???
- <html>???
- <head>???
- ??<title>JSTL:c:forEach的使用之一</title>???
- </head>???
- <body?bgcolor="#FFFFFF"><center>???
- <h4>迭代某个collection中的元素。</h4>???
- <table?border=1>???
- <tr><td>用户名</td><td>密码</td></tr>???
- <c:forEach?var="users"?items="${users}">???
- ??<tr>???
- ??<td><c:out?value="${users.userName}"/></td>???
- ??<td><c:out?value="${users.password}"/></td>???
- ??</tr>???
- </c:forEach>???
- </table>?????
- </center>??
- </body>???
- </html>??

- 举例:c_forEach2.jsp(迭代固定的次数)??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>???
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>???
- <html>???
- <head>???
- ??<tcounttle>JSTL:c:forEach的使用之二</tcounttle>???
- </head>???
- <body?bgcolor="#FFFFFF"><center>???
- <h4>第二种迭代:50-60</h4>???
- <c:forEach?var="count"?begin="50"?end="60">???
- ??<c:out?value="${count}"/>?**???
- </c:forEach>???
- ??
- <h4>第二种迭代:10?to?100,step=10</h4>???
- <c:forEach?var="count"?begin="10"?end="100"?step="10">???
- ??<c:out?value="${count}"/>**???
- </c:forEach>???
- </center>???
- </body>???
- </html>??
JSTL详解(五)?
首先,感谢大家的关注,下面我来继续讲解:URL相关的标签,他们的作用主要是负责页面的导航、重定向、资源的获得以及参数的传递等等,他们有:?
1.<c:import>?
2.<c:redirect>?
3.<c:url>?
4.<c:param>?
<c:import>?
作用:导入一个url的资源,相当于jsp 中的<jsp:include page=”path”>标签,同样也可以把参数传递到被导入的页面。?
语法:a、资源的内容使用string对象向外暴露?
<c:import url=”url” [context=”context”] [var=”varName”] [scope=”{page|request|session|application}”] [charEncoding=”charEncoding”]>?
Optional body content for <c:param> subtags?
</c:import>?
b、资源的内容使用redirect对象向外暴露?
<c:import url=”url” [context=”context”] varReader=”varReaderName” [charEncoding=”charEncoding”]>?
Body content where varReader is consumed by another action?
</c:import>?

- 举例:c_import.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:c:import的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <h3>绝对路径?URL</h3>??
- <blockquote>??
- <ex:escapeHtml>??
- ??<c:import?url="http://127.0.0.1:8080/ch12/footer.jsp"/>??
- </ex:escapeHtml>??
- </blockquote>??
- ??
- <h3>相对路径并且传递参数到指定的URL</h3>??
- <blockquote>??
- ??<c:import?url="footer.jsp"?charEncoding="gb2312">??
- ??<c:param?name="userName"?value="hellking"/>??
- ?</c:import>????
- </blockquote>??
- </body>??
- </html>??
<c:redirect>?
作用:把客户的请求发送到另一个资源,相当于jsp中的<% request.sendRedirect(“other.jsp”)%>或者servlet中的RequestDispatch.forward(“other.jsp”)的功能。?
语法:a、没有body的情况?
????? <c:redirect url=”value” [context=”context”]/>?
????? b、有body,在body 中查询指定的参数?
????? <c:redirect url=”value” [context=”context”]>?
???????? <c:param> subtags?
????? </c:redirect>?

- 举例:c:redirect.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:c:redirect的使用</title>??
- </head>??
- <body?bgcolor="#cc99cc">??
- <c:url?value="footer.jsp"?var="nextpage">??
- ???<c:param?name="userName"?value="hellking"/>??
- </c:url>??
- <c:redirect?url="${nextpage}"/>??
- </body>??
- </html>??
<c:url>?
作用:用于构造URL,主要的用途是URL的重写。?
语法:a、没有body的情况?
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page|request|session|application}”]/>?
????? b、有body ,并在body 中有重写的参数?
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”{page|request|session|application}”]>?
<c:param> subtags?
</c:url>?

- 举例:c_url.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL?c:url?的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:url?var="footer"?value="footer.jsp"?scope="page">??
- ???????<c:param?name="id"?value="hellking"/>??
- </c:url>??
- ??
- <c:out?value="${footer}"/>??
- <br>另一种没有参数的URL<br>??
- <c:url?value="footer.jsp"/>??
- </body>??
- </html>??
<c:param>?
作用:它是在<c:import>,<c:redirectt>,<c:url>中添加请求的参数。和一般的参数没什么区别。?
语法:a、参数的值使用value属性指定?
<c:param name=”name” value=”value”/>?
???? b、参数的值在body 中指定?
<c:param name=”name”>?
?? 参数值?
</c:param>?

- 举例:c_param.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jstl/core"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL?c:param的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <c:redirect?url="footer.jsp">??
- ???<c:param?name="userName">??
- ???hellking??
- ???</c:param>??
- </c:redirect>??
- </body>??
- </html>??
JSTL详解(六) 格式化标签?
<fmt: formatNumber value =”12.3” pattern=”.000”/>?
将输出 12.300. 应用样式 ”.000”, 将使格式化后的小数部分有 3 位。不足 3 位将以 0 补齐。?
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”date”? pattern="yyyy/M/d" />?
格式化的结果是: 2007-5-27 .?
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”time” pattern="hh:mm:ss"/>?
格式化的结果是: 9:25:11?
<fmt:formatDate value=”<%=new java.util.Date() %>” type=”both” />?
格式化的结果是: 2007-5-27 9:25:11?

- 举例:详细的使用如下例??
- <c:set?var="now"?value="<%=new?java.util.Date()%>"?/>??
- <table?border="1"?cellpadding="0"?cellspacing="0"??
- ????style="border-collapse:?collapse"?bordercolor="#111111"?width="63%"?id="AutoNumber2">??
- ??????<tr>??
- ????????<td?width="100%"?colspan="2"?bgcolor="#0000FF">??
- ??????????<p?align="center">??
- ????????????<b><font?color="#FFFFFF"?size="4">??
- ????????Formatting:<fmt:formatDate?value="${now}"?type="both"?timeStyle="long"?dateStyle="long"?/>??
- ??????????????</font>??
- ????????????</b>??
- ??????????</p>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">formatDate?type="time"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="time"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="date"</td>??
- ????????<td?width="49%"><fmt:formatDate?type="date"?value="${now}"?/></td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"</td>??
- ????????<td?width="49%"><fmt:formatDate?type="both"?value="${now}"?/></td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"?dateStyle="default"?timeStyle="default"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="both"?dateStyle="default"?timeStyle="default"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"?dateStyle="short"?timeStyle="short"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="both"?dateStyle="short"?timeStyle="short"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"?dateStyle="medium"??timeStyle="medium"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="both"?dateStyle="medium"??timeStyle="medium"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"?dateStyle="long"???timeStyle="long"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="both"?dateStyle="long"?timeStyle="long"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">type="both"?dateStyle="full"?timeStyle="full"</td>??
- ????????<td?width="49%">??
- ??????????<fmt:formatDate?type="both"?dateStyle="full"?timeStyle="full"?value="${now}"?/>??
- ????????</td>??
- ??????</tr>??
- ??????<tr>??
- ????????<td?width="51%">pattern="yyyy-MM-dd"</td>??
- ????????<td?width="49%"><fmt:formatDate?pattern="yyyy-MM-dd"?value="${now}"?/></td>??
- ??????</tr>??
- ????</table>??
??
补充知识点:?
1. 替换 request.getParameter("test"):?
<c:if test="${param.test!=null}" >?
<c:out value="${param.test}" />?
</c:if>?
2. <c:redirect url="a.jsp">?
3.<c:redirect url="/max.jsp" context="/ch16">?
<c:param name="name1" value="665"/>?
<c:param name="name3" value=" 斯蒂芬 "/>?
</c:redirect>?
4.<c:forTokens items="zhangsan:lisi:as" delims=":" var="name">?
${name}?
</c:forTokens>?
JSTL详解(七) SQL相关的标签?
今天,我来讲解下一些很重要的jstl标签,如果运用得当,可以大大的简化数据库的操作,减少代码量。首先sql标签可以实现包括查询、更新、事务处理和设置数据源等强大的功能。下面分别讲述。?
<sql:setDataSource>?
<sql:query>?
<sql:update>?
<sql:transaction>?
<sql:param>?
<sql:setDataSource>?
语法:<sql:setDataSource>用来设置数据源,可以通过scope设置使用范围,如page、application、session等。有两种方式可以设置数据源,一种是直接使用在web中配置的数据源,只要指定jndi名就可以了(这个就不要我多讲了吧,呵呵),第二种是指定所有的连接属性。?
???? <sql:setDataSource?
???? {dataSource=”dataSourceName” |?? url=”jdbcurl”?
???? [driver=”driverClassName”]?
???? [user=”userName”]?
???? [password=”password”]?
???? [var=”varName”]?
???? [scope=”{page|session|request|application}”]/>?

- 举例:sql_datasource.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jstl/core"?%>??
- <%@?taglib?prefix="sql"?uri="http://java.sun.com/jstl/sql"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:<sql:setDataSource>的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- 创建普通的数据源:<br>??
- <sql:setDataSource??
- ??var="ds1"??
- ??driver="com.mysql.jdbc.Driver"??
- ??url="jdbc:mysql://localhost:3306/jstlTest"??
- ??user="jstl"??
- ??password="jstl"??
- />??
- 从jndi名称空间中获得一个数据源。<br>??
- <sql:setDataSource??var="ds2"??dataSource="jdbc/ds2"/>??
- </body>??
- </html>??
<sql:query>?
作用:不用说都知道了,数据库操作中最频繁的查询。?
语法:a、没有body?
???????? <sql:query sql=”sqlQuery”?
???????? Var=”varName” [scope=”{page|session|request|application}”]?
???????? [dataSource=”dataSourceName”]?
???????? [maxRows=”maxRows”]?
???????? [startRow=”startRow”] />?
????? b、有一个body ,并在body 中指定了查询需要的参数?
???????? <sql:query sql=”sqlQuery”?
???????? Var=”varName” [scope=”{page|session|request|application}”]?
???????? [dataSource=”dataSourceName”]?
???????? [maxRows=”maxRows”]?
???????? [startRow=”startRow”] >?
???????? <sql:param> actions?
???????? </sql:query>?
????? c、有body,并且可以指定可选的参数(< sql:param >在后面讲述)?
???????? <sql:query sql=”sqlQuery”?
???????? Var=”varName” [scope=”{page|session|request|application}”]?
???????? [dataSource=”dataSourceName”]?
???????? [maxRows=”maxRows”]?
???????? [startRow=”startRow”] >?
???????? query?
???????? optional<sql:param> actions?
???????? </sql:query>?

- 举例:sql_query.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>??
- <%@?taglib?prefix="sql"?uri="http://java.sun.com/jsp/jstl/sql"?%>??
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>??
- <html>??
- <head>??
- ??<title>JSTL:<sql:query>的使用</title>??
- </head>??
- <body?bgcolor="#FFFFFF">??
- <sql:setDataSource??var="ds2"??dataSource="jdbc/ch12"/>??
- 第一种查询:<hr>??
- <sql:query?var="query"?dataSource="${ds2}">??
- ????SELECT?*?FROM?sql_test??
- </sql:query>??
- <table?border="1">??
- ??<c:forEach?var="row"?items="${query.rows}">??
- ??<tr>??
- ????<td>Name:?<c:out?value="${row.id}"/></td>??
- ????<td>mobile:?<c:out?value="${row.power}"/></td>??
- ??</tr>??
- ??</c:forEach>??
- </table>??
- ??
- <hr>??
- 第2种查询:<hr>??
- <sql:query?var="query2"?sql="SELECT?*?FROM?sql_test?where?id=?"?dataSource="${ds2}">??
- ???<sql:param?value="01"/>??
- </sql:query>??
- <table?border="1">??
- ??<c:forEach?var="row"?items="${query2.rows}">??
- ??<tr>??
- ????<td>Name:?<c:out?value="${row.id}"/></td>??
- ????<td>mobile:?<c:out?value="${row.power}"/></td>??
- ??</tr>??
- ??</c:forEach>??
- </table>??
- </body>??
- </html>??
JSTL详解 (八)SQL相关的标签(二)?
<sql:update>?
作用:主要是执行插入、更新和删除操作的标签。另外,还有一些没有返回结果集的sql操作也可以使用这个标签。比如?
create table tableName(id int….);?
drop table tableName?
grant tableName?? 等等。。?
语法:a、没有body的情况?
<sql:update sql=”sqlUpdate”?
[dataSource=”dataSource”]?
[var=”varName”]?
[scope=”{page|session|request|application}”]/>?
????? b、有body ,并且在body中指定参数?
<sql:update sql=”sqlUpdate”?
[dataSource=”dataSource”]?
[var=”varName”]?
[scope=”{page|session|request|application}”] >?
<sql:param>? actions?
</sql:update>?
???? c、有body,在body中指定sql语句和可选的参数?
<sql:update sql=”sqlUpdate”?
[dataSource=”dataSource”]?
[var=”varName”]?
[scope=”{page|session|request|application}”] >?
Update statement?
<sql:param>? actions?
</sql:update>?

- 举例:sql_update.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>???
- <%@?taglib?prefix="sql"?uri="http://java.sun.com/jsp/jstl/sql"?%>???
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>???
- <html>???
- <head>???
- ??<title>JSTL:的使用</title>???
- </head>???
- <sql:setDataSource???var="ds2"???dataSource="jdbc/ch12"?/>???
- 更新记录值1<hr>???
- <sql:update?var="update1"?dataSource="${ds2}">???
- ????update?sql_test?set?power='low'?where?id=01???
- </sql:update>???
- ??
- 第2种更新:创建表<hr>???
- <sql:update?var="update4"?sql="create?table?sql_temp_901(test?varchar(20))"?dataSource="${ds2}"/>?????
- ??
- 第3种更新:增加记录???
- <sql:update?var="update5"?sql="insert?into?sql_temp_901?values('hellking')"?dataSource="${ds2}"/>???
- ??
- 第4种更新:删除记录<hr>???
- <sql:update?var="update6"?sql="delete?from?sql_temp_901?where?test='hellking'"?dataSource="${ds2}"/>?????
- ??
- 第5种更新:删除表<hr>???
- <sql:update?var="update7"?sql="drop?table?sql_temp_901"?dataSource="${ds2}"/>???
- </body>???
- </html>??
<sql:transaction>?
作用:用语事务处理,它为<sql:query>和<sql:update>建立事务处理上下文,并且提供相同的数据源。?
语法:<sql:transation [dataSource=”dataSourceName”]>?
????? [isolation=”isolationLevel”]>?
????? <sql:query> and <sql:update> statement?
????? </sql:transation>?
????? isolationLevel ::=”read_committed”?
????? |”read_uncommitted”?
????? |”repeatable_read”?
????? |”serializable”?
注意:DataSource属性和其他标签的DataSource属性一样,isolactionlevel属性指定事务隔离的级别,如果没有指定它的值,那么就使用自己配置的DataSource事务隔离级别。而且,嵌套在里面的<sql:query> 和 <sql:update>标签不能再指定其他的数据源。<sql:transaction>?
是数据库封装的轻量级事务处理,如果你需要复杂的事务处理或者分布试处理,它就不适合。?

- 举例:sql_transaction.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>???
- <%@?taglib?prefix="sql"?uri="http://java.sun.com/jsp/jstl/sql"?%>???
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>???
- <html>???
- <head>???
- ??<title>JSTL:sql:transaction的使用</title>???
- </head>???
- <sql:setDataSource???var="ds2"??dataSource="jdbc/ch12"?/>???
- <h2>使用事务处理方式创建一个表:</h2>???
- <sql:transaction?dataSource="${ds2}">???
- ??<sql:update?var="test_temp902">???
- ????create?table?test_temp902?(???
- ??????id?int?primary?key,???
- ??????name?varchar(80)???
- ????)???
- ??</sql:update>???
- ??<sql:update?sql="insert?into?test_temp902?values(01,'wyy')"/>???
- ??<sql:update?sql="update?sql_test?set?power='wyy'?where?id=01"/>???
- </sql:transaction>???
- </body>???
- </html>??
<sql:param>?
作用:设置sql语句中“?”表示的占位符号的值。?
语法:a、没有body,使用value指定。?
???????? <sql:param value=”value”/>?
????? b、在body中指定?
???????? <sql:param>?
???????? 参数值?
???????? </sql:param>?

- 举例:sql_param.jsp??
- <%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>???
- <%@?taglib?prefix="sql"?uri="http://java.sun.com/jsp/jstl/sql"?%>???
- <%@?page?contentType="text/html;?charset=gb2312"?language="java"?%>???
- <html>???
- <head>???
- ??<title>JSTL:sql:param的使用</title>???
- </head>???
- <sql:setDataSource???
- ??var="example"???
- ??dataSource="jdbc/ch12"???
- />???
- 执行更新操作:<hr>???
- <sql:update?var="update2"?sql="update?sql_test?set?power=??where?id=?"?dataSource="${example}">???
- ???<sql:param?value="high"/>???
- ???<sql:param?value="01"/>???
- </sql:update>???
- </body>???
- </html>??
JSTL详解(九) fn标签使用说明?
??? 在jsp页面上经常遇到得到集合长度、字符长度、字符切取等应用需,在2.0以前这种需是许多程序员对JSTL及为不满意的地方之一。为此在2.0 中添加了functions标签,其提供对以上需求的支持。?
使用方法???? 引用<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>?
函数说明:?????
??
例:邮箱省略显示 如smile2008@163.com --->显示成sm******@163.com?
${fn:substring(userinfo.email,0,2)}******${fn:substring(userinfo.email,fn:indexOf(userinfo.email, '@'),fn:length(userinfo.email))}?