JavaWeb——JSP标签,JSTL标签,EL表达式的使用

280 阅读2分钟

「这是我参与2022首次更文挑战的第7天,活动详情查看:2022首次更文挑战

1. EL表达式

EL(Expression Language)表达式:为了使JSP写起来更加简单。

格式:${}

三个作用:

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

2. JSTL标签

JSTL(Java server pages standarded tag library,即JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能,给Java Web开发人员提供了一个标准通用的标签库。

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

开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,整齐性,降低程序的维护难度,标签的功能和Java代码一样。

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

  • 核心标签
  • 格式化标签
  • SQL 标签
  • XML 标签
  • JSTL 函数

使用JSTL标签要导入的jar包

<dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>

再把上面两个jar包放入E:\apache-tomcat-9.0.41\lib目录

核心标签详解

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

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

< c:if>标签

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

语法格式

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

属性

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

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

测试<c:if>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入JSTL核心标签库,需要什么标签就引入什么标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<head>
    <title>Title</title>
</head>
<body>
<h4>if测试</h4>
<hr>
<form action="jsp4.jsp" method="get">
<%--使用EL表达式获取参数的值
    ${param.参数名}
--%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
</form>

<%--用JSTL标签实现if语句--%>
<c:if test="${param.username=='admin'}" var="isAdmin" scope="application">
    <c:out value="管理员登录成功"></c:out>
</c:if>
<c:if test="${param.username==null}" var="notAdmin" scope="application">
    <c:out value="请输入管理员账号"></c:out>
</c:if>
<c:if test="${param.username!='admin'&&param.username!=null}" var="isAdmin" scope="application">
    <c:out value="管理员登录失败,请重新输入"></c:out>
</c:if>
<c:out value="isAdmin"/>
</body>
</html>

< c:set>标签

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

<c:set>标签会计算表达式的值,然后使用计算结果来设置 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>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:set 标签实例</title>
</head>
<body>
<c:set var="score"  value="85"/>
<c:out value="85/>
</body>
</html>

< c:choose>, < c:when>, < c:otherwise> 标签

  • <c:choose>标签与Java 里的switch语句的功能一样,用于在众多选项中做出选择判断。

  • switch语句中有case,而<c:choose>标签中对应有<c:when>,两个都是用来判断

  • switch语句中有default,而<c:choose>标签中有``<c:otherwise>`,判断为false时被执行

语法格式

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

==注:判断的顺序为从上到下,当有两个<c:when>判断都为true时,程序会执行上面的<c:when>标签里的语句==

属性

只有<c:when>标签有属性,属性如下:

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

测试三个标签

<%@ 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>
<%--设置了一个变量var,值为60分--%>
<c:set var="score" value="${69}"/>
<c:choose>
    <c:when test="${score>=90&&score<=100}">
        <c:out value="成绩优秀"/>
    </c:when>
    <c:when test="${score>=80&&score<90}">
        <c:out value="成绩优良"/>
    </c:when>
    <c:when test="${score>=70&&score<80}">
        <c:out value="成绩还行"/>
    </c:when>
    <c:when test="${score>=60&&score<70}">
        <c:out value="成绩及格"/>
    </c:when>
    <c:when test="${score>=0&&score<60}">
        <c:out value="成绩不合格"/>
    </c:when>
    <c:otherwise>
        <c:out value="您输入的不是分数"/>
    </c:otherwise>
</c:choose>
</body>
</html>

< c:forEach>`标签

forEach 语法格式

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

    ...

属性

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

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

<c:forEach>标签测试

<%@ 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>
<h4>forEach测试</h4>
<hr>
<%
    ArrayList<Object> people = new ArrayList<>();
    people.add(0,"小红");
    people.add(1,"小明");
    people.add(2,"张三");
    people.add(3,"李四");
    people.add(4,"王五");
    //把集合放进请求里面
    request.setAttribute("list",people);

%>
<c:forEach items="${list}" var="peoples" begin="0" step="1">
    <c:out value="${peoples}"/>
</c:forEach>
</body>
</html>

在这里插入图片描述

3.JSP标签

JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护。

 jsp的常用标签有以下三个

  • <jsp:include>标签 ;把另外一个资源的输出内容插入进当前JSP页面的输出内容之中

    <jsp:include page="/common/header.jsp"></jsp:include>
    <h2>网页主体</h2>
    <jsp:include page="/common/footer.jsp"></jsp:include>
    

    将两个页面拼接到本页面,本质还是三个页面

  • <jsp:forward>标签 :把请求转发给另外一个资源。

     <%--使用<jsp:forward>标签跳转到forwarddemo02.jsp--%>
    <jsp:forward page="/hello.jsp"/>
    
  • <jsp:param>标签:向资源传递参数。

    <%--使用<jsp:param>标签向被包含的页面传递参数--%>
    <jsp:include page="/hello.jsp">
         <jsp:param name="parm1" value="hello" />
         <jsp:param name="parm2" value="gacl" />
    </jsp:include>
    <%--使用<jsp:param>标签向要跳转的页面传递参数--%>
    <jsp:forward page="/hello1.jsp">
         <jsp:param name="ref1" value="hello" />
         <jsp:param name="ref2" value="gacl" />
    </jsp:forward>