JavaWeb简单示例——JSTL

简单介绍:

JSTL是一个不断完善的开放源代码的JSP标签库,使用HSTL可以取代在传统JSP页面中嵌入Java代码的做法,大大提高了程序的可维护性。

JSTL包含了核心标签库,国际化 /格式化标签库,SQL标签库,XML标签库和函数标签库五部分组成,我们主要探讨的就是核心标签库(别问为什么,因为教材上就是这么说的)

在使用之前,我们需要先去官网下载我们需要的核心代码库的jar包

JSTLjar包下载地址

下载后解压出来,在lib目录下有两个jar包,这就是我们需要的JSTL驱动包

将这个驱动包复制到我们项目的lib目录下,然后右键点击,添加为库,前期的准备工作就完成了

 在正式开始使用之前,需要先使用JSP的taglib指令将JSTL的标签库引入到JSP页面中

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

在JSP页面的最上面添加上面的代码就将JSTL的标签库引入到JSP页面了

常用的JSTL的核心标签库:

由于JSTL是一个非常完善的且不断更新的标签库,所以这里仅拿出几个常用的标签进行讲解,其余的标签可以上官网进行查阅使用(官网真是好东西)

<c:out>:输出标签:

在c:out标签内有一个必须的属性value,值就是我们想要输出的值,当value的值为null的时候,会输出标签体中的内容,如果没有标签体会使用default属性指定的值。标签内还有一个可选属性为escapeXml,该属性的含义是是否将一些特殊字符转义成普通字符后再输出到HTML页面中,可选值为true或false,默认是true

<c:out value="HelloWord">
    <p>这里是输出的默认内容</p>"
</c:out>

<c:remove>:移除标签:用于移除指定JSP范围内的变量

语法格式:<c:remove var="name" [scope="范围"]>

其中var属性指向的是需要移除的变量名,scope指向的是在什么范围内移除这个变量,这个范围值得就是JSP中的四大作用域,如果不指定范围,则会删除所有范围内变量名指向的值

流程控制标签:

<c:if>:在标签中有一个必须的属性test,这个属性的值为需要进行判断的表达式,如果表达式为真,则会显示标签体中的内容

<c:if test="true">
    <p>如果表达式为真则会显示标签体中的内容</p>
  </c:if>

<c:choose>,<c:when>,<c:otherwise>:等价与else—if或者switch判断

 <c:choose>是用来包裹其他两个标签的容器,<c:when>是用来进行判断选择的标签,<c:otherwise>是当所有的判断选择都不符合时进行输出的最后一个分支

<c:set value="1" var="count" property="count">
    
  </c:set>
  <c:choose>
    <c:when test="${count == 1}">
      <p>这是第一个分支</p>
    </c:when>
    <c:when test="${count == 2}">
      <p>这是第一个分支</p>
    </c:when>
    <c:when test="${count == 3}">
      <p>这是第一个分支</p>
    </c:when>
    <c:otherwise>
      <p>如果都不匹配这里是最后的分支</p>
    </c:otherwise>
  </c:choose>

循环标签:

<c:forEach>:用来代替循环标签进行遍历循环的,其中的属性有:items,值是被遍历的数组,var,值是数组中的单个数据对象,可以调用数组中的单个对象中的属性,begin,遍历常数时的开始值,step,步长,遍历常数的时候的间隔,end,遍历常数的时候的结束值,我们将从遍历数组和遍历常数两种方式来体验forEach标签

遍历对象数组:

创建一个存放数据的标准类:

package Semester_3.src.Util_7;

public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

 创建对象,存入数组,存储到域,进行遍历:

<%@ page import="java.util.ArrayList" %>
<%@ page import="Semester_3.src.Util_7.User" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2022/10/24
  Time: 19:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试JSTL</title>
</head>
<body>
<%
    ArrayList<User> Users = new ArrayList<>();
    Users.add(new User("张三","123"));
    Users.add(new User("李四","456"));
    Users.add(new User("王五","456"));
    request.setAttribute("Users",Users);
%>
<c:forEach items="${Users}" var="User">
    <p>用户名为:${User.name}</p>
    <p>密码为:${User.password}</p>
</c:forEach>
</body>
</html>

注意点: 

在遍历对象的时候,var属性指向的值就变成了数组中存储的对象,可以调用对象的get方法获取数据,所以这里User.name获取对象的属性值的时候访问的并不是对象的name变量,而是getName方法。服务器在解析User.name的时候,会自动将name的首字母大写并加上get组合成getName,对应对象中的个getName()方法,从而获取数据,所以当我们修改一下User对象中的getName方法名的时候就无法正常的获取到数据了。

遍历常数:

相比遍历对象数据,遍历常数就非常的简单了,只需要定义,begin(开始),step(步长/间隔),end(结束),var(临时变量)四个属性即可

<c:forEach begin="0" step="1" end="10" var="i">
    <p>${i}</p>
</c:forEach>

URL相关标签:URL相关的标签是将链接中的参数进行编码解码之后重构成一个完整的URL,可以解决因为参数不识别或者参数编码问题导致的运行异常

URL相关标签的使用比较简单,常用的标签有<c:url>和<c:param>

<c:url>标签的属性是var,值是重构后的url的表达式,value属性,值是要链接的文件的路径

<c:param>标签是被<c:url>标签包裹的,name属性是url参数的名字,value是url参数的值。<c:param>可以有多个,对应也就是可以有多个参数,

举个栗子:

<c:url var="myurl" value="/ServletDemo15">
    <c:param name="name" value="张三">
        
    </c:param>
</c:url>
<a href="${myurl}">点击链接</a>

在使用重构后的链接时,使用EL的方式,内部放的时<c:url>标签的var属性对应的值

看一下最终重构出来的完整的URL:

可以看到,原本是中文的张三,在重构的时候就进行了编码转换成了不易出错的编码格式,这就是url相关标签重构URL链接的最大的作用

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值