从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

    • 服务器软件

    • 环境管理和配置管理-科普篇
    • Servlet 入门

      • 什么是 Servlet
      • Servlet 入门案例
      • Servlet 生命周期
      • Servlet 中的注解
      • Tomcat 集成 IDEA
      • Servlet 体系结构
      • HTTP 协议基础
      • 深入 request 和 response 对象
      • request 对象基本使用
      • request 其他功能
      • Servlet 实现登录功能
      • HTTP 协议基础-响应
      • Response 对象基本使用
      • response 对象之重定向
      • response 输出字符到浏览器
      • response 输出字节数据
      • 验证码案例
      • ServletContext
      • 文件下载案例
      • Cookie 笔记
      • Cookie 的更多细节
      • Cookie 实践:记住上次访问时间
      • JSP 入门
      • JSP 的内置对象和案例
      • IDEA 与 JavaWeb 的小技巧
      • Session 笔记
      • 验证码案例
      • JSP 深入学习
        • JSP 中的指令
        • JSP 的注释
        • 内置对象
      • MVC 开发模式
      • EL 表达式和 JSTL 标签
      • JSTL 标签库
      • 案例:列表的增删改查
      • Filter 学习
      • Filter 案例
      • Listener 学习
      • Java 中的 Ajax
      • Java 中的 JSON
  • Spring

  • 主流框架

  • SpringMVC

  • SpringBoot

  • Java
  • JavaWeb
  • Servlet 入门
2023-04-17
目录

JSP 深入学习

# 110.JSP 深入学习

继续讲解如下内容:

  1. JSP 的指令、内置对象和注释
  2. MVC 开发模式
  3. EL 表达式
  4. JSTL 标签
  5. 三层架构

# JSP 中的指令

指令的作用:用于配置 JSP 页面,导入资源文件

格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>

例如我们之前写的 index.jsp 的开头,就用到了 page 指令:

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

这里设置了 content-type,以及用的是 Java 语言,还有很多属性,这里就不一一介绍了

指令分类:

  • page 指令:配置 JSP 页面的,较少使用
  • include 指令:导入页面的资源文件,极少使用
  • taglib 指令:导入资源,例如标签(例如 Java 中导入一个类),用的较多

# page 指令

page 指令用来配置 JSP 页面,我们知道一些常见的属性就可以了。例如下面是一个 page 指令:

<%@ page contentType="text/html;charset=UTF-8" language="java" buffer="16kb"%>
1

常见的属性:

  1. contentType
  2. language
  3. buffer
  4. import
  5. errorPage,isErrorPage

详细说明如下: ‍ contentType:等同于 response.setContentType(),作用如下

  1. 设置响应体的 mime 类型以及字符集

  2. 设置当前 jsp 页面的编码

    只能是高级的 IDE 才能生效,修改 charset 后,文件编码格式也会自动切换

    如果使用低级工具,则需要设置 pageEncoding 属性设置当前页面的字符集 ‍ language:当初 JSP 被设计时,想要一举改变表现层的技术,支持多种开发语言;但直到如今,也只支持 Java。不能省略。 ‍ buffer:缓冲区,JSP 有个内置对象是 out 的,其有一个缓冲区,默认是 8kb,可以通过 buffer 修改大小

import:导包。例如使用 List 对象,需要导入:写了后相当于会在我们 JSP 转换的 Servlet 类里 import

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
1
2

errorPage:当前页面发生异常后,会自动跳转到指定的错误页面。和 isErrorPage 是配对的。

isErrorPage:标识当前也是是否是错误页面。默认值 false。如果设置成 true,可以使用内置对象 exception; 如果设置成 false,不可以使用内置对象 exception。

例如新建一个 500.jsp

<%@ page contentType="text/html;charset=UTF-8" isErrorPage="true" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h1>服务器正忙...</h1>
    <%
        String message = exception.getMessage();
        out.print(message);
    %>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍ 然后在 index.jsp 里配置:

<%@ page contentType="text/html;charset=gbk" errorPage="500.jsp"   pageEncoding="GBK" language="java" buffer="16kb" %>

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

  <%
    int i = 3/0;
  %>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13

‍ 访问 index.jsp,会跳转到 errosPage.jsp

# include 指令

用来包含页面的,例如我们写了很多个 JSP 后,可以抽出公用的部分,做出一个单独的文件,然后在其他 JSP 里引入这个 JSP。我们来演示下,新建 top.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>页面logo页面标题</h1>
1
2

‍ 新建 home.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"  %>
<%@include file="top.jsp"%>

<html>
<head>
    <title>Title</title>
</head>
<body>
        <h1>hello</h1>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11

‍ 那么 home.jsp 页面也会显示 top.jsp 的 h1 标签

# taglig 指令

导入资源的,例如导入第三方标签库。我们先演示下效果,后续再说有什么用

首先将涉及到的 jar 包放到 WEB-INF/lib 目录(可以去我的 GitHub 或 Gitee 下载),然后将 lib 目录 add 到 Library 中。

jstl-impl.jar
javax.servlet.jsp.jstl.jar
1
2

然后我们就可以引入标签库了:

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

prefix:定义标签的前缀,可自行修改,uri 则是标签库的具体位置 ‍ 然后我们就可以使用标签库了:前缀加冒号。一般用约定俗成的。

<c:out>
1

# JSP 的注释

  1. html 注释 <!-- -->: 只能注释 HTML 代码片段。注意,在客户端看 HTML 代码中还是能看到注释
  2. JSP 注释 <%-- --%>:可以注释所有(HTML 和 Java 代码),在客户端看 HTML 代码中看不到注释,推荐使用 ‍
<!--
	<h1>hello</h1>
-->


<%--
	<%
		System.out.println("hi~~~~");
	%>
--%>

<%--
	<input>
--%>
1
2
3
4
5
6
7
8
9
10
11
12
13
14

‍

# 内置对象

什么是内置对象:在 JSP 中不需要创建,可以直接使用的对象。这是因为 JSP 转换为 Servlet 的时候,这些对象已经声明好了。一共有 9 个内置对象:

变量名 真实类型 作用
pageContext PageContext 域对象,当前页面共享数据,还可以获取其他八个内置对象(通过 getXXX 方法)
request HttpServletRequest 域对象,一次请求访问的多个资源(转发)
session HttpSession 域对象,一次会话的多个请求间
application ServletContext 服务器的域对象,所有用户间共享数据,范围最大
response HttpServletResponse 响应对象
page Object 当前页面(Servlet)的对象 相当于 this
out JspWriter 输出对象,数据输出到页面上
config ServletConfig Servlet 的配置对象
exception Throwable 异常对象,只有设置了 isErrorPage 才能使用

我们可以通过转换后的 Java 代码里查看,在_jspService 方法里有如下定义:

final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;

try {
      response.setContentType("text/html;charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
上次更新: 2025/6/3 09:31:54
验证码案例
MVC 开发模式

← 验证码案例 MVC 开发模式→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式