JSP 系统学习指南

一、JSP 是什么?JSP(JavaServer Pages) 是一种动态网页技术,允许在 HTML 中嵌入 Java 代码,用于生成动态内容。JSP 本质上是 Servlet 的扩展,最终会被 Web 容器(如 Tomcat)编译为 Servlet 执行。

二、JSP 的核心作用

分离动态逻辑与静态页面:在 HTML 中嵌入 Java 代码,简化动态内容开发。

快速构建视图层:与 Servlet 配合实现 MVC 模式(JSP 作为视图)。

支持标签库:通过 EL 表达式、JSTL 标签减少 Java 代码嵌入。

三、JSP 与 Servlet 的关系

特性

JSP

Servlet

定位

视图层(View)

控制层(Controller)

语法

基于 HTML + Java 标签

纯 Java 代码

开发效率

快速编写页面

更适合处理复杂逻辑

本质

最终被编译为 Servlet

直接继承 HttpServlet 类

四、JSP 的生命周期

转换阶段:JSP 文件被转换为 .java 文件(Servlet 源码)。

编译阶段:编译为 .class 字节码文件。

初始化:调用 jspInit() 方法(仅一次)。

执行阶段:调用 _jspService() 方法处理请求。

销毁阶段:调用 jspDestroy() 方法释放资源。

五、JSP 的核心语法1. JSP 脚本元素

语法

说明

示例

<% ... %>

嵌入 Java 代码片段

<% int count = 0; %>

<%= ... %>

输出表达式结果(自动转义 HTML)

<%= "Hello, " + name %>

<%! ... %>

声明 成员变量或方法

<%! private String title = "JSP"; %>

2. JSP 指令

指令

说明

示例

<%@ page ... %>

定义页面属性(编码、错误页等)

<%@ page contentType="text/html;charset=UTF-8" %>

<%@ include ... %>

静态包含其他文件(如页眉、页脚)

<%@ include file="header.jsp" %>

<%@ taglib ... %>

引入标签库(如 JSTL)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

3. JSP 动作标签

标签

说明

示例

动态包含其他页面

创建或获取 JavaBean

设置 JavaBean 属性

请求转发到其他页面

六、JSP 内置对象JSP 预定义了 9 个可直接使用的对象(无需声明):

对象名

类型

作用

request

HttpServletRequest

封装客户端请求信息

response

HttpServletResponse

封装服务器响应操作

session

HttpSession

存储用户会话数据

application

ServletContext

存储全局共享数据

out

JspWriter

输出内容到页面(类似 PrintWriter)

pageContext

PageContext

获取其他内置对象,管理页面作用域

page

Object

当前 Servlet 实例(极少使用)

config

ServletConfig

获取 Servlet 配置信息

exception

Throwable

仅在错误页中可用,捕获异常信息

七、EL 表达式(Expression Language)简化 JSP 中的数据访问,语法为 ${expression}。

1. 访问作用域属性1234${requestScope.user.name} ${sessionScope.cart.total} ${applicationScope.appName} ${user.age}

2. 运算符与内置对象1234${empty userList} ${10 + 5} ${param.username} ${header["User-Agent"]}

八、JSTL 标签库(JavaServer Pages Standard Tag Library)通过标签库替代 Java 代码,提升可维护性。

1. 核心标签库(Core)1234567891011<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

尊贵的 VIP 用户!

${status.index + 1}. ${user.name}

2. 格式化标签库(Formatting)1234567<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

九、JSP 在 MVC 模式中的应用

Model(模型):JavaBean 或 Service 类,处理数据和业务逻辑。

View(视图):JSP 负责展示数据,使用 EL 和 JSTL。

Controller(控制器):Servlet 接收请求,调用 Model,转发到 JSP。

示例代码:

123456// Servlet(Controller)protected void doGet(HttpServletRequest request, HttpServletResponse response) { List products = productService.getAllProducts(); request.setAttribute("products", products); request.getRequestDispatcher("/product-list.jsp").forward(request, response);}

1234567

${product.name}

价格:

十、JSP 的现代替代方案尽管 JSP 仍在使用,但现代开发更倾向于以下技术:

模板引擎:Thymeleaf、Freemarker(语法更简洁,与 HTML 兼容性更好)。

前后端分离:Vue.js、React + RESTful API(彻底分离前端与后端)。

十一、常见问题与调试技巧

中文乱码:

在 JSP 顶部设置 <%@ page contentType="text/html;charset=UTF-8" %>。

确保 Tomcat 的 server.xml 中 配置了 URIEncoding="UTF-8"。

JSP 未编译:

检查 Tomcat 的 work 目录,确认 JSP 是否已生成对应的 .java 和 .class 文件。

EL 表达式不生效:

确保 JSP 版本支持 EL(在 web.xml 中设置 false)。

十二、学习资源推荐

书籍:

《Head First Servlets and JSP》

《Java Web 开发详解》

文档:

Oracle JSP 官方文档

实战项目:

博客系统(文章发布、评论展示)

电商商品列表页(分页、排序、过滤)

总结JSP 是 JavaWeb 开发中构建动态页面的核心技术,通过掌握其语法、内置对象、EL 表达式和 JSTL 标签库,可以高效实现视图层开发。结合 Servlet 和 MVC 模式,能够构建结构清晰、易于维护的 Web 应用。建议通过实际项目练习,逐步过渡到现代模板引擎或前后端分离架构。