JSP 教程(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Web 开发领域,JavaServer Pages(JSP)作为一种结合 Java 与 HTML 的技术,为开发者提供了一种高效构建动态网页的解决方案。无论是编程初学者还是有一定经验的开发者,学习 JSP 教程都能快速掌握如何将静态页面转化为动态交互应用。本文将从基础概念到实战案例,结合形象比喻与代码示例,逐步解析 JSP 的核心知识点,帮助读者搭建起系统化的知识框架。


什么是 JSP?

JSP 是一种服务器端技术,允许开发者在 HTML 页面中嵌入 Java 代码,实现动态内容生成。可以将其想象为一位“翻译官”:当用户访问 JSP 页面时,服务器会先将页面中的 Java 代码翻译成 Servlet(Java 类),再执行并返回最终的 HTML 响应。这种设计既保留了 HTML 的直观性,又赋予了 Java 的强大逻辑处理能力。

JSP 的核心优势

  1. 开发效率高:无需从零编写 Servlet,直接在 HTML 中嵌入逻辑代码。
  2. 可维护性好:前端与后端代码分离,便于团队协作。
  3. 跨平台兼容:基于 Java 的特性,可在多种服务器环境中运行。

JSP 的生命周期

理解 JSP 的生命周期如同掌握其“工作流程”。以下是 JSP 从加载到销毁的六个阶段:

  1. 翻译阶段:JSP 文件被转换为一个 Servlet 源文件(以 .java 结尾)。
  2. 编译阶段:Servlet 源文件被编译为字节码(.class 文件)。
  3. 实例化:Servlet 实例被创建。
  4. 初始化:执行 init() 方法,初始化资源(如数据库连接)。
  5. 请求处理:每次用户请求时,执行 service() 方法生成响应内容。
  6. 销毁:执行 destroy() 方法释放资源。

比喻:这一过程类似于工厂流水线——原材料(JSP 文件)经过翻译、加工(编译)、组装(实例化),最终产出成品(动态网页),而销毁则是清理生产线。


JSP 基本语法与动态内容

JSP 通过 <% %><%= %> 等标签实现 Java 代码与 HTML 的混合编写。以下通过案例演示如何输出动态内容:

<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<html>
<head><title>动态输出示例</title></head>
<body>
    <h1>当前时间:<%= new java.util.Date() %></h1>
    <%
        String greeting = "你好,欢迎访问!";
        out.println("<p>" + greeting + "</p>");
    %>
</body>
</html>

关键语法说明

标签功能说明
<% %>嵌入 Java 代码块
<%= %>输出 Java 表达式的结果
<%@ page %>定义页面指令(如编码、导入类)

内置对象详解

JSP 提供了 9 个内置对象(如 requestresponse),无需显式声明即可使用。它们如同“快递员”般传递数据:

常用内置对象与作用

对象作用描述
request存储客户端请求信息(如表单数据)
response控制服务器对客户端的响应
session管理用户会话状态(如购物车数据)
out输出内容到客户端(类似 System.out

案例:通过 request.getParameter() 获取表单输入:

<% 
    String username = request.getParameter("username"); 
    if (username != null) { 
        out.println("用户名:" + username); 
    } 
%>  

JSP 与 Servlet 的协作

JSP 与 Servlet 常被误解为“替代关系”,实则二者相辅相成:

  • Servlet 负责核心业务逻辑(如数据库操作)。
  • JSP 负责视图渲染(如展示数据)。

案例:用户登录流程:

  1. 前端页面login.html 提供表单输入。

    <form action="LoginServlet" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        <input type="submit" value="登录">
    </form>
    
  2. Servlet 处理逻辑LoginServlet.java 验证用户凭证。

    @WebServlet("/LoginServlet")
    public class LoginServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, 
                             HttpServletResponse response) 
                             throws ServletException, IOException {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            if ("admin".equals(username) && "123456".equals(password)) {
                response.sendRedirect("success.jsp");
            } else {
                response.sendRedirect("error.jsp");
            }
        }
    }
    
  3. JSP 响应页面success.jsp 展示欢迎信息。

    <h1>登录成功!欢迎,<%= request.getParameter("username") %>!</h1>
    

实战案例:动态生成排行榜

假设需开发一个“用户积分排行榜”,可通过以下步骤实现:

步骤 1:模拟数据

在 Servlet 中生成模拟积分数据:

List<User> users = Arrays.asList(
    new User("Alice", 850),
    new User("Bob", 720),
    new User("Charlie", 900)
);
request.setAttribute("users", users);

步骤 2:JSP 渲染表格

在 JSP 页面通过 <c:forEach> 标签遍历数据(需先引入 JSTL 库):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table border="1">
    <tr><th>排名</th><th>用户名</th><th>积分</th></tr>
    <c:forEach var="user" items="${users}" varStatus="status">
        <tr>
            <td>${status.count}</td>
            <td>${user.name}</td>
            <td>${user.score}</td>
        </tr>
    </c:forEach>
</table>

常见问题与解决方案

问题 1:JSP 页面无法显示动态内容

可能原因:未正确配置服务器或代码语法错误。
解决方案

  1. 检查 Tomcat 日志,定位编译错误。
  2. 确保 JSP 文件位于 WebContentsrc/main/webapp 目录下。

问题 2:内置对象 session 无效

可能原因:未启用会话跟踪或会话已过期。
解决方案

  1. 在 JSP 中添加 <%@ page session="true" %> 显式启用会话。
  2. 通过 session.setMaxInactiveInterval(30*60) 延长会话时间。

结论

通过本文的 JSP 教程学习,读者应已掌握从基础语法到实战应用的核心知识。JSP 的灵活性与 Java 的强大功能结合,使其成为构建企业级 Web 应用的重要工具。建议读者通过实际项目(如论坛、博客系统)巩固所学内容,并逐步探索 JSP 的高级特性(如自定义标签、EL 表达式)。掌握 JSP,不仅能提升 Web 开发效率,更能为后续学习 Spring MVC 等框架打下坚实基础。

最新发布