最全EL表达式和JSTL标签理解

EL表达式

1. EL 获取变量的值

语法:

${变量名}

案例:

创建一个index.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>登录</title>
        </head>
        <body>
            <%--form表单的action属性不能有/,如果加上/,那么请求的地址就会去掉工程名--%>
            <form action="login" method="post">
                <div>
                    <input type="text" name="username">
                </div>
                <div>
                    <input type="password" name="password">
                </div>
                <div>
                    <input type="text" name="name">
                </div>
                <div>
                    <input type="submit" value="登录">
                </div>
            </form>
    
        </body>
    </html>

创建LoginServlet:

 package jstl;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.io.IOException;
    //
    //启动的时候就会创建Servlet的对象,这样可以提升用户的体验度。第一次用户访问的时候,就省去了创建对象和初始化的过程
    @WebServlet(name = "", value = "/login",loadOnStartup = 1)
    public class LoginServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String name = request.getParameter("name");
            HttpSession session = request.getSession();//获取会话对象
            session.setAttribute("username",username);
            //session中不能存储隐私数据,存储后可能会导致数据泄露
            session.setAttribute("password",password);
            //登录成功,需要重新定位资源,新定位的资源就是进入主页面
            session.setAttribute("name",name);
            response.sendRedirect("main.jsp");
        }
    }

创建main.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
        <head>
            <title>主页面</title>
        </head>
        <body>
            <%-- 这里就是用了el表达式 大括号中的表达式表示的意思是:在session的作用范围内去取一个名字为name的属性值 --%>
            <div>当前登录用户:${sessionScope.name}</div>
            <div>当前登录用户用户名: ${sessionScope.username}</div>
        </body>
    </html>

运行结果:

在这里插入图片描述
在这里插入图片描述

结论:

不论变量是存储在 request 中,还是存储在 session 中,都可以使用 EL 表达式进行取值。

2. EL 隐式对象

思考:

如果 request 和 session 中都存有相同的属性值,那么使用 EL 取值的时候,是从哪个对象中取值呢?

结论:

如果 reqeust 和 session 中都存有相同属性的变量,那么 EL 表达式会从 reqeust 中进行取值。如果需要从session 中取值,怎么取呢?
需要使用 EL 隐式对象

可以通过隐式对象来指定 EL 的取值的范围:

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
    //page范围内的变量是存储在pageContext中的
    pageContext.setAttribute("number", 9);//这里报错是缺少servlet-api.jar和jsp-api.jar这两个包
    request.setAttribute("number", 10);
    session.setAttribute("number", 11);
    application.setAttribute("number", 12);
    %>
    
    <html>
        <head>
            <title>主页面</title>
        </head>
        <body>
    
            <%-- 这里就是用了el表达式 大括号中的表达式表示的意思是:在session的作用范围内去取一个名字为name的属性值 --%>
            <div>当前登录用户:${sessionScope.name}</div>
            <div>当前登录用户用户名: ${sessionScope.username}</div>
            <%--域对象:page、request、session、applicaiton四个,它们的作用范围依次增大。
        如果在使用el表达式取值的时候,没有指定作用域,那么就默认从page开始查找,如果
        没有找到,那么就会从请求中去查找;如果请求中也没有,那么就会去session中查找;
        如果session中也没有,那么就会去applicaiton中查找。如果还没有找到,那么就是null--%>
            <div>number的值:${number}</div>
            <div>number的值:${pageScope.number}</div>
            <div>number的值:${requestScope.number}</div>
            <div>number的值:${sessionScope.number}</div>
            <div>number的值:${applicationScope.number}</div>
    
        </body>
    </html>

运行结果:

    当前登录用户:123
    当前登录用户用户名: admin
    number的值:9
    number的值:9
    number的值:10
    number的值:11
    number的值:12

结论:

域对象:page、request、session、applicaiton四个,它们的作用范围依次增大。如果 EL 未指定隐式对象,则取值默认从 pageScope取值,如果未找到,则从requestScope取值,如果还是未找到,则从sessionScope取值,如果依然未找到,则从applicationScope取值,如果最终都未找到,那么返回 null值。

jsp中存在九大隐式对象:

对象的创建是在tomcat中进行创建出来的,当jsp页面进行第一次被加载进入到tomcat的容器中的时候,进行翻译成servlet的时候自动创建九大对象,每个jsp页面的翻译都会进行创建对象

隐式对象描述
pagethis代表的时当前的servlet对象
configservletConfig实例化对象
applicationservletContext实例化对象
requestHttpquest实例化的对象
responseHttpreqponse实例化的对象
sessionHttpSession实例化的对象
outjspwriter实例化对象,用于向页面进行输出流的对象
pageContext当前的jsp页面的环境的实例化对象
exceptionException的实例化对象,只有当对应的设定了erroPage页面才能输出

jsp中的四大作用域的表现形式(都是枚举的静态对象,使用的是类名进行调用PageContext):

域对象表现形式描述
Application_Scope代表当前的web应用的域 servletContext域
Session_Scope代表当前的会话域 seesion域
request_Scope代表当前请求域 request域
page_Scope代表当前的jsp中的pageContext域 , pageContext域

Servlet中的四大域作用对象:

域作用对象描述
request域HttpRequestServlet对象实例化对象
response域HttpResponseServlet对象实例化对象
session域HttpSeesion对象实例化对象 存储在服务器 (请求进行携带唯一一个对应的域队医每个对象)
ServletContext域web应用的最大的域的形成,可以访问任何的对象和servlet对象,进行数据的存储范围

注意:

cookie本身不是域,只是能够通过在cookie中存储数据,数据能够进行遍历的获取,存在的是浏览器中的暂存区

EL中的11大内置的对象:前提中必须在jsp页面中才是有效的

四大内置作用域对象
		pageScope  ----> PageContext域对象
		requestScope--->Request域对象
		sessionScope---->Session域对象
		ApplicationScope---->代表当前的web应用servletContext对象域

		参数对象
		param  ----> 获取当前请求中全体请求参数的对象 map<String,String>
		paramValues ----->代表当前请求中全体请求参数组成的Map<String,String[]>
		
		头部信息
		header ----> 代表请求中所有请求头组成的Map<String,String>的内置对象
		headerValues ----> 代表请求中所有请求对象组成的Map<String,String[]>对象
		
		获取初始化信息
		initParam----> 代表当前web应用初始化参数的内置对象
		
		获取所有的cookie对象
		cookie ----> 代表请求中所有cookie组成的Map<String,Cookie>

		代表当前页面的PageContext对象 
		pageContext--->代表当前页面的pageContext对象

3. EL 获取对象的属性值

语法:

<!-- Java中的访问方式 -->
${ 对象名.属性名 }

<!-- JS中的访问方式 -->
${ 对象名["属性名"] }

测试:

创建一个User类:

package jstl.pojo;
    
    public class User {
    
        private String username;
    
        private String password;
    
        private String name;
    
        private int role; //1-管理员  2-普通用户
    
        private int state; // 0-冻结 1-正常  2-封禁
    
        public int getState() {
            return state;
        }
    
        public void setState(int state) {
            this.state = state;
        }
    
        public int getRole() {
            return role;
        }
    
        public void setRole(int role) {
            this.role = role;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
<%@ page import="jstl.pojo.User" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
    //page范围内的变量是存储在pageContext中的
    pageContext.setAttribute("number", 9);//这里报错是缺少servlet-api.jar和jsp-api.jar这两个包
    request.setAttribute("number", 10);
    session.setAttribute("number", 11);
    application.setAttribute("number", 12);
    
    User user =new User();
    user.setName("李四");
    user.setUsername("lisi");
    user.setPassword("abcde");
    session.setAttribute("currentUser", user);
    %>
    
    <html>
        <head>
            <title>主页面</title>
        </head>
        <body>
    
            <%-- 这里就是用了el表达式 大括号中的表达式表示的意思是:在session的作用范围内去取一个名字为name的属性值 --%>
            <div>当前登录用户:${sessionScope.name}</div>
            <div>当前登录用户用户名: ${sessionScope.username}</div>
            <%--域对象:page、request、session、applicaiton四个,它们的作用范围依次增大。
        如果在使用el表达式取值的时候,没有指定作用域,那么就默认从page开始查找,如果
        没有找到,那么就会从请求中去查找;如果请求中也没有,那么就会去session中查找;
        如果session中也没有,那么就会去applicaiton中查找。如果还没有找到,那么就是null--%>
            <div>number的值:${number}</div>
            <div>number的值:${pageScope.number}</div>
            <div>number的值:${requestScope.number}</div>
            <div>number的值:${sessionScope.number}</div>
            <div>number的值:${applicationScope.number}</div>
    
            <div>对象user中的属性访问: name => ${sessionScope.currentUser.name}</div>
            <div>对象user中的属性访问: username => ${sessionScope.currentUser.username}</div>
            <div>对象user中的属性访问: password => ${sessionScope.currentUser.password}</div>
    
        </body>
    </html>

运行结果:

    当前登录用户:123
    当前登录用户用户名: admin
    number的值:9
    number的值:9
    number的值:10
    number的值:11
    number的值:12
    对象user中的属性访问: name => 李四
    对象user中的属性访问: username => lisi
    对象user中的属性访问: password => abcde

4. EL 获取 List 集合中的值

语法:

${ 集合名称[下标] }

测试:

<%@ page import="jstl.pojo.User" %>
    <%@ page import="java.util.Arrays" %>
    <%@ page import="java.util.List" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
    //page范围内的变量是存储在pageContext中的
    pageContext.setAttribute("number", 9);//这里报错是缺少servlet-api.jar和jsp-api.jar这两个包
    request.setAttribute("number", 10);
    session.setAttribute("number", 11);
    application.setAttribute("number", 12);
    
    User user =new User();
    user.setName("李四");
    user.setUsername("lisi");
    user.setPassword("abcde");
    session.setAttribute("currentUser", user);
    
    List<String> names = Arrays.asList("张三", "李四", "王五", "赵六");
    request.setAttribute("names", names);
    %>
    
    <html>
        <head>
            <title>主页面</title>
        </head>
        <body>
    
            <%-- 这里就是用了el表达式 大括号中的表达式表示的意思是:在session的作用范围内去取一个名字为name的属性值 --%>
            <div>当前登录用户:${sessionScope.name}</div>
            <div>当前登录用户用户名: ${sessionScope.username}</div>
            <%--域对象:page、request、session、applicaiton四个,它们的作用范围依次增大。
        如果在使用el表达式取值的时候,没有指定作用域,那么就默认从page开始查找,如果
        没有找到,那么就会从请求中去查找;如果请求中也没有,那么就会去session中查找;
        如果session中也没有,那么就会去applicaiton中查找。如果还没有找到,那么就是null--%>
            <div>number的值:${number}</div>
            <div>number的值:${pageScope.number}</div>
            <div>number的值:${requestScope.number}</div>
            <div>number的值:${sessionScope.number}</div>
            <div>number的值:${applicationScope.number}</div>
    
            <div>对象user中的属性访问: name => ${sessionScope.currentUser.name}</div>
            <div>对象user中的属性访问: username => ${sessionScope.currentUser.username}</div>
            <div>对象user中的属性访问: password => ${sessionScope.currentUser.password}</div>
    
            <div>访问集合:0 => ${requestScope.names[0]}</div>
            <div>访问集合:1 => ${requestScope.names[1]}</div>
            <div>访问集合:2 => ${requestScope.names[2]}</div>
            <div>访问集合:3 => ${requestScope.names[3]}</div>
    
        </body>
    </html>

运行结果:

    当前登录用户:123
    当前登录用户用户名: admin
    number的值:9
    number的值:9
    number的值:10
    number的值:11
    number的值:12
    对象user中的属性访问: name => 李四
    对象user中的属性访问: username => lisi
    对象user中的属性访问: password => abcde
    访问集合:0 => 张三
    访问集合:1 => 李四
    访问集合:2 => 王五
    访问集合:3 => 赵六

5. EL 获取 Map 集合中的值

语法:

<!-- Java中的访问方式 -->
${ 集合名称.键名 }

<!-- JS中的访问方式 -->
${ 集合名称["键名"] }

测试:

 <%@ page import="jstl.pojo.User" %>
    <%@ page import="java.util.Arrays" %>
    <%@ page import="java.util.List" %>
    <%@ page import="java.util.HashMap" %>
    <%@ page import="java.util.Map" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
    //page范围内的变量是存储在pageContext中的
    pageContext.setAttribute("number", 9);//这里报错是缺少servlet-api.jar和jsp-api.jar这两个包
    request.setAttribute("number", 10);
    session.setAttribute("number", 11);
    application.setAttribute("number", 12);
    
    User user =new User();
    user.setName("李四");
    user.setUsername("lisi");
    user.setPassword("abcde");
    session.setAttribute("currentUser", user);
    
    List<String> names = Arrays.asList("张三", "李四", "王五", "赵六");
    request.setAttribute("names", names);
    
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("a", 10);
    map.put("b", 11);
    map.put("c", 12);
    map.put("d", 13);
    application.setAttribute("map", map);
    %>
    
    <html>
        <head>
            <title>主页面</title>
        </head>
        <body>
    
            <%-- 这里就是用了el表达式 大括号中的表达式表示的意思是:在session的作用范围内去取一个名字为name的属性值 --%>
            <div>当前登录用户:${sessionScope.name}</div>
            <div>当前登录用户用户名: ${sessionScope.username}</div>
            <%--域对象:page、request、session、applicaiton四个,它们的作用范围依次增大。
        如果在使用el表达式取值的时候,没有指定作用域,那么就默认从page开始查找,如果
        没有找到,那么就会从请求中去查找;如果请求中也没有,那么就会去session中查找;
        如果session中也没有,那么就会去applicaiton中查找。如果还没有找到,那么就是null--%>
            <div>number的值:${number}</div>
            <div>number的值:${pageScope.number}</div>
            <div>number的值:${requestScope.number}</div>
            <div>number的值:${sessionScope.number}</div>
            <div>number的值:${applicationScope.number}</div>
    
            <div>对象user中的属性访问: name => ${sessionScope.currentUser.name}</div>
            <div>对象user中的属性访问: username => ${sessionScope.currentUser.username}</div>
            <div>对象user中的属性访问: password => ${sessionScope.currentUser.password}</div>
    
            <div>访问集合:0 => ${requestScope.names[0]}</div>
            <div>访问集合:1 => ${requestScope.names[1]}</div>
            <div>访问集合:2 => ${requestScope.names[2]}</div>
            <div>访问集合:3 => ${requestScope.names[3]}</div>
    
            <div>访问map:a => ${applicationScope.map['a']}</div>
            <div>访问map:b => ${applicationScope.map.b}</div>
            <div>访问map:c => ${applicationScope.map['c']}</div>
            <div>访问map:d => ${applicationScope.map['d']}</div>
        </body>
    </html>

运行结果:

    当前登录用户:123
    当前登录用户用户名: admin
    number的值:9
    number的值:9
    number的值:10
    number的值:11
    number的值:12
    对象user中的属性访问: name => 李四
    对象user中的属性访问: username => lisi
    对象user中的属性访问: password => abcde
    访问集合:0 => 张三
    访问集合:1 => 李四
    访问集合:2 => 王五
    访问集合:3 => 赵六
    访问map:a => 10
    访问map:b => 11
    访问map:c => 12
    访问map:d => 13

6. EL 表达式中的操作符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试:

<div>EL表达式中的操作符:${pageScope.number > 5}</div>
<div>EL表达式中的操作符:${pageScope.number != 5}</div>
<div>EL表达式中的操作符:${pageScope.number - 5}</div>
<div>EL表达式中的操作符:${pageScope.number > 5 && pageScope.number < 10}</div>
<div>EL表达式中的操作符:${pageScope.number > 5 and pageScope.number < 10}</div>

运行结果:

EL表达式中的操作符:true
EL表达式中的操作符:true
EL表达式中的操作符:4
EL表达式中的操作符:true
EL表达式中的操作符:true

JSTL 标签

1. 什么是 JSTL

JSTL 全称为 JavaServerPages Standard Tag Library,意味 JSP标准标签库

2. 为什么要使用JSTL

EL 能够简化 jsp 页面编码,但是,却不能进行逻辑判断,也不能进行循环处理,为了弥补 EL 这方面的不足,jsp 提供了 JSTL 标签,JSTL 标签通常都会与 EL 配合使用,解决页面的逻辑问题。

3. JSTL 标签库分类

在这里插入图片描述

经常使用的标签就是核心标签库和格式化标签库

4. JSTL 标签库的使用步骤

  • 引入JSTL标签库支持的jar包:jstl.jar 和 standard.jar 需要将这两个包拷贝至tomcat下的lib目录中
  • jsp 页面引入标签库,如
    <%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”%>

5. JSTL 核心标签库

5.1 通用标签
在这里插入图片描述

  • <c:set> 标签
    语法:
<!-- 将value值存储到范围为scope的变量variable中 -->
<c:set var="变量名" value="变量值" scope="变量的作用范围" />
<!-- 将value值设置到对象的属性中 -->
<c:set target="目标对象" property="对象属性" value="对象属性值" />

案例:

<% 
    request.setAttribute("user", new User());
%>
<c:set var="user" value="<%=new User()%>" scope="page" />
<c:set target="${pageScope.user}" property="username" value="admin" />
<div>
    页面中的${pageScope.user.username}
    请求中的${requestScope.user.username}
</div>
  • <c:remove> 标签

    语法:

 <c:remove var="变量名" scope="变量的作用范围" />

案例:

 <!-- 删除页面范围内的变量user -->
 <c:remove var="user" scope="page"/>

5.2 条件标签

  • <c:if>标签
    语法:
<c:if test="条件表达式" var="存储表达式的结果的变量" scope="变量的作用范围"></c:if>

案例:

<c:if test="${empty pageScope.user}" var="result" scope="request">页面中的user变量不存在</c:if>
请求中存储的检测结果是${requestScope.result}
  • <c:choose>标签
    语法:
<c:choose>
     <c:when test="条件表达式"></c:when>
     <c:when test="条件表达式"></c:when>
     <c:otherwise></c:otherwise>
</c:choose>

案例:

<c:choose>
     <c:when test="${requestScope.user.password == null}">
     请求中的user对象的password属性为空
     </c:when>
     <c:when test="${requestScope.user.password == ''}">
     请求中的user对象的password属性为空字符串
     </c:when>
     <c:otherwise>
     请求中的user对象的password属性为${requestScope.user.password}
     </c:otherwise>
</c:choose>
  • <c:forEach>标签
    语法:
<c:forEach items="遍历的集合" var="每次遍历的对象" begin="遍历开始的位置" end="遍历结束的位置" step="遍历的步长">
</c:forEach>

案例:

<%
   	List<Integer> numbers = new ArrayList<Integer>();
   	for(int i=0; i<10; i++){
       	numbers.add(i);
       }
   	request.setAttribute("nums", numbers);
%>
<c:forEach items="${nums}" var="number" begin="2" end="8" step="3">
      div>${number}</div>
</c:forEach>
<%
	Map<String,Integer> scores = new HashMap<String,Integer>();
	for(int i=0; i<10; i++){
        scores.put("test"+i ,i*10);
    }
	session.setAttribute("scores", scores);
 %>
<c:forEach items="${scores}" var="map">
    <div>${map.key}=>${map.value}</div>
</c:forEach>

6. 格式化标签

  • fmt:formatDate标签
    语法:
 <fmt:formatDate value="日期对象" pattern="日期格式" />

案例:

<%
	request.setAttribute("time", new Date());
%>
<div>
    当前时间为<fmt:formatNumber value="${time}" pattern="yyyy-MM-dd"/>
</div>

  • fmt:formatNumber标签
    语法:
<!-- 货币格式的数字 -->
<fmt:formatNumber value="数字" type="currency" />

<!-- 数字格式化 -->
<fmt:formatNumber value="数字" type="number" maxIntegerDigits="整数部分位数" />
<fmt:formatNumber value="数字" type="number" maxFractionDigits="小数部分位数" />
<fmt:formatNumber value="数字" type="number" pattern="数字格式" />

<!-- 数字百分比 -->
<fmt:formatNumber value="数字" type="percent" maxIntegerDigits="整数部分位数" />
<fmt:formatNumber value="数字" type="percent" maxFractionDigits="小数部分位数" />

综合测试:

创建Student类:

package jstl.pojo;

public class Student {

    private String name;

    private String sex;

    private int age;

    public String getName() {
        return name;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

创建student.jsp:

<%@ page import="jstl.pojo.User" %>
<%@ page import="java.util.List" %>
<%@ page import="jstl.pojo.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Random" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--<%@ taglib prefix="c" uri="/WEB-INF/c.tld" %>--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%--这行代码相当于在小脚本中写的pageContext.setAttribute("name", "张三");--%>
        <%--在页面范围内定义了一个变量,值就是张三--%>
        <c:set var="name" scope="page" value="张三" />
        <%
        User user = new User();

        Random r = new Random();
        List<Student> students= new ArrayList<Student>();
        for (int i = 0; i < 10; i++) {
            Student s = new Student();
            s.setName("学生" + i);
            s.setSex(i % 2 == 0 ? "男" : "女");
            s.setAge(r.nextInt(80) + 20);
            students.add(s);
        }
        session.setAttribute("students", students);

        request.setAttribute("now", new Date());
        %>
        <%--在session定义了一个变量u,值就是user--%>
        <c:set var="u" scope="session" value="<%= user %>" />
        <%--这行代码就是为对象u的属性进行赋值--%>
        <c:set target="${sessionScope.u}" property="name" value="张三" />
        <c:set target="${sessionScope.u}" property="username" value="admin" />
        <c:set target="${sessionScope.u}" property="password" value="123456" />
        <%--c:set标签在开发中几乎处于不用的状态--%>

        <%--从session中将变量u移除--%>
        <c:remove var="u" scope="session"/>

        <%--条件标签,主要用于控制页面元素的展示--%>
        <c:if test="${sessionScope.user != null}">
            <div>${sessionScope.user.username}</div>
        </c:if>

        <%--这个表示就是if-else--%>
        <c:choose>
            <c:when test="${sessionScope.user.role == 1}">
                管理员
            </c:when>
            <c:otherwise>普通用户</c:otherwise>
        </c:choose>

        <%--这个表示就是多重if-else--%>
        <c:choose>
            <c:when test="${sessionScope.user.state == 0}">
                冻结
            </c:when>
            <c:when test="${sessionScope.user.state == 1}">
                正常
            </c:when>
            <c:otherwise>封禁</c:otherwise>
        </c:choose>

        <div>
            当前系统时间:
            <fmt:formatDate value="${requestScope.now}" pattern="yyyy-MM-dd HH:mm:ss" />
        </div>
        <form action="searchStudent" method="get">
            <input type="text" name="name">
            <input type="submit" value="查询">
        </form>
        <table>
            <thead>
                <tr>
                    <td>姓名</td>
                    <td>性别</td>
                    <td>年龄</td>
                </tr>
            </thead>
            <tbody>
                <%--遍历的时候,每次遍历取的变量名用var属性表示,遍历开始的位置begin表示,遍历结束的位置用end表示
    遍历每次更新的步长用step表示--%>
                <%--        <c:forEach items="${sessionScope.students}" var="stu" begin="0" end="5" step="2">--%>
                <%--            <tr>--%>
                <%--                <td>${stu.name}</td>--%>
                <%--                <td>${stu.sex}</td>--%>
                <%--                <td>${stu.age}</td>--%>
                <%--            </tr>--%>
                <%--        </c:forEach>--%>
                <c:forEach items="${sessionScope.students}" var="stu">
                    <tr>
                        <td>${stu.name}</td>
                        <td>${stu.sex}</td>
                        <td>${stu.age}</td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </body>
</html>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值