16、JavaEE核心技术-EL与 JSTL

EL与 JSTL 实践


一. EL(Expression Language)

EL(表达式语言)是 JSP 2.0 中引入的一种简单的脚本语言,用于在 JSP 页面中简化数据的访问和显示。它通过一种类似于 JavaScript 的语法,允许开发者在 JSP 页面中直接访问 JavaBean 的属性、集合、甚至是 Java 类的静态字段和方法。


1、 EL 的基本语法

EL 表达式的语法格式为 ${},例如:

${requestScope.userName}  
2、 EL 的变量

EL 变量是自动创建的,您无需显式声明。以下是一些常见的变量:

  1. 隐式变量

    • pageScope:当前页面的作用域。
    • requestScope:请求作用域。
    • sessionScope:会话作用域。
    • applicationScope:应用作用域。
  2. 用户定义变量
    使用 JSTL 的 标签可以自定义变量,例如:

      
    ${title}  
    

3、EL 的操作符

EL 支持多种操作符,包括:

  • 算术操作符+, -, *, /, %, div, mul
  • 比较操作符==, eq, !=, neq, >, gt, <, lt
  • 逻辑操作符&&, and, ||, or, not, !
  • 空检查操作符empty(检查对象是否为空)。

示例

${10 + 5}    
${user.age > 18}    
${!empty user.name}    

4、EL 的使用场景
  1. 访问 JavaBean 的属性

      
    用户名称:${user.name}  
    
  2. 遍历集合

      
        ${user.name}  
      
    
  3. 条件判断

      
        成人用户  
      
    
  4. 格式化输出

      
    

二. JSTL(JavaServer Pages Standard Tag Library)

JSTL 是 Java 社区为了简化 JSP 页面开发而推出的一组标准标签库。它提供了多种功能标签,涵盖了常见的 Web 开发需求。


1、 JSTL 的核心标签库

JSTL 分为四个主要模块:

  1. 核心标签库:用于流程控制、集合操作、数据处理等。
  2. 格式化标签库:用于日期、时间、数字等格式化。
  3. 数据库标签库:用于简化 JDBC 操作。
  4. XML 标签库:用于 XML 数据的处理。
核心标签库(core)

以下是核心标签库中常用的标签:


  1. 用于输出数据,支持 HTML 转义。

      
    

  2. 用于遍历集合或数组。

      
        ${status.index}: ${user.name}  
      
    

  3. 用于遍历字符串标记。

      
        ${token}  
      
    

  4. 用于条件判断。

      
        成人用户  
      
    

  5. 用于多分支条件判断。

      
        成人用户  
        未成年用户  
      
    

  6. 用于设置变量。

      
    ${title}  
    

  7. 用于删除变量。

      
    

  8. 用于导入其他资源(如 HTML 文件、JSP 页面)。

      
    

  9. 用于在导入资源时传递参数。

      
          
      
    

  10. 用于页面跳转。

      
    

格式化标签库(fmt)
  1. fmt:setLocale
    设置Locale。

      
    
  2. fmt:bundle
    加载资源文件。

      
          
      
    
  3. fmt:formatDate
    格式化日期。

      
    
  4. fmt:formatNumber
    格式化数字。

      
    

数据库标签库(sql)
  1. sql:setDataSource
    设置数据源。

      
    
  2. sql:query
    执行查询。

      
        ${users}  
      
    
  3. sql:update
    执行更新(插入、删除、修改)。

      
    

2、 JSTL 的使用场景
  1. 简化流程控制

      
        

    用户 ${user.name}

  2. 格式化数据

      
    
  3. 数据库操作

      
          
            ${user.name}  
          
      
    
  4. 国际化

      
      
        


三. 实践:数据显示与分页

以下是一个完整的实践示例,展示如何使用 EL 和 JSTL 实现数据显示与分页功能。


1、 准备工作
  1. 创建数据库表

    CREATE TABLE users (  
        id INT AUTO_INCREMENT PRIMARY KEY,  
        name VARCHAR(50),  
        email VARCHAR(100)  
    );  
    
  2. 添加测试数据

    INSERT INTO users (name, email) VALUES  
        ('John Doe', '[email protected]'),  
        ('Jane Smith', '[email protected]'),  
        ('Bob Johnson', '[email protected]');  
    
  3. 添加依赖
    pom.xml 中添加 JSTL 和 MySQL Connector/J 的依赖:

    <dependency>  
        <groupId>jstlgroupId>  
        <artifactId>jstlartifactId>  
        <version>1.2version>  
    dependency>  
    <dependency>  
        <groupId>mysqlgroupId>  
        <artifactId>mysql-connector-javaartifactId>  
        <version>8.0.33version>  
    dependency>  
    

2、 JSP 页面实现

以下是一个完整的 JSP 页面示例,展示数据显示和分页功能。

<%@ page language="java" contentType="text/html; charset=UTF-8"  
         pageEncoding="UTF-8" import="java.util.*" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>  

  
  
    用户管理 - 数据显示与分页  
  
  
    

用户管理系统

<% // 定义每页显示的记录数 int pageSize = 5; // 获取当前页码(默认为第 1 页) int currentPage = 1; if (request.getParameter("currentPage") != null) { currentPage = Integer.parseInt(request.getParameter("currentPage")); } // 总记录数 int totalRecords = 0; // 计算总记录数 try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM users"); if (rs.next()) { totalRecords = rs.getInt(1); } rs.close(); stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } %>

用户列表(第 ${currentPage} 页 / 共 ${totalRecords} 条记录)

序号 用户姓名 用户邮箱
${status.index + 1} ${user.name} ${user.email}

3、 功能说明
  1. 数据显示
    • 使用 标签执行 SQL 查询,获取用户数据。
    • 使用 标签遍历结果集,显示用户信息。
  2. 分页功能
    • 计算总记录数和每页显示的记录数。
    • 使用 标签生成分页导航链接。
    • 通过 currentPage 参数控制当前显示的页码。
  3. EL 的使用
    • 使用 EL 表达式 ${} 来访问变量和显示数据。
    • 支持复杂的逻辑操作和格式化输出。

四. 总结

通过本讲义,您已经掌握了 EL 和 JSTL 的核心功能及其在实际开发中的应用。EL 和 JSTL 的优势在于:

  1. 简化代码:通过标签代替 Java 脚本,降低代码复杂度。
  2. 提高可维护性:将逻辑和展示分离,使代码更易维护。
  3. 跨平台支持:支持多种数据源和数据库。

你可能感兴趣的:(java-ee,java)