JSTL(Java 标准标签库)

文章目录

  • JSTL 简介
  • JSTL 可以使用在哪里
  • JSTL 使用步骤
  • 使用标签
    • if 语句
    • 选择语句
    • 迭代遍历语句
    • URL重写
    • 设置属性值
    • 删除属性值
    • 异常捕获
    • 导入其它 JSP 页面
    • 重定向
    • 输出指定的值

JSTL 简介

Java Standard Taglib(Java 标准标签库)。

JSTL 是一种代替 JSP 中的 Java 代码的技术。sun 公司制订的一种技术规范,用来将 JSP 页面中的 java 代码使用类似于 html 当中的标记来替换的一种技术。这样做的目的,是为了使 JSP 页面更好维护以及更好的测试。

JSTL 其实质是什么?
JSTL 底层其实是一些 Java 代码,在 JSP 转换成 Servlet 类时,会在 service() 方法体内生成 JSTL 对应的 Java 代码。每种 JSTL 标签都有其固定的含义,最后会生成固定的 Java 代码。

JSTL 可以使用在哪里

JSTL 只能用在 JSP 文件中,不可以在 XML 和 HTML 文件中使用,不可以用在 JS 语境中,不可以用在 Java 的语境中。

可以用在标签的属性值中,例如:

<a href="<c:url value='/jstl05.jsp'/>">访问jstl05</a>

JSTL 使用步骤

1.需要引用 JSTL 标准标签库相关的 jar 文件。
你如果使用 eclipse 开发,则将 jar 文件 copy 到 WEB-INF\lib,并添加到构建路径中(构建的 classpath 中)。

jar 文件有:jstl.jarstandard.jar

2.在 jsp 文件当中,使用 taglib 指令导入标签。

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

使用标签

jstl 标签都是结合 el 表达式一起使用的。
jstl 标签中不能使用 ognl 表达式。

if 语句

<c:if test="" var="" scope="">

test 属性:当值为 true,执行标签体的内容(其实就是将内容输出到页面),为 false,则不执行。
var 属性:指定一个绑定名。
scope 属性:指定一个绑定范围。
var 属性和 scope 属性用于将 test 的结果绑定到指定的对象(pageContext、request、session、application)上。

示例代码:

<%@ page import="priv.lwx.jstl.bean.User" %><%--Created by IntelliJ IDEA.User: liaowenxiongDate: 2022/2/4Time: 19:22To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>Title</title>
</head>
<body style="font-size:30px">
<%User user = new User();user.setName("liaowenxiong");user.setGendar("f");request.setAttribute("user1", user);
%>
user's name:${user1.name}<br>
user's gendar:
<c:if test="${user1.gendar == 'm'}" var="rs" scope="request"></c:if>
<c:if test="${!rs}"></c:if>
</body>
</html>

选择语句

<c:choose>

用于分支,当某个条件满足,执行某一个分支。每一个分支条件用 when 标签来表示。

<c:when test="">
可出现多次,只用于<c:choose>
test 属性: 当值为 true,执行标签体的内容。

<c:otherwise>
只出现 1 次,只用于 <c:choose>
当其它分支都不满足条件,则执行该标签体的内容。

示例代码:

<%@ page import="priv.lwx.jstl.bean.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>Title</title>
</head>
<body style="font-size:30px">
<%User user = new User();user.setName("liaowenxiong");user.setGendar("f");request.setAttribute("user1",user);
%>user's gendar:
<c:choose><c:when test="${user1.gendar == 'm'}"></c:when><c:otherwise></c:otherwise>
</c:choose>
</body>
</html>

迭代遍历语句

<c:forEach var="" items="" varStatus="">

用于遍历集合
items 属性:指定要遍历的集合。
var 属性: 指定一个绑定名,jsp 引擎会从集合当中取一个对象,绑定到 pageContext 对象上。
varStatus 属性: 指定一个绑定名,对应的绑定值是一个 java 对象,封装了遍历时的一些信息,包括当前遍历的对象的下标(index)以及
是第几次(count)遍历。

示例代码1:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="priv.lwx.jstl.bean.User" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>td {text-align: center;}</style>
</head>
<body style="font-size: 30px;">
<%List<User> users = new ArrayList<>();User user1 = new User();user1.setName("zs");user1.setGendar("f");User user2 = new User();user2.setName("ww");user2.setGendar("m");users.add(user1);users.add(user2);request.setAttribute("users", users);
%>
<table border="1" width="60%" cellpadding="0" cellspacing="0"><tr><td>name</td><td>gendar</td></tr><c:forEach var="user" items="${users}"><tr><td>${user.name}</td><td>${user.gendar}</td></tr></c:forEach>
</table>
</body>
</html>

示例代码2:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="priv.lwx.jstl.bean.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><style>.row1 {background-color: red;}.row2 {background-color: yellow;}td {text-align: center;}</style>
</head>
<body style="font-size: 30px;">
<%List<User> users = new ArrayList<>();User user1 = new User();user1.setName("zs");user1.setGendar("f");User user2 = new User();user2.setName("ww");user2.setGendar("m");users.add(user1);users.add(user2);request.setAttribute("users", users);
%>
<table border="1" width="60%" cellpadding="0" cellspacing="0"><tr><td>name</td><td>gendar</td><td>count</td><td>index</td></tr><c:forEach var="user" items="${users}" varStatus="status"><tr class="row${status.index%2+1}"><td>${user.name}</td><td>${user.gendar}</td><%--遍历次数--%><td>${status.count}</td><%--遍历元素的下标--%><td>${status.index}</td></tr></c:forEach>
</table>
</body>
</html>

URL重写

<c:url>

当用户禁止 cookie 以后,会自动在地址后面添加sessionId。
当使用绝对路径时,会自动在地址前添加应用名。
value 属性:指定地址。在表单提交、链接当中,可以使用该标签。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>Title</title>
</head>
<body style="font-size: 30px;">
<%session.setAttribute("username", "liaowenxiong");
%>
<a href="<c:url value='/jstl07.jsp'/>">访问jstl07</a></body>
</html>

设置属性值

<c:set var="" scope="" value="">

绑定一个对象到指定的范围。
var 属性: 指定一个绑定名。
scope 属性:指定一个绑定范围。
value 属性: 绑定值。

示例代码:

<%--Created by IntelliJ IDEA.User: liaowenxiongDate: 2022/2/5Time: 10:47To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><html>
<head><title>Title</title>
</head>
<body style="font-size: 30px;">
<c:set var="rs" scope="session" value="${1+1}"/>
之前 rs=${rs}<br>
<c:remove var="rs" scope="session"/>
之后 rs=${rs}
</body>
</html>

删除属性值

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

解除绑定

异常捕获

<c:catch var="">

处理异常,会将异常信息封装成一个对象,绑定到 pageContext 对象上。属性 var 就是用来指定绑定名的。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--Created by IntelliJ IDEA.User: liaowenxiongDate: 2022/2/5Time: 11:00To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>捕获异常</title>
</head>
<body style="font-size: 30px;">
<c:catch var="msg"><%Integer.parseInt("123a");%>
</c:catch>
${msg}
</body>
</html>

导入其它 JSP 页面

<c:import url="">

url 指定一个 jsp 文件的地址,jsp 会在运行时调用这个 jsp。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--Created by IntelliJ IDEA.User: liaowenxiongDate: 2022/2/5Time: 11:15To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body style="font-size: 30px;">
jstl10...<br>
<c:import url="jstl06.jsp"/><br>
</body>
</html>

重定向

<c:redirect url="">

重定向到另外一个地址。url 属性指定重定向的地址。

当禁止 Cookie 后,会自动在地址后加上 SessionId。

示例代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body style="font-size: 30px;">
<c:set var="rs" scope="session" value="${1+1}"/>
<c:redirect url="jstl12.jsp"/>
</body>
</html>

输出指定的值

<c:out value="" default="" escapeXml="">

用于输出 el 表达式的值。
value 属性: 指定输出的值。
default 属性: 指定缺省值。
escapeXml 属性: 设置成 true,会将 value 中的特殊字符替换成相应的实体。缺省值就是 true。

示例代码:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>输出指定的值</title>
</head>
<body style="font-size: 30px;">
<%--写法1--%>
<c:out value="${1+1}"/><br>
等价于
<%--写法2--%>
${1+1}<br>
<%--输出变量的值--%>
str:<c:out value="${str}" default="hello"/><br>
<%--转义字符--%>
&lt;table&gt;<br>
<c:out value="<table>" escapeXml="true"/>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php hash代码下载,PHP中的哈希表 hash_insert

[php]代码库int hash_insert(HashTable *ht, char *key, void *value){// check if we need to resize the hashtableresize_hash_table_if_needed(ht); // 哈希表不固定大小&#xff0c;当插入的内容快占满哈表的存储空间// 将对哈希表进行扩容&#xff0c; 以便容纳所有的元素…

跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是关于使用此出色的库添加对分布式跟踪的支持所需内容的简要介绍。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程…

JDK命令之java -- 用来执行字节码文件,即用来执行Java程序

文章目录一、命令介绍二、用法格式三、常用选项四、常用选项详解-client&#xff0c;-server-hotspot-classpath,-cp-classpath-Dvalue-verbose[:class|gc|jni]-verbose:gc-verbose:jni-version-showversion-ea[:...|:] 和 -enableassertions[:...|:]-da[:...|:] 和 -disableas…

php中双引号的区别,PHP中单引号和双引号的区别

好久没有写博客了&#xff0c;都忘了积累知识啦……现在开始全新的生活&#xff0c;重拾记录的习惯。今天要写的就是PHP中单引号和双引号的区别。在PHP中&#xff0c;我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者&#xff0c;应该了解其中的区别。一、字符串…

sbe 详解_内部简单二进制编码(SBE)

sbe 详解SBE是用于金融行业的非常快速的序列化库&#xff0c;在本博客中&#xff0c;我将介绍一些使其快速发展的设计选择。 序列化的全部目的是对消息进行编码和解码&#xff0c;并且有很多可用的选项&#xff0c;例如XML&#xff0c;JSON&#xff0c;Protobufer&#xff0c;…

php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传

var listitem>file.name (Math.round(file.size/1024) KB)>>>Pending;$(#log).append(listitem);$(this).swfupload(startUpload);})//绑定开始上传文件事件.bind(uploadStart, function(event, file){$(#log li#file.id).find(p.status).text(Uploading...);$(#lo…

aws lambda使用_使用AWS Lambdas扩展技术堆栈

aws lambda使用面对现实吧。 调试性能问题很困难&#xff0c;但是更难解决。 假设您发现了有害的代码&#xff0c;这些代码正在拖慢您的应用的运行速度。 最终会有一段时间&#xff0c;您发现此代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一就是将最…

Java声明定义抽象类/接口/继承/实现

文章目录声明定义抽象类声明定义接口派生类、抽象类、接口的继承要点声明定义抽象类 public abstract class CRMSystem {public abstract Client add(Client newGuy); //添加用户方法public abstract Event add(Event e, Client guy); //重载添加事件、用户方法public abstrac…

cuba开发_使用CUBA进行开发–与Spring相比有很大的转变?

cuba开发阅读另一个供内部公司使用的Web项目的要求时&#xff0c;您&#xff08;至少是我自己&#xff09;通常会看到一个很普通的集合&#xff1a;定义明确的数据存储结构&#xff08;或有时是现有的旧数据库&#xff09;&#xff0c;大量的数据输入形式&#xff0c;非常复杂的…

imagettftext php7,mac php7 imagettftext

Mac OS X 自带PHP环境gd库安装扩展freetype问题&#xff1a; “Call to undefined function imagettftext()”解决方法&#xff1a;curl -s [http://php-osx.liip.ch/install.sh](https://link.jianshu.com/?thttp://php-osx.liip.ch/install.sh) | bash -s 7.3sudo vim ~/.ba…

图片授权模式

RM、RF、PE是3种不同的图片授权模式&#xff0c;由图片卖家设定&#xff0c;图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中&#xff0c;经过对图片用户需求的不断总结而确定的。摄影师可以根据自己的销售意愿&#xff0c;在编辑图片的时候&#xff0c;对…

java线程池延期执行一次_Java使用者的延期执行

java线程池延期执行一次在前面的博客文章&#xff08;“ 延迟执行Java的供应商 “&#xff09;&#xff0c;我引用礁HORSTMANN的陈述书中‘ 的Java SE8为真的很急关于lambda表达式’&#xff0c;‘所有的lambda表达式的点被推迟执行 。’ Horstmann在最后一年为Dobb博士的杂志写…

python时间序列数据分析,Python数据分析之时间序列

Python数据分析之时间序列发布时间&#xff1a;2020-07-10 06:56:27来源&#xff1a;51CTO阅读&#xff1a;808作者&#xff1a;up4ever1. 时间序列类型时间戳(timestramp)即特定的时刻固定时期(period)如2018年1月或2018年1月1日时间间隔(interval)由起始和结束时间戳表示2. P…

java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

java jdk 序列化在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中&#xff0c;我引用了乔什布洛赫&#xff08;Josh Bloch&#xff09;的第三版的有效Java &#xff0c;他写道&#xff1a;“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构…

php+ksort+返回true,PHP preg_replace函数

mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )在PHP中用来执行正则表达式的匹配以及替换的函数。可以返回一个正则表达式转换后的值。在subject中搜索pattern模式的匹配项&#xff0c;并用replacement模式进行替换。如果指定了 limit&…

下拉选择框

</select> 标签有一个属性 multiple&#xff0c;将其设置成 multiple"multiple" 按住 Ctrl 键即可实现多选。 请看例子&#xff1a; <html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" />…

rest端点_REST:使用Controller端点?

rest端点在一般的REST架构中&#xff0c;基本概念是资源。 在资源之后&#xff0c;下一步是为这些资源开发一个统一接口&#xff0c;这在HTTP领域通常意味着&#xff1a; 创建为POST 阅读就是GET 更新为PUT&#xff08;或部分更新为PATCH&#xff09; 删除已删除 在现实世…

Java 字符串与整数之间的互相转换

1、如何将字符串String转化为整数int int i Integer.parseInt(str); int i Integer.valueOf(my_str).intValue(); 注: 字串转成Double, Float, Long的方法大同小异。 2、如何将字符串String转化为Integer Integer integerInteger.valueOf(i)3、如何将整数 int 转换成字串 Str…

hello world_建立无服务器的“ Hello World”功能

hello world无服务器 &#xff0c;功能即服务&#xff08;FaaS&#xff09;或仅具有云功能&#xff0c;就可以编写将在云中运行的代码。 您可以使用多种不同的语言&#xff08;例如JavaScript&#xff08;Node.js&#xff09;&#xff0c;Swift&#xff0c;Python&#xff0c;J…