[学习笔记]JSTL使用总结(1)

来源:互联网 发布:pdg2pic mac 编辑:程序博客网 时间:2024/06/03 16:35

JSTL是JSP的标准标签库,他提供了许多非常实用的功能,免去了我们自定义标签的麻烦,从而达到在JSP页面中无Scriptlet的效果。

JSTL只是方便了我们开发,如果不使用,并不会妨碍我们开发,一般JSTL是与表达式语言一起使用的。

JSTL1.2的包在MyEclipse中配置struts时能够取得。


一、JSTL配置


把JSTL.jar放入tomcat\lib中,并把JSTL.jar中的tld文件放入WEB-INF中,他所提供的tld文件有:

(1)c.tld 核心标签库,提供比如迭代输出等操作。

(2)fmt.tld 格式化操作。

(3)sql.tld 提供sql查询、更新等操作。

(4)x.tld 提供xml的操作。

(5)fn.tld 提供字符串的函数操作,比如contains、startsWith等操作。


二、核心标签库


1.<c:out>


用于输出,一般结构如下:<c:out value="   "    escapeXml="    " default="     "/>

value表示需要输出的值;

escapeXml表示是否需要将类似<转为"&lt";

default表示如果value为null,则输出此语句;


2.<c:set>


用于设置内置对象属性或自定义对象属性,一般结构如下:

(1)<c:set var="    "   value="     "  scope="     "/>

var表示属性的名称;

value表示属性的值;

scope表示存储的范围;

(2)<c:set target="    "  property="    "    value="    "/>

target表示对象名称;

property表示属性名称;

value表示属性的值;


3.<c:remove>


用于移除内置对象属性;一般结构如下:

<c:remove var="    "   scope="     "/>

var表示属性名称;

scope表示属性范围;


4.<c:catch>


用于捕获异常,类似try - catch;一般结构如下:

<c:catch var="    ">

语句

</c:catch>

var用来保存异常的信息;


5.<c:if>


类似if语句,一般结构如下:

<c:if test="     "   var="    "    scope="     ">

执行语句

</c:if>

test 表示判断;

var表示保存判断结果;

scope表示结果保存范围;


6.<c:choose>


用于多重判断;一般结构如下:

<c:choose>

<c:when test = "    ">   <!--用于判断 -->

语句

</c:when>

<c:when test = "    ">

语句

</c:when>

<c:otherwise> <!--当全部的when不成立时,进入 -->

语句

</c:otherwise>

</c:choose>


7.<forEach>


用于迭代输出;一般结构如下:

<c:forEach items="    "    var= "   "    [ begin="    " ]    [ end="     " ]   [   step="    "   ]>

${var}

</c:forEach>

items表示输出的集合;

var表示迭代器的元素;

begin表示从哪个索引开始;

end表示到哪个索引结束;

step表示输出的间隔;


8.<c:forTokens>


用于分隔字符串并迭代输出;一般结构如下:

<c:forTokens items="   "    delims="    "   var="    ">

${var}

</c:forTokens>

items表示字符串;

delims表示分隔符;

var表示迭代器;


9.<c:redirect>


用于客户端跳转,一般结构如下:

<c:redirect url="    " >

<c:param name="   "  value="    "/>     可以传递参数;

</c:redirect>


10.<c:import>


包含某个网页,一般结构如下: 

<c:import url="   "  charEncoding="    " var="     ">

<c:param name="   "  value="   "/>

</c:import>

var表示保存的导入内容对象。

代码实例:

[html] view plain copy
  1. <%@ page contentType="text/html" pageEncoding="GBK" import="java.util.*"%>  
  2. <%@ taglib prefix="c" uri="jstl/c"%>  
  3. <jsp:useBean id="per" class="org.person.Person" scope="page"/>  
  4. <html>  
  5.     <head>  
  6.         <title></title>  
  7.     </head>  
  8.     <body>  
  9.     <%  
  10.         per.setName("xiazdong");  
  11.         per.setAge(20);  
  12.         pageContext.setAttribute("per",per);  
  13.     %>  
  14.     <c:out value="${per}" escapeXml="true" default="无内容"/>  
  15.     <c:out value="xiazdong"/>  
  16.       
  17.     <c:set var="name" value="xiazdong" />  
  18.     <h3>姓名:${name}</h3>  
  19.     <c:set target="${per}" property="name" value="yxWang"/>  
  20.     <c:out value="${per}" escapeXml="true" default="无内容"/>  
  21.     <!--设定属性并删除 -->  
  22.     <c:set var="attr" value="tmp" scope="request"/>  
  23.     <h3>属性为:${attr}</h3>  
  24.     <c:remove var="attr" scope="request"/>  
  25.     <h3>删除后,属性为:${attr}</h3>  
  26.     <c:if test="${30>10}" var="result" scope="page">  
  27.         <h3>30比10大</h3>  
  28.     </c:if>  
  29.     <%  
  30.         pageContext.setAttribute("num",15);  
  31.     %>  
  32.     <c:choose>  
  33.         <c:when test="${num<15}">  
  34.             <h3>num小于15</h3>  
  35.         </c:when>  
  36.         <c:when test="${num>15}">  
  37.             <h3>num大于15</h3>  
  38.         </c:when>  
  39.         <c:otherwise>  
  40.             <h3>num等于15</h3>  
  41.         </c:otherwise>  
  42.     </c:choose>  
  43.     <%  
  44.         List<String> list = new ArrayList<String>();  
  45.         list.add("A");  
  46.         list.add("B");  
  47.         list.add("C");  
  48.         list.add("D");  
  49.         pageContext.setAttribute("list",list);  
  50.     %>  
  51.     <c:forEach items="${list}" var="iter">  
  52.         ${iter}、  
  53.     </c:forEach>  
  54.     <br />  
  55.     <c:forEach items="${list}" var="iter" begin="2">  
  56.         ${iter}、  
  57.     </c:forEach>  
  58.     <br />  
  59.     <c:forTokens items="a:b:c" delims=":" var="ite">  
  60.         ${ite}、  
  61.     </c:forTokens>  
  62.     <br />  
  63.       
  64.     </body>  
  65. </html>  


三、SQL标签库

 

SQL标签库的作用就是只需要一个标签就可以进行数据库连接、增删改查操作;非常方便,但是违背了MVC设计模式:JSP中只有显示操作。

 

1.<sql:setDataSource>

 

此标签用于进行数据库连接,形如:

<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/xiazdong" user="root" password="12345" var="ds"/>

这样就连接了数据库。

 

2.<sql:query>

 

此标签用于查询,形如:

<sql:query sql="    "   var="result"    dataSource="${ds}"  [startRow="    "]    [ maxRows="    "]/>

var中的result存放了结果,查询后怎么显示呢?

startRow表示开始显示的是第几行。

maxRows表示一页能够显示的行数。

因此这个标签可以用于分页

 

<c:forEach items="${result.rows}" var="iter">

     ${iter.name}

     ${iter.age}

</c:forEach>

即可进行迭代输出.

${result.rowCount}返回行数;

3.<sql:update>

 

此标签用于更新数据库记录,形如:

<sql:update sql="    "  var="result"   dataSource="${ds}"/>

 

4.进行类似PreparedStatement功能

 

PreparedStatement能够通过?进行SQL语句的填充,再通过set进行设置。在JSTL中,也是可以实现的,

通过<sql:param value="    "/>和<sql:dateParam type="date" value="     "/>

形如:

request.setAttribute("n","xiazdong");

<sql:query sql="SELECT name FROM emp WHERE name=?" var="result" dataSource="${ds}">

      <sql:param value="${n}"/>

</sql:query>

 

[java] view plain copy
  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  
  2. <%@ taglib prefix="c" uri="jstl/c"%>  
  3. <%@ taglib prefix="sql" uri="jstl/sql"%>  
  4. <html>  
  5.     <head></head>  
  6.     <body>  
  7.         <sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mldn" user="root" password="12345" var="ds"/>  
  8.         <sql:query sql="SELECT * FROM emp" var="result" dataSource="${ds}"/>  
  9.         <table border="2" width="80%">  
  10.             <c:forEach items="${result.rows}" var="iter">  
  11.             <tr>  
  12.                 <td>${iter.empno}</td>  
  13.                 <td>${iter.ename}</td>  
  14.             </tr>  
  15.             </c:forEach>  
  16.         </table>  
  17.         <%  
  18.             request.setAttribute("name","zzz");  
  19.             request.setAttribute("date",new java.util.Date());  
  20.             request.setAttribute("id","2");  
  21.         %>  
  22.         <sql:update sql="DELETE FROM emp WHERE empno=0" var="dresult" dataSource="${ds}"/>  
  23.         <sql:update sql="UPDATE emp SET ename=?,hiredate=? where empno=?" dataSource="${ds}">  
  24.             <sql:param value="${name}"/>  
  25.             <sql:dateParam value="${date}" type="date"/>  
  26.             <sql:param value="${id}"/>  
  27.         </sql:update>  
  28.     </body>  
  29. </html>  


四、XML标签库


XML标签库的作用就是能够简单操作XML文件,封装了DOM或者SAX的复杂的步骤,比如DOM解析必须:DocumentBuilderFactory、DocumentBulder等一系列的准备;而JSTL只需要一个标签即可。


1.XPath介绍


在XML标签库中必须要使用XPath,XML文件就像一棵树,XPath能够找到XML中的一个节点。

/    表示根节点;

//   表示任意路径子节点;

../   表示父节点;

@ 表示属性


2.<x:out>


此标签用于输出,形如:

<x:out select="        "/>

select中的内容就是XPath,我们需要找到某个节点 ,并输出其内容。


3.<x:parse>


此标签用于解析XML文件,形如:

<x:parse var="     "   doc="      "/>

doc表示xml文件对象;

var表示解析完的根节点;

一般都是以:

<c:import url="1.xml"     var="xml1"/>

<x:parse doc="${xml1}"   var="root"/>

进行导入并解析;


4.<x:set>


将xml中某个节点的内容保存到一个属性中去;形如:

<x:set select="    "   var="     "     scope="     "/>

select表示XPath路径;

var表示保存的属性;

scope表示保存范围;


5.<x:choose>


此标签类似核心标签库中的<c:choose>,功能是多重判断;

<x:choose>

<x:when select="   ">     //是否存在XPath路径

......

</x:when>

<x:otherwise>

</x:otherwise>

</x:choose>


6.<x:forEach>


迭代输出内容,比如:

[html] view plain copy
  1. <personlist>  
  2.     <person>  
  3.         <name id="1">xiazdong</name>  
  4.         <age>20</age>  
  5.     </person>  
  6.     <person>  
  7.         <name id="2">xzdong</name>  
  8.         <age>15</age>  
  9.     </person>  
  10. </personlist>  
我们就可以迭代输出person的内容;因为有两个person;


下面就是迭代输出以上person节点的代码:

[html] view plain copy
  1. <%@ page contentType="text/html" pageEncoding="GBK"%>  
  2. <%@ taglib prefix="c" uri="jstl/c"%>  
  3. <%@ taglib prefix="x" uri="jstl/x"%>  
  4. <html>  
  5.     <head></head>  
  6.     <body>  
  7.         <c:import url="persons.xml" var="pxf" charEncoding="GBK"/>  
  8.         <x:parse var="personXml" doc="${pxf}"/>  
  9.           
  10.         <x:set select="$personXml//person" var="nameXml"/>  
  11.           
  12.         <x:forEach select="$nameXml" var="iter">  
  13.             <h3><x:out select="name"/></h3>  
  14.         </x:forEach>  
  15.     </body>  
  16. </html>  
0 0
原创粉丝点击