Servlet和JSP之JSTL学习

时间:2024-08-06 15:04:56

  JSTL

  JSTL就是JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL)是一个定制标签库的集合,用来解决像遍历Map或集合、条件测试、XML处理,甚至数据库访问和数据操作等常见的问题。

  (JSTL的使用需要有配置好两个jar包,分别是jstl.jar和standard.jar)

  JSTL库

  JSTL是标准标签库,但它是通过多个标签库来暴露其行为的。

区域

子函数

URI

前缀

核心

变量支持

http://java.sun.com/jsp/jstl/core

c

流控制

URL管理

其他

XML

核心

http://java.sun.com/jsp/jstl/xml

x

流控制

转换

国际化

语言区域

http://java.sun.com/jsp/jstl/fmt

fmt

消息格式化

数字和日期格式化

数据库

SQL

http://java.sun.com/jsp/jstl/sql

sql

函数

集合长度

http://java.sun.com/jsp/jstl/functions

fn

   在JSP页面中使用JSTL库,必须通过以下格式在JSP页面的开头作出声明:

  <%@ taglib uri="以上表格中对应的uri" prefix="以上表格中对应的前缀"%>

  (在开始进行学习JSTL之前需要掌握EL表达式的用法,可以参考Servlet和JSP之有关Servlet和JSP的梳理(二),但基本格式是"%{....}")

  常用核心标签介绍  ----->   <%@taglib uri=”http://java.sun.com/jsp/jstl/core  prefix=”c”%>

  JSTL的核心标签库标签共13个,从功能上可以分为4类:

表达式控制标签

out、set、remove、catch

流程控制标签

if、choose、when、otherwise

循环标签

forEach、for、Tokens

URL操作标签

import、url、redirect

  表达式控制标签详解之out

输出常量

  可在value属性中直接赋值。

<c:out value="this is our first JSTL demo"></c:out><br>

  ② 输出变量

   变量不存在时可配合default属性输出默认值,还可以通过escapeXml控制转义字符的输出方式。

<%String username = "zhangsan";request.setAttribute("username", username); %>
<c:out value="${username }"></c:out>
<c:out value="${name }" default="error"></c:out><br>
<c:out value="&gtout标签lt" escapeXml="false"></c:out><br>

  

   表达式控制标签详解之set

  ① 存值到scope中

可将值以变量形式存放在指定的范围中(2种方式)。

 

<c:set value="today" var="day" scope="session"></c:set>

<c:out value="${day }"></c:out>

<c:set var="age" scope="application">eleven</c:set>

<c:out value="${age }"></c:out>

  ② 存值到JavaBean的属性中

需要配合target属性指定对象并且通过property属性指定要赋值给对象中的哪个属性。

 <jsp:useBean id="person" class="com.imooc.test.Person"></jsp:useBean>

<c:set target="${person }" property="address" > Guangzhou</c:set>
<c:out value="${person.address }"></c:out>

  

  表达式控制标签详解之remove

  remove掉某个变量,var属性是必选,scope属性是可选。

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

  

  

   表达式控制标签详解之catch

   catch标签中可以包含那些容易出错的JSTL标签(逻辑)。

  <c:catch var="error">
           <c:set target="aa" property="vv">dw</c:set>
</c:catch>
<c:out value="${error }"></c:out>

  

  流程控制标签详解之if

  同程序中的if作用相同,用来实现分支条件控制。

<c:if test=”” var=”” scope=””></c:if>

test属性用于存放判断的条件,一般使用EL表达式来编写,var指定名称用来存放判断的结果类型为true或false,scope用来存放var属性存放的范围。

<c:if test="${param.score>=90 }" var="result" scope="application">
<c:out value="恭喜,您的成绩是优秀"></c:out>
</c:if>

  流程控制标签详解之choose、when、otherwise

  通常这三个标签被放在一起配合使用,<c:choose>标签嵌套在<c:when>和<c:otherwise>标签的外面作为他们的父标签来使用,其中choose和when标签也可以一起组合使用。

通常有以下两种语法结构:

  用法一:3个标签同时使用。

<c:choose>
  <c:when test="${param.score>=90 && param.score<=100 }">
    <c:out value="优秀"></c:out>  </c:when>
  <c:otherwise>
     <c:out value="输入的数据不符合"></c:out>  </c:otherwise></c:choose>

  用法二:只使用choose标签和when标签。

<c:choose>
  <c:when test="${param.score==100 }">
    <c:out value="太棒了,你是第一名"></c:out>
  </c:when>
</c:choose>

  循环控制标签详解之forEach

 根据循环条件遍历集合(Collection)中的元素,var设定变量名用于存储从集合中取出元素(必须无默认值),items指定要遍历的集合(必须无默认值),begin、end用于指定遍历的起始位置和终止位置(有默认值), step指定循环的步长(有默认),varStatus通过index、count、first、last几个状态值,描述begin和end子集中的元素的状态。

  常用用法1------全部遍历。

<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合”>
   操作var变量表示的元素<br>
</c:forEach>

  常用用法2------部分遍历。

<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合”
   begin=”开始遍历元素的index值” end=”结束遍历的元素的index值”>
  操作var变量表示的元素<br>
</c:forEach>

  常用用法3------部分遍历中指定步长。

<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合”
    begin=”开始遍历元素的index值” end=”结束遍历的元素的index值” step=”部分遍历中每次遍历的间隔元素个数”>
  操作var变量表示的元素<br></c:forEach>

  常用用法4------部分遍历时输出元素的状态。

<c:forEach var=”存储当前遍历元素的变量” items=”待遍历集合” begin=”开始遍历元素的index值” end=”结束遍历的元素的index值”     step=”部分遍历中每次遍历的间隔元素个数” varStatus=”指定一个变量用来存储当前元素的状态值”>
  操作var变量表示的元素<br>
</c:forEach>

  以上的用法的例子如下:

 <c:forEach var="fruits" items="${fruits }" begin="1" end="3" step="2" varStatus="fru">
           <c:out value="${fruits }的四个属性值"></c:out><br>
           <c:out value="index属性:${fru.index }"></c:out><br>
           <c:out value="count属性:${fru.count }"></c:out><br>
           <c:out value="first属性:${fru.first }"></c:out><br>
           <c:out value="last属性:${fru.last}"></c:out><br>
</c:forEach>

  循环控制标签详解之forTokens

  用于浏览字符串,并根据指定的字符将字符串截取, items指定被迭代的字符串,delims指定使用的分隔符,var指定用来存放遍历到的成员,begin、end用于指定遍历的起始位置和终止位置(有默认值),step指定循环的步长(有默认),  varStatus通过index、count、first、last几个状态值,描述begin和end。

<c:forTokens items="010-2342413-123" delims="-" var="num">
           <c:out value="${num }"></c:out>
</c:forTokens>

  URL操作标签详解之import

  作用:

  1. 可以把其他静态或动态文件包含到本JSP页面。
  2. 同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
  3. 格式如下,其中,url:被导入资源的URL路径, context:相同服务器下其他的web工程,必须以”/”开头(因为context引入的内容是webapps下的其他Web project,所以需要修改tomcat的发布路径和修改%TOMCAT_HOME%conf/context.xml的Context标签中的属性crossContext=”true”), var:以String类型存入别包含文件的内容,Scope:var变量的JSP范围, charEncoding:被导入文件的编码格式,varReader:以Reader类型存储被包含文件内容。
    <c:import url=”” context=“” var=”” scope=””charEncoding=”” varReader=””></c:import>  

  URL操作标签详解之redirect

  该标签用来实现请求的重定向,同时可以在url中加入指定的参数,url指定重定向的地址,可以是一个string类型的绝对地址或相对地址。,context用于导入其他web应用中的页面。

<c:redirect url="firstDemo.jsp">
    <c:param name="username">Lily</c:param>
    <c:param name="password">a</c:param>
</c:redirect>

  URL操作标签详解之url

  该标签用于动态生成一个String类型的URL,可以同<c:param>标签共同使用,也可以使用html的<a>标签实现超链接,value 表示url路径值,var 将url路径存储在变量中,scope var变量的范围。

  常用函数标签介绍 -------> <%@taglib uri=”http://java.sun.com/jsp/jstl/ffunctions prefix=”fn”%>

  基本的格式是:

${fn:functionName}

函数名

说明

语法

contains函数

contains函数用于测试一个字符串中是否包含指定的子字符串。如果字符串中包含该子字符串,则返回值True,否则返回False。

contains(String, substring)

containsIgnoreCase函数

containsIgnoreCase函数与contains函数相似,但测试是区分大小写的。

containsIgnoreCase(String,substring)

endsWith函数   

endsWith函数用于测试一个字符串是否以指定的后缀结尾,其返回值是一个Boolean。

endsWith(String, suffix)

escapeXml函数

escapeXml函数用于给String编码。这种转化与out标签将其escapeXml属性设为True一样。

escapeXml(String)

indexOf函数

indexOf函数返回指定子字符串在某个字符串中第一次出现时的索引。如果没有找到指定的子字符串,则返回-1、

indexOf(String, substring)

join函数

join函数将一个String数组中的所有元素都合并成一个字符串,并用指定的分隔符分开。

join(array, separator)

length函数  

length函数用于返回集合中的项目数,或者字符串中的字符数。  

length(input)

replace函数

replace函数将字符串中出现的所有beforeString用afterString替换,并返回结果。

replace(String, beforeSubstring, afterSubstring)

split函数

split函数用于将一个字符串分离成一个子字符串数组,他的作用与join函数相反。

split(String, separator)

startsWith函数

startsWith函数用于测试一个字符串是否以指定的前缀开头。

startsWith(String, prefix)

substring函数

substring函数用于返回一个从指定基于0的起始索引(含)到指定基于0的终止索引的子字符串。

substring(String, beginIndex, endIndex)

substringAfter函数 

substringAfter函数用于返回指定子字符串第一次出现后的字符串部分。

substringAfter(String, substring)

substringBefore函数

substringBefore函数用于返回指定子字符串第一次出现前的字符串部分。

substringBefore(String, substring)

toLowerCase函数  

toLowerCase函数将一个字符串转换成它的小写版本。

toLowerCase(String)

toUpperCase函数

toUpperCase函数将一个字符串转换陈给它的大写版本。

toUpperCase(String)

trim函数

trim函数用于删除一个字符串开头和结尾的空白。

trim(String)