目录

  1. 什么是 JSP 表达式语言
  2. 为什么要使用表达式语言
  3. 表达式语言的基本语法
  4. 代码示例
  1. EL 的作用域与隐式对象
  2. 操作符与功能
  3. 优点与应用场景
  4. 常见问题与注意事项
  5. 参考资料与出站链接

什么是 JSP 表达式语言

JSP 表达式语言 (Expression Language, 简称 EL) 是一种在 JSP 页面中访问数据和执行简单计算的轻量级语言,引入于 JSP 2.0。它使用 ${表达式} 的形式,直接嵌入 JSP 页面,用于替代传统的脚本表达式(如 <%= %>)。EL 的设计目标是简化数据访问,使页面更简洁,避免过多 Java 代码。


为什么要使用表达式语言

  • 简洁性:比脚本表达式更直观,无需 out.print()<%= %>
  • 安全性:自动处理空值,避免 NullPointerException。
  • MVC 兼容:与 JavaBean 和作用域对象无缝集成,适合模型-视图分离。
  • 易用性:前端开发者无需掌握 Java 即可使用。

表达式语言的基本语法

  • 基本格式${表达式},例如 ${user.name}
  • 点号 (.) 和方括号 ([]) 操作符
  • ${user.name}:访问对象的属性。
  • ${user["name"]}:等价于点号,支持动态键。
  • 支持类型:访问 JavaBean 属性、集合 (List/Map)、作用域变量等。
  • 默认值:若表达式结果为 null,输出空字符串而非 “null”。

代码示例

JavaBean 示例

创建一个简单的 JavaBean 类 User

package com.example;

public class User {
    private String name;
    private int age;

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

    // Getter 和 Setter
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

JSP 中使用 EL

在 JSP 中结合 Servlet 和 EL 显示数据:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
    <title>JSP 表达式语言示例</title>
</head>
<body>
    <h1>用户信息</h1>
    <%
        // Servlet 或其他逻辑设置数据
        com.example.User user = new com.example.User("张三", 25);
        request.setAttribute("user", user);
    %>
    <!-- 使用 EL 显示数据 -->
    <p>姓名:${user.name}</p>
    <p>年龄:${user.age}</p>

    <!-- 表单参数示例 -->
    <form method="post">
        <label>输入姓名:<input type="text" name="inputName"></label>
        <input type="submit" value="提交">
    </form>
    <p>表单输入:${param.inputName}</p>
</body>
</html>

运行结果:

  • 初始显示:姓名:张三年龄:25
  • 提交表单后,表单输入 显示用户输入的姓名。

EL 的作用域与隐式对象

EL 可以访问 JSP 的作用域变量(pageScoperequestScopesessionScopeapplicationScope)和隐式对象。

作用域

  • ${user}:自动按 pagerequestsessionapplication 顺序查找。
  • 指定作用域:${requestScope.user.name}

常用隐式对象

隐式对象描述示例
param获取请求参数${param.inputName}
sessionScope访问会话作用域${sessionScope.user}
requestScope访问请求作用域${requestScope.user}
pageContext访问页面上下文${pageContext.request.method}
header获取请求头${header["User-Agent"]}

操作符与功能

EL 支持多种操作符:

  • 算术+, -, *, /, %(例如 ${user.age + 5})。
  • 关系==, !=, <, >, <=, >=(例如 ${user.age > 20})。
  • 逻辑&&, ||, !(例如 ${user.age > 18 && user.name != null})。
  • 空检查empty(例如 ${empty param.inputName} 返回 true/false)。
  • 三元运算${条件 ? 值1 : 值2}(例如 ${user.age > 18 ? "成人" : "未成年"})。

优点与应用场景

优点

  • 简洁优雅:代码更少,页面更干净。
  • 空值安全:无需手动检查 null。
  • 灵活性:支持动态属性和集合操作。

应用场景

  • 显示动态数据(如用户信息、列表)。
  • 处理表单输入(直接访问 param)。
  • 条件渲染(结合逻辑操作符)。

常见问题与注意事项

  1. EL 被禁用
  • 检查 <%@ page isELIgnored="true" %>,应设为 false(默认)。
  1. 作用域冲突
  • 同名变量可能被意外覆盖,使用明确作用域(如 requestScope)解决。
  1. 类型转换
  • EL 自动将字符串转换为数字(如 ${"10" + 5} 输出 15),但需注意异常情况。
  1. 调试困难
  • EL 表达式出错不会抛出明显异常,建议日志记录或逐步测试。
  1. 编码问题
  • 确保 JSP 文件和响应编码一致(如 UTF-8),避免乱码。

参考资料与出站链接

  1. 官方文档
  1. 学习资源
  1. 工具支持

如果您需要更复杂的 EL 示例(例如集合操作或自定义函数),请告诉我,我会进一步扩展!