使用 JSP 表达式语言(EL Expression) - 最简单
这是在 JSP 页面中直接显示时间的最简单方法,EL 表达式 可以方便地访问 Java 对象的属性和方法。

代码示例:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">获取当前时间 - EL方式</title>
</head>
<body>
<h1>使用 EL 表达式获取当前时间</h1>
<p>当前完整时间: ${pageContext.request.session.application.now}</p>
<p>更灵活的方式(使用 JSTL):</p>
<p>完整时间: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
<p>仅日期: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="yyyy-MM-dd"/></p>
<p>仅时间: <fmt:formatDate value="${pageContext.session.creationTime}" pattern="HH:mm:ss"/></p>
</body>
</html>
说明:
${pageContext.request.session.application.now}是 EL 表达式,它会调用application对象的now()方法来获取一个java.util.Date对象。- 这种方式虽然简单,但格式化比较麻烦,通常需要配合 JSTL 的
<fmt:formatDate>标签来格式化日期。 - 注意:为了使用 JSTL,你需要在 JSP 页面顶部引入标签库:
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
使用 JSTL(JSP Standard Tag Library) - 推荐用于显示
JSTL 是一套标准标签库,可以让你在 JSP 页面中减少 Java 代码的编写,使页面更整洁。<fmt:formatDate> 是专门用于格式化日期的标签。
代码示例:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">获取当前时间 - JSTL方式</title>
</head>
<body>
<h1>使用 JSTL fmt 标签获取当前时间</h1>
<%
// 在 JSP 脚本片段中获取当前时间
java.util.Date now = new java.util.Date();
%>
<!-- 使用 JSTL 的 fmt 标签来格式化上面获取的 now 对象 -->
<p>当前完整时间: <fmt:formatDate value="<%= now %>" pattern="yyyy年MM月dd日 HH时mm分ss秒"/></p>
<p>其他格式示例:</p>
<p>标准格式: <fmt:formatDate value="<%= now %>" type="both"/></p>
<p>仅日期: <fmt:formatDate value="<%= now %>" type="date"/></p>
<p>仅时间: <fmt:formatDate value="<%= now %>" type="time"/></p>
</body>
</html>
说明:
- 我们首先在 JSP 的脚本片段
<% ... %>中用 Java 代码new java.util.Date()获取了当前时间对象。 - 然后使用
<fmt:formatDate>标签的value属性接收这个日期对象,并用pattern属性定义显示的格式。 pattern中的常用占位符:yyyy: 四位年份 (e.g., 2025)MM: 两位月份 (01-12)dd: 两位日期 (01-31)HH: 24小时制的小时 (00-23)mm: 分钟 (00-59)ss: 秒 (00-59)
- 这是在 JSP 页面中显示时间的最佳实践,因为它将逻辑(获取时间)和表现(格式化显示)清晰地分离开来。
在 Java 代码中获取(在 Servlet 或后台逻辑中)
如果你需要在业务逻辑中处理时间(比如存入数据库、进行计算等),应该在 Servlet 或 JavaBean 的后端代码中获取,而不是在 JSP 视图层。
示例(在 Servlet 中):
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TimeServlet")
public class TimeServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 在后端获取当前时间
Date currentTime = new Date();
// 2. 可以进行一些业务逻辑处理,比如格式化
// ...
// 3. 将时间对象存入 request 作用域,传递给 JSP 页面
request.setAttribute("serverTime", currentTime);
// 4. 转发到 JSP 页面进行显示
request.getRequestDispatcher("/showTime.jsp").forward(request, response);
}
}
对应的 JSP 页面 (showTime.jsp):

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">显示后端传递的时间</title>
</head>
<body>
<h1>从 Servlet 传递过来的时间</h1>
<!-- 直接从 request 作用域中获取并显示 -->
<p>服务器当前时间: <fmt:formatDate value="${serverTime}" pattern="yyyy-MM-dd HH:mm:ss"/></p>
</body>
</html>
说明:
- 这是最规范、最推荐的方式,遵循了 MVC(Model-View-Controller)设计模式。
- Controller (Servlet): 负责获取数据(时间)和处理业务逻辑。
- Model (JavaBean/数据): 时间数据本身。
- View (JSP): 只负责展示数据,不包含任何业务逻辑。
- 这种方式使代码更易于维护、测试和重用。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| EL 表达式 | 书写极其简单 | 格式化能力弱,不够灵活 | 快速原型、简单的页面展示 |
| JSTL 标签 | 页面整洁,格式化功能强大,符合 MVC 思想 | 需要引入 JSTL 库 | JSP 页面显示时间的首选方式 |
| Java 代码 (Servlet) | 逻辑清晰,与业务逻辑结合紧密,可维护性高 | 需要创建 Servlet,步骤稍多 | 所有需要后台处理时间的正式项目 |
最终建议:
- 如果只是在 JSP 页面上显示一个格式化的时间,请使用 JSTL 的
<fmt:formatDate>- 如果你的时间需要用于业务逻辑(如计算、存储),请在 Servlet 或后端 Java 类 中获取,然后通过
request.setAttribute()传递给 JSP 页面进行显示,这是最专业、最健壮的做法。 - 如果你的时间需要用于业务逻辑(如计算、存储),请在 Servlet 或后端 Java 类 中获取,然后通过
