JSTL标签库

JSTL标签库

JSTL(Java Server Pages Standard Tag Library)

当前JSTL版本为1.2

JSTL是为了简化JSP页面设计

JSTL将一些常用的功能使用java类来实现,通过标签在JSP页面使用

使用taglib指令,格式:

<%@ taglib prefix="prefix_name" uri="uri_path"|tagdir="tag_dir" %>

JSTL组成

功能范围URI前缀(习惯)
corehttp://java.sun.com/jsp/jstl/corec
I18Nhttp://java.sun.com/jsp/jstl/fmtfmt
SQLhttp://java.sun.com/jsp/jstl/sqlsql
XMLhttp://java.sun.com/jsp/jstl/xmlx
Functionshttp://java.sun.com/jsp/jstl/functionsfn

core和I18N是使用的最多的一组标签。

core标签库(核心标签)

核心标签是最常用的JSTL标签。引用核心标签库的语法如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

通用标签

  • out标签(两种)

    <c:out value="value" [escapeXml="{true|false}" [default="defaultvalue"] />
    
    <c:out value="value" [escapeXml="{true|false}">
    default value
    </c:out>
    • c:前缀
    • out:用来输出的标签
    • value:用来输出的值
    • 中括号中的内容表示可选
    • escapeXml:是否需要对XML里面的特殊符号进行转义(例如尖括号),默认为true。” < “转为”& l t ;”,而” > “转为”& g t ;”。
    • default表示默认值,当value为null时,将输出默认值。
  • set标签

    <c:set value="value" var="varName" [scope="{page|request|session|application}"] />
    
    <c:set var="varName" [scope="{page|request|session|application}"]>
        body content
    </c:set>
  • remove标签

    <c:remove var="varName" [scope="{page|request|session|application}"]>
  • catch标签(没有var只是简单的处理而不保存,var保存异常,可通过var访问该异常)

    <c:catch [var="varName"]>
        处理代码
    </c:catch>
使用示例
<%@ 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>JSTL首页</title>
</head>
<body>
    <%-- 如果不指定作用域,默认作用域为page --%>
    <c:set value="${'<strong>test</strong>'}" var="test" />
    <c:set value="${'<strong>test</strong>'}" var="test" scope="request"></c:set>

    <%-- 将XML标签转义输出 --%>
    pageScope: <c:out value="${pageScope.test}" escapeXml="false" /><br/>

    <%-- 如果request作用域中没有此内容,输出默认值 --%>
    requestScope: <c:out value="${requestScope.test}" escapeXml="false" >
            <strong>default</strong>        
    </c:out><br/>

    <h3>remove</h3>
    <c:remove var="test" scope="request" />
    pageScope: <c:out value="${pageScope.test}" escapeXml="false" /><br/>
    requestScope: <c:out value="${requestScope.test}" escapeXml="false" >
            <strong>default</strong>        
    </c:out><br/>

</body>
</html>

条件标签

  • if标签(两种形式)(test里写条件)(var存储的是条件结果,true或false)

    <c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />
    
    <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
        body content
    </c:if>
  • choose标签(+表示可以写多个这样的标签)(?表示这个标签可以出现也可以不出现,但是出现只能出现一次)

    <c:choose>
    {
    <c:when test="testCondition">
        body content
    </c:when>
    }+
    {
    <c:otherwise>
        block
    </c:otherwise>
    }?
    </c:choose>
使用示例

一个表单(Form.jsp)

<form action="doAge.jsp" method="post">
    年龄:<input type="text" name="age" />
    <input type="submit" value="评测" />
</form>

doAge.jsp

<%@ 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>获取表单数据并判断</title>
</head>
<body>
    <strong>${param.age}</strong><br/>
    <c:if test="${param.age<=18}">
        少年
    </c:if>
    <c:if test="${18<param.age && param.age<=30}">
        青年   
    </c:if>
    <c:if test="${30<param.age && param.age<=50}">
        中年   
    </c:if>
    <c:if test="${param.age>50}">
        老年
    </c:if>

    <br/>

    <c:choose>
        <c:when test="${param.age<=18}">
            少年
        </c:when>
        <c:when test="${18<param.age && param.age<=30}">
            青年
        </c:when>
        <c:when test="${30<param.age && param.age<=50}">
            中年
        </c:when>
        <c:otherwise>
            老年
        </c:otherwise>
    </c:choose>


</body>
</html>

迭代标签

  • forEach

    var:通过该变量名称来获取里面存储的值
    items:迭代的内容(Collection,Iterator,Enumeration,Map)
    varStatus:状态,循坏了几次
    begin:开始位置
    end:终止位置
    step:步长

    <c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
        body content
    </c:forEach>
  • forTokens

    delims:分隔符,将items字符串数组进行分割

    <c:forTokens items="stringofTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
        body content
    </c:forTokens>
使用示例
<%@ 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>迭代标签使用示例</title>
</head>
<body>

<%
int arr[]={9,8,7,6,5,4,3,2,1};
%>

<c:forEach items="<%=arr%>" var="num" varStatus="status" begin="2" end="7" step="2">
    ${status.count} : ${num}<br/>
</c:forEach>

<hr/>

<c:forTokens items="ab,ee;44|123" delims=",;|" var="item">
    ${item}<br/>
</c:forTokens>

</body>
</html>

导入及重定向标签

  • import(作用类似include动作,但可导入其他web内容)

    *表示可以有零个或多个
    url是完整的

    <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
    {<c:param name="name" value="value" />}*
    </c:import>
  • url(使用URL重写规则构建一个URL)

    context:取一个上下文名称
    var:保存重写的结果
    scope:设置保存的作用域

    <c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"] />
使用示例

ImportTest.jsp

(根据重写的URL重定向到doAge.jsp页面,并做相关的处理,地址栏会使用重写的URL)

<%@ 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>导入及重定向标签示例</title>
</head>
<body>

    <%-- 输出的URL后面加入了jsessionid --%>
    <c:url value="doAge.jsp" var="ageURL"></c:url>
    ${ageURL}

<%--查看URL页面的编码,再配置合适的编码
    <c:import url="http://www.baidu.com" charEncoding="UTF-8"></c:import>
--%>

 <%-- 根据重写的URL重定向,并传参数 --%>
 <%-- 如果使用重定向,就不要使用import标签--%>
 <%-- 此重定向不仅可以定位到我们当前应用页面,也可以定位到其他web页面 --%>
 <c:redirect url="${ageURL}">
    <c:param name="age" value="21"></c:param>
 </c:redirect>

</body>
</html>

I18N标签库

引用I18N标签库的语法如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
  • setLocale标签

    value:表示地区(zh:中文地区,en:使用英文的地区,后面可以跟具体位置,zh_CN中国大陆)
    variant:表示操作系统
    scope:表示作用域

    <fmt:setLocale value="locale" [variant="{WIN|MAX|POSIX}"] [scope="{page|request|session|application}"]>
  • setBundle

    <fmt:setBundle basename="basename" [var="varName"] [scope="{page|request|session|application}"]>
  • message(输出信息,根据键输出对应的值)

    bundle:绑定resourceBundle,通过EL表达式获取setBundle中的var

    <fmt:message key="msgKey" [bundle="resourceBundle"] [var="varName"] [scope="{page|request|session|application}"]>
        {<fmt: param>body content</fmt:param>}?
    </fmt:message>
使用示例

在Java Resource->src文件下,新建两个键值对文件(message_zh.property,message_en.property),一个英文,一个中文(en,zh)

键值对文件的命名要求,文件名加地区加properties后缀(message_en.property, message_zh.properties)

message_zh.property内容:

title为键,后面为值(不需要双引号),输入中文自动转为Unicode码(内容为:这是一个测试页面!)

title=\u8FD9\u662F\u4E00\u4E2A\u6D4B\u8BD5\u9875\u9762\uFF01

message_zh.property内容:

title=This is a test page!

根据键取键值(浏览器设置不同的语言会显示不同语言的内容)

<%@page import="java.util.ResourceBundle"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    

<%-- 获取并设置地区 --%>
<fmt:setLocale value="${pageContext.request.locale}"/>

<%-- 键值对文件的命名要求,文件名加地区加properties后缀(message_en.property, message_zh.properties) --%>
<%-- basename设置键值对文件的名称,不需要加后缀也不需要加地区名 --%>
<%-- var给此个绑定命名 --%>
<<fmt:setBundle basename="message" var="msg" />

<!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>I18N标签库演示</title>
</head>
<body>
    <%-- 获取地区 --%>
    ${pageContext.request.locale}
    <br/><br/>

    <%-- 会根据浏览器设置的语言,自动获取对应地区文件的title键对应的值 --%>
    <fmt:message key="title" bundle="${msg }"></fmt:message>
    <br/><br/>

    <%-- 通过java代码获取 --%>
    <%
        ResourceBundle bundle=ResourceBundle.getBundle("message", request.getLocale());
        out.print(bundle.getString("title"));
    %>

</body>
</html>
  • formatNumber标签(格式化标签)

    这里写图片描述

  • formatDate标签(日期格式化标签)

    通过var定义的变量,保存在作用域里

    <fmt:formatDate value="date" [type="{time|date|both}"] 
    [dateStyle="{default|short|medium|long|full}"]
    [timeStyle="{default|short|medium|long|full}"]
    [pattern="customPattern"] [var="varName"]
    [scope="{page|request|session|application}"] />
使用示例
<%-- 格式化标签使用 --%>
<%-- 货币格式,随浏览器设置的语言而变化 --%>
<fmt:formatNumber value="123.456" type="currency" var="cury" />
${cury }
<br/>
<%-- 日期格式化,随浏览器设置的语言而变化 --%>
<fmt:formatDate value="<%=new Date() %>" type="both" var="now"/>
${now }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值