• JSTL使用总结(1) 核心标签库和SQL标签库


    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表示保存的导入内容对象。

    代码实例:

    <%@ page contentType="text/html" pageEncoding="GBK" import="java.util.*"%>
    <%@ taglib prefix="c" uri="jstl/c"%>
    <jsp:useBean id="per" class="org.person.Person" scope="page"/>
    <html>
    	<head>
    		<title></title>
    	</head>
    	<body>
    	<%
    		per.setName("xiazdong");
    		per.setAge(20);
    		pageContext.setAttribute("per",per);
    	%>
    	<c:out value="${per}" escapeXml="true" default="无内容"/>
    	<c:out value="xiazdong"/>
    	
    	<c:set var="name" value="xiazdong" />
    	<h3>姓名:${name}</h3>
    	<c:set target="${per}" property="name" value="yxWang"/>
    	<c:out value="${per}" escapeXml="true" default="无内容"/>
    	<!--设定属性并删除 -->
    	<c:set var="attr" value="tmp" scope="request"/>
    	<h3>属性为:${attr}</h3>
    	<c:remove var="attr" scope="request"/>
    	<h3>删除后,属性为:${attr}</h3>
    	<c:if test="${30>10}" var="result" scope="page">
    		<h3>30比10大</h3>
    	</c:if>
    	<%
    		pageContext.setAttribute("num",15);
    	%>
    	<c:choose>
    		<c:when test="${num<15}">
    			<h3>num小于15</h3>
    		</c:when>
    		<c:when test="${num>15}">
    			<h3>num大于15</h3>
    		</c:when>
    		<c:otherwise>
    			<h3>num等于15</h3>
    		</c:otherwise>
    	</c:choose>
    	<%
    		List<String> list = new ArrayList<String>();
    		list.add("A");
    		list.add("B");
    		list.add("C");
    		list.add("D");
    		pageContext.setAttribute("list",list);
    	%>
    	<c:forEach items="${list}" var="iter">
    		${iter}、
    	</c:forEach>
    	<br />
    	<c:forEach items="${list}" var="iter" begin="2">
    		${iter}、
    	</c:forEach>
    	<br />
    	<c:forTokens items="a:b:c" delims=":" var="ite">
    		${ite}、
    	</c:forTokens>
    	<br />
    	
    	</body>
    </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>

    <%@ page contentType="text/html" pageEncoding="GBK"%>
    <%@ taglib prefix="c" uri="jstl/c"%>
    <%@ taglib prefix="sql" uri="jstl/sql"%>
    <html>
    	<head></head>
    	<body>
    		<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/mldn" user="root" password="12345" var="ds"/>
    		<sql:query sql="SELECT * FROM emp" var="result" dataSource="${ds}"/>
    		<table border="2" width="80%">
    			<c:forEach items="${result.rows}" var="iter">
    			<tr>
    				<td>${iter.empno}</td>
    				<td>${iter.ename}</td>
    			</tr>
    			</c:forEach>
    		</table>
    		<%
    			request.setAttribute("name","zzz");
    			request.setAttribute("date",new java.util.Date());
    			request.setAttribute("id","2");
    		%>
    		<sql:update sql="DELETE FROM emp WHERE empno=0" var="dresult" dataSource="${ds}"/>
    		<sql:update sql="UPDATE emp SET ename=?,hiredate=? where empno=?" dataSource="${ds}">
    			<sql:param value="${name}"/>
    			<sql:dateParam value="${date}" type="date"/>
    			<sql:param value="${id}"/>
    		</sql:update>
    	</body>
    </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>


    迭代输出内容,比如:

    <personlist>
    	<person>
    		<name id="1">xiazdong</name>
    		<age>20</age>
    	</person>
    	<person>
    		<name id="2">xzdong</name>
    		<age>15</age>
    	</person>
    </personlist>
    我们就可以迭代输出person的内容;因为有两个person;


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

    <%@ page contentType="text/html" pageEncoding="GBK"%>
    <%@ taglib prefix="c" uri="jstl/c"%>
    <%@ taglib prefix="x" uri="jstl/x"%>
    <html>
    	<head></head>
    	<body>
    		<c:import url="persons.xml" var="pxf" charEncoding="GBK"/>
    		<x:parse var="personXml" doc="${pxf}"/>
    		
    		<x:set select="$personXml//person" var="nameXml"/>
    		
    		<x:forEach select="$nameXml" var="iter">
    			<h3><x:out select="name"/></h3>
    		</x:forEach>
    	</body>
    </html>






    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    Python 里的下划线
    浅谈TCP拆包粘包问题
    40 张图带你搞懂 TCP 和 UDP
    头条面试官问:如何保证网络传输的可靠性?这就很尴尬了
    TCP协议灵魂12问,面试总会用得到(建议收藏)
    TCP网络握手
    HTTP1.0、HTTP1.1和HTTP2.0的区别
    面试官:这波HTTP究极combo,你顶得住吗?_chuhe1989的博客-CSDN博客
    腾讯面试官:说一下Android网络知识和框架?
    网络通信必备基础之Http协议&TCP/IP协议(二)
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058117.html
Copyright © 2020-2023  润新知