跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

JSP 核心考点全解析

详细解析了 JSP 核心考点,涵盖 Web 应用原理、B/S 架构及 MVC 模式。介绍了 JSP 开发环境配置、基本语法(脚本、指令、动作)、九大内置对象及其作用域管理。深入讲解了 Cookie 与 Session 的会话追踪机制、JavaBean 规范、文件操作及 JDBC 数据库连接与防注入技术。同时阐述了 Servlet 生命周期、过滤器与监听器的工作原理,以及 JSTL 标签库和 EL 表达式的使用。最后提供了复习建议,帮助读者掌握 JSP 开发关键技能。

极客零度发布于 2026/3/22更新于 2026/9/1166 浏览

第一章:JSP 与 Web 技术概论

1. Web 应用基本原理
  • B/S 架构(Browser/Server):用户通过浏览器访问服务器上的 Web 应用,无需安装客户端。
  • HTTP 请求/响应模型:
    • 客户端(浏览器)发送 HTTP 请求(GET/POST 等);
    • 服务器接收请求,处理后返回 HTTP 响应(HTML 页面、JSON 等);
    • 无状态:每次请求独立,服务器默认不记住用户。
2. JSP 的优势
  • 跨平台:基于 Java,一次编写,到处运行(依赖 JVM)。
  • 组件重用:可复用 JavaBean、自定义标签等。
  • 与 Servlet 无缝集成:JSP 本质是 Servlet,可直接调用 Servlet API。
3. JSP 开发模式演进
模式结构缺点适用场景
纯 JSP所有逻辑写在 JSP 中代码混乱,难维护小型演示
Model 1(JSP + JavaBean)JSP 负责显示 + 控制,JavaBean 封装数据控制逻辑仍在 JSP,耦合度高简单应用
Model 2 / MVCServlet(Controller)+ JavaBean(Model)+ JSP(View)结构清晰,职责分离主流开发模式

✅ 常考点解析:
MVC 中各角色作用:

  • Model(模型):负责业务逻辑和数据访问(如 JavaBean、DAO);
  • View(视图):负责数据显示(如 JSP 页面);
  • Controller(控制器):接收请求、调用 Model、决定跳转到哪个 View(如 Servlet)。

📌 答题模板:
'MVC 模式将程序分为三部分:Model 处理数据,View 展示界面,Controller 协调两者。优点是解耦、易维护、便于团队分工。'


第二章:JSP 开发和运行环境

1. 核心组件
  • JDK:提供 Java 编译和运行环境;
  • Web 服务器(如 Tomcat):解析 HTTP 请求,执行 JSP/Servlet;
  • 浏览器:发送请求、渲染响应。
2. Tomcat 目录结构
目录作用
webapps
存放所有 Web 应用(每个应用一个文件夹)
WEB-INF受保护目录,客户端无法直接访问
WEB-INF/classes存放编译后的 .class 文件
WEB-INF/lib存放项目依赖的 .jar 包
WEB-INF/web.xml部署描述符,可配置欢迎页、错误页、Servlet 映射等

✅ 常考点解析:
为什么 WEB-INF 下的文件不能被客户端直接访问?
→ 出于安全考虑,防止用户直接下载敏感文件(如 .class、配置文件)。所有对 WEB-INF 的直接 URL 请求都会被 Tomcat 拒绝(返回 404)。

📌 答题关键:安全机制 + 受保护资源


第三章:JSP 基本语法

1. 脚本元素
语法名称作用注意事项
<%-- 注释 --%>隐藏注释仅在 JSP 源码中可见,不会发送到客户端安全注释方式
<%! ... %>声明定义成员变量或方法(属于生成的 Servlet 类)多用户共享,慎用
<% ... %>脚本片段写 Java 语句(if/for/赋值)插入到 _jspService() 方法中
<%= 表达式 %>表达式输出值(自动调用 out.print())不能加分号!
2. 指令元素(<%@ ... %>)

include 指令:静态包含

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

→ 编译时合并源码,生成一个 Servlet

page 指令:设置页面属性

<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" errorPage="error.jsp" %> 
3. 动作元素(<jsp:xxx>)

<jsp:forward>:请求转发(地址栏不变)

<jsp:forward page="result.jsp" /> 

<jsp:include>:动态包含

<jsp:include page="menu.jsp"> <jsp:param name="user" value="Tom" /> </jsp:include>

→ 运行时执行被包含页,再合并输出

✅ 常考点解析:
<%@ include %> 与 <jsp:include> 的区别:

对比项<%@ include %><jsp:include>
包含时机编译时运行时
生成 Servlet 数量1 个多个
能否传参❌✅(用 <jsp:param>)
效率高(一次编译)略低(多次执行)
适用场景静态内容(页头/页脚)动态内容(权限菜单)

📌 答题模板:
'静态包含在翻译阶段合并代码,效率高但不能传参;动态包含在运行时执行,可传递参数,适合动态内容。'


第四章:JSP 内置对象(重中之重!)

1. 九大内置对象(无需声明,直接使用)
对象类型主要用途常用方法
requestHttpServletRequest获取客户端请求数据getParameter(), setAttribute(), getAttribute()
responseHttpServletResponse发送响应sendRedirect(), setContentType()
sessionHttpSession会话管理setAttribute(), getAttribute(), invalidate()
applicationServletContext全局上下文setAttribute(), getInitParameter()
outJspWriter页面输出print(), println()
pageContextPageContext获取其他对象getRequest(), getSession()
configServletConfigServlet 配置getInitParameter()
pageObject当前 Servlet 实例等价于 this
exceptionThrowable异常对象仅在 isErrorPage="true" 的页面可用
2. 四大作用域(按生命周期从小到大)
作用域对应对象生命周期典型应用
pagepageContext当前 JSP 页面执行期间临时变量
requestrequest一次请求(含 forward)Servlet 转发数据给 JSP
sessionsession一次会话(创建 → 超时/销毁)用户登录状态、购物车
applicationapplicationWeb 应用启动 → 停止全局计数器、数据库连接池

✅ 常考点解析:

  • 如何取值? 统一使用 xxx.setAttribute("key", value) 和 xxx.getAttribute("key")。
  • forward 后 request 数据还在吗? → 在!(同一请求)
  • redirect 后 request 数据还在吗? → 不在!(新请求)

📌 必背口诀:
'page 页内,request 转发,session 会话,application 全局。'


第五章:Cookie 及会话追踪

1. Cookie
  • 存储位置:客户端(浏览器)

读取:

Cookie[] cookies = request.getCookies();
if(cookies != null){
    for(Cookie ck : cookies){
        if("name".equals(ck.getName())){/* ... */}
    }
}

创建与发送:

Cookie c = new Cookie("name","value");
c.setMaxAge(3600); // 有效期 1 小时(秒),0=删除
response.addCookie(c);
2. Session
  • 存储位置:服务器端
  • 追踪机制:默认通过 Cookie(JSESSIONID),若 Cookie 禁用则用 URL 重写(response.encodeURL(url))

创建与使用:

HttpSession session = request.getSession(); // 自动创建或获取 session
session.setAttribute("user","Tom");
session.invalidate(); // 销毁会话
3. 会话追踪四种方式
  1. Cookie(简单,但不安全)
  2. URL 重写(在 URL 后加 ;jsessionid=xxx)
  3. 隐藏表单字段(<input type="hidden" name="sessionid" value="xxx">)
  4. Session(最常用,安全可靠)

✅ 常考点解析:
Cookie 与 Session 的区别:

对比项CookieSession
存储位置客户端服务器
安全性低(可篡改)高
大小限制≤ 4KB无严格限制
生命周期可设过期时间默认 30 分钟(可配置)
依赖依赖浏览器启用 Cookie默认依赖 Cookie,可 URL 重写

📌 应用题:
'用 Session 实现购物车' → 将商品列表存入 session.setAttribute("cart", list),后续页面从 session 取出即可。


第六章:JavaBean 和表单处理

1. JavaBean 规范
  • 公共类(public class)
  • 无参构造方法
  • 私有属性(private)
  • 公共 getter/setter(getXxx(), setXxx())
2. JSP 动作标签
<!-- 创建或查找 Bean -->
<jsp:useBean scope="session" />
<!-- 批量赋值(表单 name 必须 = Bean 属性名) -->
<jsp:setProperty name="user" property="*" />
<!-- 单独赋值 -->
<jsp:setProperty name="user" property="name" param="username" />
<!-- 取值 -->
<jsp:getProperty name="user" property="name" />

✅ 常考点解析:
<jsp:setProperty property="*"> 的使用条件:
→ HTML 表单中的 name 属性必须与 JavaBean 的属性名完全一致(包括大小写)。

📌 示例:
表单 <input name="email"> → Bean 必须有 setEmail(String email) 方法。


第七章:JSP 中文件操作

1. File 类常用方法
  • exists():判断文件/目录是否存在
  • createNewFile():创建新文件
  • mkdirs():创建多级目录
  • delete():删除文件/空目录
2. 数据流
  • 字节流:FileInputStream / FileOutputStream(处理二进制)
  • 字符流:FileReader / FileWriter(处理文本,注意编码)
3. 文件上传
  • 表单必须设置:enctype="multipart/form-data"
  • 使用第三方库:Commons-FileUpload(主流)或 SmartUpload
  • 核心类:DiskFileItemFactory, ServletFileUpload

✅ 常考点解析:
文件上传表单的关键属性:
→ method="post" + enctype="multipart/form-data"

📌 错误示例:
若忘记 enctype,request.getParameter() 将无法获取文件内容。


第八章:应用 JDBC 进行数据库开发

JDBC 编程六步曲
// 1. Class.forName("com.mysql.jdbc.Driver"); // 加载驱动
// 2. Connection conn = DriverManager.getConnection(url, user, pwd);
// 3. Statement stmt = conn.createStatement();
// 4. ResultSet rs = stmt.executeQuery("SELECT * FROM users");
// 5. while(rs.next()){ /* 处理结果 */ }
// 6. rs.close(); stmt.close(); conn.close(); // 关闭资源
防 SQL 注入

使用 PreparedStatement 替代 Statement:

String sql = "SELECT * FROM users WHERE name = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, name); // 自动转义

✅ 常考点解析:
为什么用 PreparedStatement 能防注入?
→ 因为它将 SQL 语句和参数分开编译,参数被视为纯数据而非 SQL 代码。


第十章:Servlet 基础

Servlet 生命周期
  1. init():初始化(Web 应用启动时或首次请求时调用,仅一次)
  2. service():处理请求(每次 HTTP 请求都调用,内部调用 doGet/doPost)
  3. destroy():销毁(Web 应用停止时调用,仅一次)
与 JSP 关系
  • JSP 最终会被 Tomcat 翻译成一个继承 HttpServlet 的类。
  • JSP = Servlet 的简化写法(侧重视图)
配置方式

注解(Servlet 3.0+):

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    ...
}

web.xml(传统):

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

✅ 常考点解析:
doGet 与 doPost 的区别:
→ 分别处理 GET 和 POST 请求,开发者需重写对应方法。


第十一章:Servlet 过滤器和监听器

1. Filter(过滤器)
  • 作用:拦截请求/响应,进行预处理或后处理。
  • 典型应用:
    • 统一解决中文乱码:request.setCharacterEncoding("UTF-8")
    • 权限检查:验证用户是否登录

核心方法:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
    // 前处理
    chain.doFilter(req, res);
    // 放行
    // 后处理
}
2. Listener(监听器)
  • 作用:监听 Web 应用中的事件。
  • 常用监听器:
    • ServletContextListener:监听应用启动/销毁(可用于初始化全局资源)
    • HttpSessionListener:监听会话创建/销毁(可用于统计在线人数)

✅ 常考点解析:

  • 过滤器解决中文乱码:在 doFilter 中设置 request.setCharacterEncoding("UTF-8")。
  • 监听器统计在线人数:在 sessionCreated 中计数 +1,sessionDestroyed 中 -1。

第十二章:JSTL 标准标签库

1. 引入 JSTL
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
2. 核心标签
<!-- 条件判断 -->
<c:if test="${age > 18}">成年人</c:if>
<!-- 循环 -->
<c:forEach items="${list}" var="item" varStatus="status">
    ${status.index}: ${item}
</c:forEach>
<!-- 安全输出(防 XSS) -->
<c:out value="${userInput}" />
3. EL 表达式 ${}
  • 语法:${作用域。属性名} 或 ${属性名}(自动按 page→request→session→application 查找)
  • 示例:${user.name} 等价于 <%= ((User)session.getAttribute("user")).getName() %>

✅ 常考点解析:
<c:forEach> 的 varStatus 属性:
→ 提供循环状态信息,如 index(从 0 开始)、count(从 1 开始)。


🔑 终极复习建议(落实版)

  1. 背熟第四章:九大对象名称、类型、作用;四大作用域生命周期。
  2. 理解对比题:
    • 静态 include vs 动态 include
    • Cookie vs Session
    • JSP vs Servlet
  3. 动手写代码:
    • 用户登录(表单 → Servlet → Session → JSP 显示)
    • JDBC 查询(防注入版)
    • 过滤器统一编码

目录

  1. 第一章:JSP 与 Web 技术概论
  2. 1. Web 应用基本原理
  3. 2. JSP 的优势
  4. 3. JSP 开发模式演进
  5. 第二章:JSP 开发和运行环境
  6. 1. 核心组件
  7. 2. Tomcat 目录结构
  8. 第三章:JSP 基本语法
  9. 1. 脚本元素
  10. 2. 指令元素(<%@ ... %>)
  11. 3. 动作元素(<jsp:xxx>)
  12. 第四章:JSP 内置对象(重中之重!)
  13. 1. 九大内置对象(无需声明,直接使用)
  14. 2. 四大作用域(按生命周期从小到大)
  15. 第五章:Cookie 及会话追踪
  16. 1. Cookie
  17. 2. Session
  18. 3. 会话追踪四种方式
  19. 第六章:JavaBean 和表单处理
  20. 1. JavaBean 规范
  21. 2. JSP 动作标签
  22. 第七章:JSP 中文件操作
  23. 1. File 类常用方法
  24. 2. 数据流
  25. 3. 文件上传
  26. 第八章:应用 JDBC 进行数据库开发
  27. JDBC 编程六步曲
  28. 防 SQL 注入
  29. 第十章:Servlet 基础
  30. Servlet 生命周期
  31. 与 JSP 关系
  32. 配置方式
  33. 第十一章:Servlet 过滤器和监听器
  34. 1. Filter(过滤器)
  35. 2. Listener(监听器)
  36. 第十二章:JSTL 标准标签库
  37. 1. 引入 JSTL
  38. 2. 核心标签
  39. 3. EL 表达式 ${}
  40. 🔑 终极复习建议(落实版)

更多推荐文章

查看全部
  • Whisper-WebUI 本地部署与核心功能详解
  • OpenClaw 与 Claude Code、Cursor、Copilot 的区别
  • 华为 OD 机试:停车场最短路径规划 Python&JS 实现
  • HarmonyOS Canvas 绘图实战:从静态圆到动态交互
  • Web 团队开发 App,是否应该选择 Capacitor?
  • 大模型服务选型实战:AI Ping 性能评测工具深度体验
  • 动态规划(DP)基础:状态表示与转移方程详解
  • C++ vector 容器:底层原理、扩容机制与实战用法详解
  • GitNexus 核心引擎:索引、社区检测与混合搜索
  • C++17 标准库:std::any 类型擦除容器详解
  • Fluid 数据编排能力原理解析
  • Axure 实现 AI 对话机器人原型,支持自动回复与打字效果
  • Mac 端 Git 基础概念与 PyCharm 使用指南
  • DeepSeek 深度使用指南与提示词实战技巧
  • C++ 核心概念与常见面试题解析
  • 前端开发三年职业成长回顾:从传统软件到互联网实战
  • 快速排序深度解析与实战优化
  • VSCode 配置 Java 开发环境详解
  • 使用 OpenClaw 与飞书搭建专属 AI 机器人
  • C++ Google Test (gtest) 全面使用指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online