JSTL学习(一)

来源:互联网 发布:微博粉丝数据分析 编辑:程序博客网 时间:2024/06/07 12:39

首先了解JSTL的核心标签库(共有13个,分类4类):

1、表达式控制标签:out、set、remove、catch、

2、流程控制标签:if、choose、when、otherwise

3、循环标签:forEach、forTokens

4、URL操作标签:import、url、redirect


使用标签时一定要在jsp文件头加入以下代码:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注意:需要将jstl.jar包和standard.jar包拷贝到lib目录

下面对各个标签进行说明:

1、<c:out>

它用来显示数据对象(字符串、表达式)的内容和结果

java脚本为:<% out.print("test") %>或者<%="test" %>

JSTL标签:<c:out value="test">

举例:

<body><c:out value="&nbsp;&nbsp;hello, i am JSTL." escapeXml="true" default="default"></c:out><br /><c:out value="&nbsp;&nbsp;hello, i am JSTL." escapeXml="false" default="default"></c:out><br /><c:out value="${null}" escapeXml="true" default="default"></c:out><br /><c:out value="${null}" escapeXml="false">when the value is null, it will out the default.</c:out><br /></body>

页面显示:

&nbsp;&nbsp;hello, i am JSTL.
hello, i am JSTL.
default
when the value is null, it will out the default.

注意:

<c:out value="${null}" escapeXml="false" default="default">when the value is null, it will out the default.</c:out><br />
这样写会报错:org.apache.jasper.JasperException:

escapeXml表示是否过滤为xml文档,true表示不解析,输出原字符串,false表示解析出内容。


2、<c:set>

它用来将变量存取于jsp范围中或javabean的属性中。

举例:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page import="java.util.*;" %><<jsp:useBean id="person" class="com.javabean.Person"></jsp:useBean><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSTL</title></head><body><c:set value="Jack" var="name1" scope="session" ></c:set><c:set var="name2" scope="session">Tom</c:set><c:set value="Jerry" target="${person}" property="name"></c:set><c:set target="${person}" property="age">22</c:set><li>session中取值:${seesionScope.name1}</li><li>session中取值:${seesionScope.name2}</li><li>bean中取值name:<c:out value="${person.name }"></c:out></li><li>bean中取值age:<c:out value="${person.age }"></c:out></li></body></html>

页面输出:

  • session中取值:
  • session中取值:
  • bean中取值name:Jerry
  • bean中取值age:22 

    3、<c:remove>

    它表示一出指定范围内的变量,使用语法:

    <c:remove var="变量名" [scope="page|request|session|application"]></c:remove>


    4、<c:catch>

    它用于处理jsp页面中出现的异常,并储藏异常信息。语法:

    <c:catch var="name">

    容易产生异常的代码

    </c:catch>

    若出现异常,则异常信息会储藏在变量name里面。


    5、<c:if>

    它表示条件控制标签,语法:

    <c:if test="条件" var="name" [scope="page|request|session|application"]></c:if>

    举例:

    <c:if test="${person.name == 'Jerry' }" var="ifName"></c:if><c:out value="ifName的值:${ifName }" escapeXml="false"></c:out><br/><c:if test="${person.name == 'Jerry' }"><c:out value="&nbsp;name is Jerry..." escapeXml="false"></c:out><br/></c:if>


    页面输出:

    ifName的值:true
    name is Jerry...


    6、<c:choose>、<c:when>、<c:otherwise>这三个标签嵌套使用,第一个标签在最外层,最后一个标签在嵌套中只能使用一次。

    举例:

    <c:set var="score">44</c:set><c:choose><c:when test="${score >= 90 && score <= 100 }"><c:out value="成绩优异" escapeXml="false"></c:out></c:when><c:when test="${score >= 70 && score < 90 }"><c:out value="成绩良好" escapeXml="false"></c:out></c:when><c:when test="${score >= 60 && score < 70 }"><c:out value="成绩及格" escapeXml="false"></c:out></c:when><c:when test="${score >= 0 && score < 60 }"><c:out value="成绩不及格" escapeXml="false"></c:out></c:when><c:otherwise><c:out value="成绩有误" escapeXml="false"></c:out></c:otherwise></c:choose>

    页面输出:

    成绩不及格


    7、<c:forEach>

    它表示遍历集合Collection中的元素,语法:

    <c:forEach var="name" items="Collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>

    其中,var用于存储从集合中取出元素,items指定要遍历的集合,varStatus用于存放集合中元素的信息,一共有四种状态属性,begin、end、step分别表示遍历集合从begin开始,到end结束,步长是step,下标从0开始。

    举例:

    <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page import="java.util.*;" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSTL2</title></head><body><%List list = new ArrayList();list.add("张三");list.add("李四");list.add("王五");list.add("刘六");list.add("赵七");request.setAttribute("list", list);%><b>不指定begin和end遍历</b><br /><c:forEach var="item" items="${list }"><c:out value="${item }"></c:out><br /></c:forEach><b>指定begin和end遍历</b><br /><c:forEach var="item" items="${list }" begin="0" end="4" step="2"><c:out value="${item }"></c:out><br /></c:forEach><b>输出迭代信息</b><br /><c:forEach var="item" items="${list }" begin="2" end="4" step="1" varStatus="s"><c:out value="${item }"></c:out>的四种属性:<br />所在位置(索引):<c:out value="${s.index }"></c:out><br />总共迭代次数:<c:out value="${s.count }"></c:out><br />是否为第一个位置:<c:out value="${s.first }"></c:out><br />是否为最后一个位置:<c:out value="${s.last }"></c:out><br /></c:forEach></body></html>

    页面输出:

    不指定begin和end遍历
    张三
    李四
    王五
    刘六
    赵七
    指定begin和end遍历
    张三
    王五
    赵七
    输出迭代信息
    王五的四种属性:
    所在位置(索引):2
    总共迭代次数:1
    是否为第一个位置:true
    是否为最后一个位置:false
    刘六的四种属性:
    所在位置(索引):3
    总共迭代次数:2
    是否为第一个位置:false
    是否为最后一个位置:false
    赵七的四种属性:
    所在位置(索引):4
    总共迭代次数:3
    是否为第一个位置:false
    是否为最后一个位置:true

    8、<c:forTokens>

    用来浏览字符串,并根据指定的字符串截取字符串。语法:

    <c:forTokens items="stringOfTokens" delims="delimiters" [var="name" begin="begin" end="end" step="len" varStatus="statusName"]></c:forTokens>

    items表示需要截取的字符串,delims表示截取字符串中的哪些字符,多个字符可用逗号隔开。

    <c:forTokens items="我*是*一*个*程*序*员" delims="*" var="test1"><c:out value="${test1 }"></c:out></c:forTokens><br /><c:forTokens items="123-334-544-344-234" delims="-" var="test2"><c:out value="${test2 }"></c:out></c:forTokens><br /><c:forTokens items="我*是*一*个*程*序*员" delims="*" var="test1" begin="1" end="3" step="2" varStatus="s"><c:out value="${test1 }"></c:out>的四种属性:<br />所在位置(索引):<c:out value="${s.index }"></c:out><br />总共迭代次数:<c:out value="${s.count }"></c:out><br />是否为第一个位置:<c:out value="${s.first }"></c:out><br />是否为最后一个位置:<c:out value="${s.last }"></c:out><br /></c:forTokens>


    页面输出:

    我 是 一 个 程 序 员
    123 334 544 344 234
    是的四种属性:
    所在位置(索引):1
    总共迭代次数:1
    是否为第一个位置:true
    是否为最后一个位置:false
    个的四种属性:
    所在位置(索引):3
    总共迭代次数:2
    是否为第一个位置:false
    是否为最后一个位置:true


    9、URL操作标签

    (1)、<c:import>

    表示将静态或动态文件包含到jsp页面中,其与<jsp:include>的区别在于只能包含同一个web应用中的页面,但是前者可以其他web应用中的页面,甚至是网络中的页面。

    语法:<c:import url="url" [context="context"] [value="value"] [scope="..."] [charEncoding="encoding"]></c:import>

            <c:import url="url"  varReader="name" [context="context"][charEncoding="encoding"]></c:import>


    举例:

    <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>JSTL2</title></head><body><c:out value="引入百度网络页面"></c:out><br /><c:catch var="error1"><c:import url="http://www.baidu.com"></c:import></c:catch><c:out value="${error1 }"></c:out><c:out value="相对路径的文件"></c:out><br /><c:catch var="error2"><c:import url="test.txt" charEncoding="UTF-8"></c:import></c:catch><br /><c:out value="${error2 }"></c:out><c:out value="以字符串输出相对路径文件内容,并保存在session中"></c:out><br /><c:catch var="error2"><c:import url="test.txt" scope="session" var="my_test" charEncoding="UTF-8"></c:import>文件中的内容:<c:out value="${my_test }"></c:out><br /></c:catch><c:out value="${error2 }"></c:out><br /><c:out value="从session中获取my_test..."></c:out><br /><c:out value="${sessionScope.my_test }"></c:out></body></html>

    页面输出:



    URL路径有个绝对路径和相对路径:相对路径:<c:import url="test.txt"/>那么,test.txt必须与当前文件放在同一个文件目录下。如果以"/"开头,表示存放在应用程序的根目录下,如Tomcat应用程序的根目录文件夹为 webapps。导入该文件夹下的 aaa.txt 的编写方式: <c:import url="/aaa.txt">。如果要访问webapps管理文件夹中的其他Web应用,就要用context属性。例如访问demoProj下的index.jsp,则:<c:import url="/index.jsp" context="/demoProj"/>.


    (2)、<c:redirect>

    用来实现请求的重定向,语法:

    <c:redirect url="url" [context="context"]/>

    或者

    <c:redirect url="url" [context="context"]>

                <c:param name="name1" value="value1">

    </c:redirect>

    举例:

    <!--<c:redirect url="http://www.baidu.com" />-->
    <c:redirect url="http://localhost:8080/JSTL/JSTL3.jsp">
    <c:param name="uName">aaa</c:param>
    <c:param name="uPass">123456</c:param>
    </c:redirect>

    JSTL3.jsp页面里面可以获得uName和uPass的值。


    (3)、<c:url>

    可以用来动态生成一个String类型的URL,可以同上标签共同使用,也可以用html里面的<a>来代替。语法:

    <c:url value="value" [var="name"] [scope="..."] [context="context"]>

                <c:param name="name1" value="value1">

    </c:url>

    <c:url value="value" [var="name"] [scope="..."] [context="context"]/>


    举例:

    <c:url value="http://www.baidu.com" var="url" scope="session"></c:url><a href="${sessionScope.url }">百度首页1</a><a href="${url }">百度首页2</a>


    页面输出:

    百度首页1 百度首页2


  • 原创粉丝点击