一、JSP 概述
1. 什么是 JSP
JSP:Java Server Pages,Java 服务端页面。Sun 公司推出的动态网页技术,用于代替 Servlet 做页面展示。
2. 核心本质(重点)
JSP 本质就是一个 Servlet
- JSP 第一次被访问时,Tomcat 会自动把 JSP翻译 → 编译 → 运行
- 翻译后生成
.java文件,继承HttpServlet - JSP 只是简化写法:HTML + Java 代码混合编写
3. 为什么要用 JSP
- Servlet:写页面非常麻烦,需要大量
out.write()拼接 HTML - JSP:以 HTML 为主,嵌入少量 Java 代码,适合开发视图页面
4. JSP 运行原理
- 客户端浏览器访问
xxx.jsp - Tomcat 查找 JSP 文件
- 翻译:JSP → Java 源文件(Servlet)
- 编译:Java → class 字节码文件
- 实例化 Servlet,执行
_jspService()方法 - 生成 HTML 响应给浏览器
5. JSP 与 Servlet 分工
- Servlet:接收请求、处理业务逻辑、操作数据(控制器)
- JSP:展示数据、渲染页面(视图)
二、JSP 脚本元素(3 种)
作用:在 JSP 页面中嵌入 Java 代码。
1. 脚本片段(代码片段)
格式:
jsp
<% Java代码; %>- 编写多行 java 代码
- 代码原样翻译到
_jspService()方法内部 - 局部变量,不能定义方法
示例:
jsp
<% String name = "张三"; int age = 20; System.out.println(name); %>2. 表达式脚本(输出语句)
格式:
jsp
<%= 变量/表达式 %>- 作用:向页面输出内容
- 底层等价于
out.print(); - 不能加分号
示例:
jsp
姓名:<%= name %> 年龄:<%= age %>3. 声明脚本
格式:
jsp
<%! 成员变量/方法 %>- 翻译到类体中,不在方法里
- 可以定义:成员变量、全局方法、静态代码块
- 极少使用,存在线程安全问题
示例:
jsp
<%! // 成员变量 int num = 10; // 自定义方法 public void test(){ System.out.println("JSP声明方法"); } %>三种脚本元素 核心区别总结
表格
| 脚本类型 | 格式 | 翻译位置 | 作用 |
|---|---|---|---|
| 脚本片段 | <% 代码 %> | _jspService 方法内 | 执行 java 逻辑、定义局部变量 |
| 表达式脚本 | <%= 内容 %> | _jspService 方法内 | 页面输出,无分号 |
| 声明脚本 | <%! 代码 %> | 类体位置 | 定义成员变量、方法 |
三、JSP 指令 详细分析
1. 指令作用
JSP 指令用来设置 JSP 页面全局属性,指挥 Tomcat 如何翻译当前 JSP 文件。
通用格式:
jsp
<%@ 指令名 属性1="值" 属性2="值" %>2. 三大常用指令
page页面指令include包含指令taglib标签库指令
① page 指令(最常用)
作用:设置当前页面的全局配置
常用属性详解:
jsp
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.List,java.util.ArrayList" session="true" buffer="8kb" isErrorPage="false" %>contentType设置响应类型与编码,等同于response.setContentType()pageEncoding当前 JSP 文件本身的编码格式import导入 Java 类包,多个类用逗号分隔session是否自动创建 session 对象,默认 trueisErrorPage是否为错误页面,true 可使用异常对象 exceptionbuffer设置页面输出缓冲区大小
② include 包含指令(静态包含)
格式:
jsp
<%@ include file="目标页面路径" %>- 特点:静态包含
- 翻译阶段:把目标页面原封不动合并到当前 JSP
- 只生成一个 Java 文件
- 适合引入:顶部导航栏、底部版权栏
③ taglib 指令
格式:
jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>作用:引入第三方标签库(如 JSTL 核心标签),替代 JSP 脚本,消除页面 java 代码,项目开发必用。
四、静态包含 vs 动态包含
- 静态包含:
<%@ include file="" %>
- 编译前合并代码,只生成一个 Servlet
- 运行效率高,不能传参
- 动态包含:
<jsp:include page=""></jsp:include>
- 分别翻译为两个 Servlet,运行时调用
- 可以传递参数,功能更强
五、整体核心概论
JSP 概述JSP 是运行在服务端的动态页面,本质是 Servlet,HTML 中嵌入 Java 代码,专门用于视图展示。
三大脚本元素
<% 代码 %>:脚本片段,写逻辑<%= 表达式 %>:页面输出<%! 变量/方法 %>:声明成员,少用
- 三大 JSP 指令
- page:配置页面编码、导包、页面属性
- include:静态包含,复用公共页面
- taglib:引入标签库,优化页面
- 运行流程:JSP 文件 → 翻译 java → 编译 class → 实例化 Servlet → 运行输出页面。