gpt4 book ai didi

Java-Jsp-JSTL

转载 作者:知者 更新时间:2024-03-13 02:26:00 25 4
gpt4 key购买 nike

学习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 解析xml true

程序示例

<%@ 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 存储信息的变量
scope var属性的作用域 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 用于存储条件结果的变量
scope var属性的作用域 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
scope var属性的作用域 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
scope var属性的作用域 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>标签有如下属性:

属性 描述 是否必要 默认值
name URL中要设置的参数的名称
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() 移除首位的空白符

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com