JSTL

本文详细介绍了JSTL标签库的功能与使用方法,包括输出处理、遍历、流程控制、值设置、异常处理及国际化等功能,并展示了如何利用这些标签简化JSP页面的开发。

action和EL表达式虽然已经提供了比较强大的功能,但是显然它还不能满足需求,比如在输出的时候带有<br>等标签,会别翻译成html,或者是一些分支语句,他们也不支持等等,这时候我们需要的自定义标签。
在真正开始写自己的标签之前,我们已经有了一个很好的,标签库,JSTL。全名JSP Standard Tag Library。提供了非常全面的功能。

只要把jar包包含过去,在页面中加入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
其中的uri为jar包中包含的META-INF目录下c.tld文件中的uri。也可以把这个c.tld文件拷贝到当前工程的WEB-INF目录,然后在页面中加入:
<%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>这样就能在页面中使用Jstl的C标签了。

 

c:out
比如在request中存在属性content。值为你好<br>word 。页面代码如下:
${content }<br>
<c:out value="${content }" escapeXml="true"></c:out><br>
<c:out value="${content1 }" default="你好<br>word1" escapeXml="false"></c:out>
直接使用el会发现<br>被浏览器给识别成显示了。只有把<br>写成转义的&lt;等符号才能够显示出来。而不是换行。
使用c:out标签就能够方便许多,escapeXml能够指定是否翻译html标签,默认为true,不会翻译成换行而是显示出来。
default会在value的值为null的时候被显示出来

c:forEach 遍历
<c:forEach var="person" items="${persons}" varStatus="index" begin="0" end="2" step="1">
          ${index.count }===${person.username }<br>
      </c:forEach>

persons为一个包含了Person对象的list。var为遍历List的时候所保存的临时变量,在循环中可以对这个变量在进行遍历或者是其他的操作。
其他属性为可选选项了。varStatus,用来通过.count得到当前的序列号。
begin为其实索引,从0开始,end为结束索引,step为步子,默认为1,可以设置为其他的数字。

流程控制
c:if
<c:if test="${flag eq 'true'}" >
  <c:out value="通过"></c:out>
</c:if>
test中的表达式需要返回boolean类型的值,eq表示的是equals.不管是数字还是字符串都能够使用==进行比对。
jstl中只有c:if,没有c:else。如果要实现类似else的分支,或者是类似switch的分支。
<c:choose>
    <c:when test=""></c:when>
    <c:when test=""></c:when>
    <c:otherwise>
       
    </c:otherwise>
</c:choose>
就能够达到要求了。

设置值
c:set
<c:set var="hello" value="你好!" scope="request"></c:set>
      ${hello }
把value中的值赋值给变量hello。
      <c:set target="${person}" property="username" value="xiaowang"></c:set>
      ${person.username }
把value中的值赋给target中的bean的property属性,但是target不能为null,否则会报错
<c:set target="${countryMap}" property="china" value="北京"></c:set>
      ${countryMap["china"] }
把value中的值赋给target中的map的proertykey所对应的值,同样target不能为null.
能设置就能删除。
      <c:set var="country" value="北京"></c:set>
      国家:${country }<br>
      <c:remove var="country"/>
      国家:${country }

引入servlet
<c:import url="http://localhost:8080/javaWeb/MyJsp.jsp"></c:import>
      <c:import url="/MyJsp.jsp">
          <c:param name="testValue" value="123123"></c:param>
      </c:import>
当url是本地文件的时候,与<jsp:include>功能相同,能够传递request,或者设置参数。

<c:url>
还能够给连接加入jsessionid
<a href="<c:url value='/MyJsp.jsp'/>">click me</a>
如果浏览器禁用了cookie会自动在连接后面加入cookie。
如果我们在链接中有一些编码之后样子的字符,比如说:<a href="MyJsp.jsp?hello=word%20url">click me</a>
获取值的时候会把%20识别为空格,但是如果我们想传入的值就是%20应该可以怎么做呢?
<c:url value="MyJsp.jsp" var="testUrl">
          <c:param name="hello" value="word%20q234"></c:param>
      </c:url>
      <a href="${testUrl }">click me</a>
使用这种方式加入参数就能够进行格式化了。

 

异常捕获
<c:catch var="myexception">
        <% out.print(1/0); %>
    </c:catch>
    <c:out value="${myexception}"></c:out>

JSTL国际化:

使用JSTL进行国际化还是比较简单的

  • 首先编写资源文件,推荐使用ResourceBundor插件。保存名为类似XX_zh_CN.properties的方式,例如:Test_zh_CN.properties.zh_CN为对应的语言标志。
  • 然后在页面中引入格式化标签库<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>、
  • 指定资源文件的位置:<fmt:setBundle basename="com.prince.servlet.resource.Test" var="testBundle"/>
  • 其中如果有多个资源文件,可以使用var进行区分,如果只有一个可以没有这个参数。basename中表示引用的资源文件的位置为:com/prince/servlet/resource/Test_zh_CN.properties。
  • jstl会根据当前浏览器的设置来进行资源文件的匹配,如果想要固定语言,可以使用<fmt:setLocale value="zh_CN" />来进行指定。
  • 使用的时候就可以<fmt:message key="test.common.message" bundle="${testBundle }">
            <fmt:param value="word 世界"></fmt:param>
        </fmt:message>来引用资源文件中对应key的值,其中还能给资源文件中的{0}进行赋值。
  • 这样就完成国际化操作了。

JSTL格式化

数字格式化:

  • 格式化金币<fmt:formatNumber type="currency" value="123.4567">还可以写成<fmt:formatNumber type="currency" value="123.4567" pattern="¥0.00">控制小数点位置。
  • 格式化百分比<fmt:formatNumber type="percent" value="123.4567"></fmt:formatNumber>
        <fmt:formatNumber type="percent" value="123.4567" pattern="0.00%">
  • 格式化数字<fmt:formatNumber value="123.4567" pattern="#.######">
  • 其中pattern中,0.00表示位数不够的使用0来代替,如果是#号则表示位数不够仍然显示。

日期格式化:

  • 普通的日期格式化:<c:set value="<%=new java.util.Date() %>" var="date"></c:set>
        <fmt:formatDate value="${date }" />
  • 加入type。<fmt:formatDate value="${date }" type="both"/>。both表示既有日期又有时间。还能取值为date或者是time
  • 加入timStyle。<fmt:formatDate value="${date }" type="both" timeStyle="long"/>timeStyle可以有多种取值,能够显示不同情况的时间格式。
  • 使用pattern进行格式化:<fmt:formatDate value="${date}" pattern="G yyyy年MM月dd日 E a HH:mm:ss.S z"/>其中G表示公园,yyyy是年份,MM是月份,dd是天, E是星期几,a表示上下午。HH表示小时大写的就是24进制的,mm表示分钟,ss表示秒,S是微秒, z是时区。
  • 另外使用格式化标签是能够直接作为值赋值给input的value属性的。
  • 还可以使用<fmt:parseDate 标签把字符串转化为日期。具体用法用到再说。

 

 

 

03-19
<think>好的,我现在需要帮助用户了解JSTL的使用教程和示例。首先,我应该回顾用户提供的引用内容,确保回答准确。用户提到了几个引用,涉及JSTL的基本概念、核心标签库、与EL的结合以及特定标签的用法,比如<c:import>和<c:url>。用户可能希望了解如何开始使用JSTL,包括配置步骤、常用标签的示例以及最佳实践。 首先,我应该确认JSTL的基本介绍,包括它的作用和优势。根据引用[2],JSTL用于解决常见的逻辑控制问题,如遍历集合、条件测试等,而无需在JSP中编写Java代码。这需要提到JSTL的不同标签库,比如核心库、格式化库、SQL库等,但可能用户更关注核心库的使用。 接下来,用户需要教程和示例,所以需要分步骤说明如何配置JSTL。引用[4]提到需要导入标签库,可能需要说明如何在JSP页面中添加taglib指令,例如<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>。同时,用户可能需要知道如何下载JSTL库并将其添加到项目中,不过具体的下载步骤可能需要简略提及,或者建议查看官方文档。 然后,针对核心标签库的常用标签,需要给出示例。例如,变量操作标签<c:set>和<c:out>,条件判断标签<c:if>、<c:choose>,循环标签<c:forEach>和<c:forTokens>,URL处理标签<c:import>和<c:url>。每个标签都需要一个简单的代码示例,比如使用<c:forEach>遍历列表,用<c:if>进行条件判断。 另外,结合EL(表达式语言)的使用也很重要,引用[1]和[3]提到EL和JSTL的结合可以避免Java代码。因此,在示例中应该展示如何用EL表达式访问变量,例如${user.name}。 可能需要注意JSTLJSP的版本兼容性,比如JSP 2.0及以上版本对EL的支持,但用户可能没有提到这个问题,所以可能不需要深入,但可以稍微提及。 最后,根据用户提供的引用[4],需要说明<c:import>与<jsp:include>的区别,指出前者可以包含其他Web应用或网络资源,而后者仅限于同一应用。这部分可以作为使用技巧或注意事项来强调。 在生成相关问题的时候,需要考虑用户可能进一步想知道的内容,比如JSTL的其他标签库(如格式化、SQL),与EL的协作细节,常见错误处理,或者性能优化等。因此,相关问题可以围绕这些主题展开。 现在需要确保回答结构清晰,分步骤说明,并包含实际示例。同时,引用正确的来源,比如引用[2]说明JSTL的功能,引用[4]说明<c:import>的用法。每个引用标识要正确对应,比如在讲解核心标签时引用[2],在讲解<c:import>时引用[4]。 检查是否有遗漏的部分,比如配置步骤是否需要详细说明jar包的添加,或者是否需要提及Maven依赖。不过用户可能只需要基础的教程,所以简要说明导入taglib即可,具体依赖管理可能属于更高级的内容,可以放在相关问题中。 总结,回答的结构应该是:简介、配置步骤、核心标签示例(变量、条件、循环、URL)、与EL结合的优势、注意事项或高级用法,最后相关问题。</think>### JavaServer Pages Standard Tag Library (JSTL) 使用教程和示例 #### **1. JSTL简介** JSTLJSP 的标准标签库,提供了一系列标签用于简化页面逻辑控制,例如遍历集合、条件判断、格式化数据等。通过与 EL(Expression Language)结合,开发者可以避免在 JSP 中直接编写 Java 代码,提升代码可维护性[^2]。 --- #### **2. 配置 JSTL** - **步骤1**:下载 JSTL 库(如 `jstl-1.2.jar`),并将其添加到项目的 `WEB-INF/lib` 目录。 - **步骤2**:在 JSP 页面顶部声明标签库: ```jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> ``` 这里 `prefix="c"` 表示使用核心标签库的简写前缀。 --- #### **3. 核心标签库示例** ##### **(1) 变量操作** - **设置变量**:`<c:set>` ```jsp <c:set var="userName" value="Alice" scope="session" /> ``` - **输出变量**:`<c:out>` ```jsp 用户名:<c:out value="${userName}" default="Guest" /> ``` ##### **(2) 条件判断** - **单条件判断**:`<c:if>` ```jsp <c:if test="${user.age >= 18}"> 已成年 </c:if> ``` - **多条件选择**:`<c:choose>` ```jsp <c:choose> <c:when test="${score >= 90}">优秀</c:when> <c:when test="${score >= 60}">及格</c:when> <c:otherwise>不及格</c:otherwise> </c:choose> ``` ##### **(3) 循环遍历** - **遍历集合**:`<c:forEach>` ```jsp <c:forEach items="${userList}" var="user" varStatus="status"> 第${status.index + 1}位用户:${user.name} </c:forEach> ``` - **分割字符串**:`<c:forTokens>` ```jsp <c:forTokens items="Java,Python,C++" delims="," var="lang"> 语言:${lang} </c:forTokens> ``` ##### **(4) URL 处理** - **生成动态 URL**:`<c:url>` ```jsp <a href="<c:url value='/user/profile?id=${userId}' />">查看详情</a> ``` - **包含外部资源**:`<c:import>` ```jsp <c:import url="https://example.com/api/data" charEncoding="UTF-8" /> ``` 与 `<jsp:include>` 不同,`<c:import>` 支持跨应用或网络资源包含[^4]。 --- #### **4. 结合 EL 简化逻辑** JSTL 通常与 EL 配合使用,例如通过 `${}` 直接访问变量或对象属性: ```jsp <c:if test="${empty cart.items}"> 购物车为空 </c:if> ``` --- #### **5. 注意事项** - **作用域管理**:使用 `scope` 属性明确变量作用域(如 `request`、`session`)。 - **错误处理**:可通过 `<c:catch>` 捕获异常: ```jsp <c:catch var="errorMsg"> <%-- 可能出错的代码 --%> </c:catch> <c:if test="${not empty errorMsg}"> 错误:${errorMsg} </c:if> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值