Java-Jsp-JSTL

x33g5p2x  于2022-04-12 转载在 Java  
字(12.5k)|赞(0)|评价(0)|浏览(318)

学习JSTL前 必须会 EL

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

根据JSTL标签所提供的功能,可以将其分为5个类别。

● 核心标签

● 格式化标签

● SQL 标签

● XML 标签

● JSTL 函数

JSTL 库安装

需要的Maven

<!--   jstl-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

    <!-- standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
</dependency>

或者你手动配置jar

jstl.jar

链接:https://pan.baidu.com/s/1GRDc4MdPn942DCAYei8K-w
提取码:1234

standard.jar

链接:https://pan.baidu.com/s/1Q3SY_5kaZVrQlb4d9NdpXQ
提取码:1234

核心标签

使用任何库,你必须在每个JSP文件中的头部 包含对应的标签库。 否则JSTL失效

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

需要导入

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

常用方法:

标签描述
<c:out>用于在JSP中显示数据,就像<%= … >
<c:set>用于保存数据
<c:remove>用于删除数据
<c:catch>用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if>与我们在一般程序中用的if一样
<c:choose>本身只当做<c:when>和<c:otherwise>的父标签
<c:when><c:choose>的子标签,用来判断条件是否成立
<c:otherwise><c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import>检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach>基础迭代标签,接受多种集合类型
<c:forTokens>根据指定的分隔符来分隔内容并迭代输出
<c:param>用来给包含或重定向的页面传递参数
<c:redirect>重定向至一个新的URL.
<c:url>使用可选的查询参数来创造一个URL
<c:out>

<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。举例来说,如果想要访问customer.address.street,只需要这样写:<c:out value=“customer.address.street”>。

<c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。

语法格式

<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

属性

<c:out>标签有如下属性:

属性描述是否必要默认值
value要输出的内容
default输出的默认值主体中的内容
escapeXml解析xmltrue

程序示例

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8" %>
<%--必须添加 否则 jstl标签失效--%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<%--开启EL 表达式--%>
<%@page isELIgnored="false" %>
<html>
<head>
    <title></title>
</head>
<body>
<c:out value="<a href='https://www.baidu.com/'>百度</a>" escapeXml="true" /><br/>
<c:out value="<a href='https://www.baidu.com/'>百度</a>" escapeXml="false" /><br/>
<c:out value="${null}" escapeXml="false" default="使用的表达式结果为null,则输出该默认值"/><br/>
<c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>

</body>
</html>

注意:

default 添加默认值 当value为null时 必须使用EL表达式结果返回的值为null才会调用默认值 ${null}

有default 的情况下 标签的文本之间就 不能 写入<c:out >文本 </c:out> 否则报错

如果没有default value 为空的情况下 自动读取 标签文本

<c:set>

<c:set>标签用于设置变量值和对象属性。

<c:set>标签就是jsp:setProperty行为标签的孪生兄弟。

这个标签之所以很有用呢,是因为它会计算表达式的值,然后使用计算结果来设置 JavaBean 对象或 java.util.Map 对象的值。

语法格式

<c:set var="<string>"  value="<string>"  target="<string>"  property="<string>"  scope="<string>"/>

属性

<c:set>标签有如下属性:

属性描述是否必要默认值
value要存储的值主体的内容
target要修改的属性所属的对象
property要修改的属性
var存储信息的变量
scopevar属性的作用域Page

如果指定了target属性,那么property属性也需要被指定。

演示:

设置变量

<c:set var="name" value="hu" scope="page"/>
<c:out value="${name}" escapeXml="false"/>

设置对象

<%
        javaBean bean=new javaBean();
        request.setAttribute("bean",bean);
%>

<c:set target="${requestScope.bean}" property="name" value="胡"></c:set>
target 对象  必须使用EL获取  (此对象必须在4大作用域里)
property 对象内的属性名 自动会调用 set 
value  向 property 里的属性 赋值  
<c:out value="${requestScope.bean.name}"></c:out>  //胡
<c:remove>

删除指定作用域内的变量 如果没有指定作用域那么自动查找所有作用域 删除第一次出现的此变量这个标签不是特别有用,不过可以用来确保JSP完成清理工作。

语法格式

<c:remove var="<string>" scope="<string>"/>

属性

<c:remove>标签有如下属性:

属性描述是否必要默认值
var要移除的变量名称
scope变量所属的作用域所有作用域

演示:

<c:set var="salary" scope="session" value="${2000*2}"/>
<p>salary 变量值: <c:out value="${salary}"/></p>

<c:remove var="salary"/>
<p>删除 salary 变量后的值: <c:out value="${salary}"/></p>
<c:catch>

<c:catch> 标签主要用来处理产生错误的异常状况,并且将错误信息储存起来。 用的不多 因为一般异常都在后端处理完了

语法格式

<c:catch var="<string>">
...
</c:catch>

属性

<c:catch>标签有如下属性:

属性描述是否必要默认值
var用来储存错误信息的变量None

实例演示

<c:catch var ="catchException">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${catchException != null}">
   <p>异常为 : ${catchException} <br />
   发生了异常: ${catchException.message}</p>
</c:if>
<c:if>

<c:if>标签判断表达式的值,如果表达式的值为真则执行其主体内容。 和 java if一样

语法格式

<c:if test="<boolean>" var="<string>" scope="<string>">
   ...
</c:if>

属性

<c:if>标签有如下属性:

属性描述是否必要默认值
test条件
var用于存储条件结果的变量
scopevar属性的作用域page

演示实例

<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
   <p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
<c:choose> <c:when> <c:otherwise>

就和java中的 if else if … else 效果一样 <c:when> 如果都不满足那么就执行 <c:otherwise>

语法格式

<c:choose>
    <c:when test="<boolean>"/>
        ...
    </c:when>
    <c:when test="<boolean>"/>
        ...
    </c:when>
    ...
    ...
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>

必须使用 <c:choose> 包裹 when 和 otherwise

属性

  • <c:choose>标签没有属性。
  • <c:when>标签只有一个属性,在下表中有给出。
  • <c:otherwise>标签没有属性。

<c:when>标签的属性如下:

属性描述是否必要默认值
test条件

实例演示

<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工资为 : <c:out value="${salary}"/></p>
<c:choose>
    <c:when test="${salary <= 2000}">
        太惨了。
    </c:when>
    <c:when test="${salary >= 4000}">
        不错的薪水,还能生活。
    </c:when>
    <c:otherwise>
        什么都没有。
    </c:otherwise>
</c:choose>
<c:import>

<c:import>标签提供了所有jsp:include行为标签所具有的功能,同时也允许包含绝对URL。

举例来说,使用<c:import>标签可以读取同一个服务器下 任意站点的资源 。 但是返回的是文本类型 如果是页面那么就是源码

语法格式

<c:import
   url="<string>"
   var="<string>"
   scope="<string>"
   varRender="<string>"
   context="<string>"
   charEncoding="<string>"/>

属性

<c:import>标签有如下属性:

属性描述是否必要默认值
url需要检索和引入的页面的URL
context/ 紧接着一个本地网络应用程序的名称当前应用程序
charEncoding所引入的数据的字符编码集ISO-8859-1
var用于存储所引入的文本的变量Print to page
scopevar属性的作用域Page
varReader可选的用于提供java.io.Reader对象的变量

实例演示

<c:import var="data" url="http://localhost:8081/java_Web/app.txt"/>
<c:out value="${data}" escapeXml="true"/>
<c:forEach> <c:forTokens>

区别就是 <c:forEach> 处理数组集合 <c:forTokens>处理字符串

这些标签封装了Java中的for,while,do-while循环。相比而言,

<c:forEach>标签是更加通用的标签,因为它迭代一个集合中的对象。

<c:forTokens>标签将字符串分隔为一个子串数组然后迭代它们。

forEach 语法格式

<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">

    ...
</c:forEach>

forTokens 语法格式

<c:forTokens
    items="<string>"
    delims="<string>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">
    ...
</c:forTokens>

属性

<c:forEach>标签有如下属性:

属性描述是否必要默认值
items要被循环的信息
begin开始的元素(0=第一个元素,1=第二个元素)0
end最后一个元素(0=第一个元素,1=第二个元素)Last element
step每一次迭代的步长1
var代表当前条目的变量名称
varStatus代表循环状态的变量名称

<c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个属性:

属性描述是否必要默认值
delims分隔符

<c:forEach>实例演示

<c:forEach var="i" begin="1" end="5">
    <c:out value="${i}"/><p>
</c:forEach>

结果 1 2 3 4 5

遍历 集合 数组

<%
String[] str={"a","b","c","d"};
request.setAttribute("str",str);
%>

<c:forEach var="i"  items="${str}">
<c:out value="${i}"/><p>
</c:forEach>

<c:forTokens>演示实例

<c:forTokens items="google,baidu,taobao" delims="," var="name">
   <c:out value="${name}"/><p>
</c:forTokens>
<c:url> <c:param>

<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。

这个标签在需要的时候会自动重写URL。

var属性用于存储格式化后的URL。

<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。

语法

<c:url
  var="<string>"
  scope="<string>"
  value="<string>"
  context="<string>"/>

属性

<c:url>标签有如下属性:

属性描述是否必要默认值
value基础URL
context本地网络应用程序的名称当前应用程序
var代表URL的变量名Print to page
scopevar属性的作用域Page

演示

<a href="<c:url value="http://www.baidu.com"/>">
    这个链接通过 &lt;c:url&gt; 标签生成。
</a>

<c:param>标签用于在<c:url>标签中指定参数,而且与URL编码相关。

在<c:param>标签内,name属性表明参数的名称,value属性表明参数的值。

语法格式

<c:param name="<string>" value="<string>"/>

属性

<c:param>标签有如下属性:

属性描述是否必要默认值
nameURL中要设置的参数的名称
value参数的值Body

程序示例

<c:url var="myURL" value="http://www.baidu.com">
    <c:param name="name" value="hu"/>
    <c:param name="pass" value="123"/>
</c:url>

<a href="<c:out value="${myURL}"/>">
    使用 &lt;c:param&gt; 为指定URL发送两个参数。
</a>

结果 https://www.baidu.com/?name=hu&pass=123

<c:redirect>

<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。

语法格式

<c:redirect url="<string>" context="<string>"/>

属性

c:redirect标签有如下属性:

属性描述是否必要默认值
url目标URL
context紧接着一个本地网络应用程序的名称当前应用程序

实例演示

<c:redirect url="https://www.baidu.com/"/>

格式化标签

需要导入

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

常用方法:

标签描述
fmt:formatNumber使用指定的格式或精度格式化数字
fmt:parseNumber解析一个代表着数字,货币或百分比的字符串
fmt:formatDate使用指定的风格或模式格式化日期和时间
fmt:parseDate解析一个代表着日期或时间的字符串
fmt:bundle绑定资源
fmt:setLocale指定地区
fmt:setBundle绑定资源
fmt:timeZone指定时区
fmt:setTimeZone指定时区
fmt:message显示资源配置文件信息
fmt:requestEncoding设置request的字符编码

SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。引用SQL标签库的语法如下:

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

常用方法:

标签描述
sql:setDataSource指定数据源
sql:query运行SQL查询语句
sql:update运行SQL更新语句
sql:param将SQL语句中的参数设为指定值
sql:dateParam将SQL语句中的日期参数设为指定的java.util.Date 对象值
sql:transaction在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

XML 标签

JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

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

在使用xml标签前,你必须将XML 和 XPath 的相关jar包也引入项目

需要映入Maven依赖

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>
<dependency>
    <groupId>xalan</groupId>
    <artifactId>xalan</artifactId>
    <version>2.7.1</version>
</dependency>

xercesImpl-2.11.0.jar

链接:https://pan.baidu.com/s/14khlmObKCV5dhVvaWaA4bg
提取码:1234

xalan-2.6.0.jar

链接:https://pan.baidu.com/s/17cN86_epsNrxJq-N7ysEnA
提取码:1234
复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享

标签描述
<x:out>,与<%= … >,类似,不过只用于XPath表达式
<x:parse>解析 XML 数据
<x:set>设置XPath表达式
<x:if>判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
<x:forEach>迭代XML文档中的节点
<x:choose><x:when>和<x:otherwise>的父标签
<x:when><x:choose>的子标签,用来进行条件判断
<x:otherwise><x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform>将XSL转换应用在XML文档中
<x:param>与<x:transform>共同使用,用于设置XSL样式表

JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn"    uri="http://java.sun.com/jsp/jstl/functions" %>
函数描述
fn:contains()测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase()测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith()测试输入的字符串是否以指定的后缀结尾
fn:escapeXml()跳过可以作为XML标记的字符
fn:indexOf()返回指定字符串在输入字符串中出现的位置
fn:join()将数组中的元素合成一个字符串然后输出
fn:length()返回字符串长度
fn:replace()将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split()将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith()测试输入字符串是否以指定的前缀开始
fn:substring()返回字符串的子集
fn:substringAfter()返回字符串在指定子串之后的子集
fn:substringBefore()返回字符串在指定子串之前的子集
fn:toLowerCase()将字符串中的字符转为小写
fn:toUpperCase()将字符串中的字符转为大写
fn:trim()移除首位的空白符

点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^

相关文章