目录 

源码下载

学习目的与要求······························································································································1 本章主要内容 ··································································································································1 
1.1 Spring简介···························································································································1 
1.1.1 Spring的由来 ·········································································································1 
1.1.2 Spring的体系结构 ·································································································1 
1.2 Spring开发环境的构建 

································································································3 
1.2.1 使用 Eclipse开发 Java Web应用 ······································································4 
1.2.2 Spring的下载 ·········································································································6 
1.3 使用 Eclipse开发 Spring入门程序 

···········································································7 
1.4 本章小结 ································································································································8 习题 1 ···············································································································································8 

学习目的与要求··························································································································· 10 本章主要内容 ······························································································································· 10 
2.1 Spring IoC的基本概念 ··································································································· 10 
2.2  Spring IoC容器 

·········································································································· 11 
2.2.1 BeanFactory········································································································ 11 
2.2.2 ApplicationContext··························································································· 11 
2.2.3 GenericApplicationContext··········································································· 13 
2.3 依赖注入的类型················································································································· 14 
2.3.1 使用构造方法注入 

·························································································· 14 
2.3.2 使用属性的 Setter方法注入 

········································································ 16 
2.4 本章小结 ····························································································································· 17 习题 2 ············································································································································ 17 


学习目的与要求··························································································································· 18 本章主要内容 ······························································································································· 18 
3.1 Bean的配置······················································································································· 18 
3.2 Bean的实例化 ·················································································································· 19 
3.2.1 构造方法实例化 

······························································································ 19 
3.2.2 静态工厂方法实例化 

······················································································ 20 3.2.3 实例工厂方法实例化 ······················································································ 21 
3.3 Bean的作用域 

············································································································· 22 
3.3.1 singleton作用域································································································· 22 
3.3.2 prototype作用域································································································ 23 
3.4 Bean的生命周期 

········································································································ 24 
3.5 Bean的装配方式 ·············································································································· 26 
3.5.1 基于 XML配置的装配 

··················································································· 26 
3.5.2 基于注解的装配 

······························································································ 29 
3.6 本章小结 ····························································································································· 33 习题 3 ············································································································································ 33 

学习目的与要求··························································································································· 35 本章主要内容 ······························································································································· 35 
4.1 Spring AOP的基本概念 ································································································· 35 
4.1.1 AOP的概念··········································································································· 35 
4.1.2 AOP的术语··········································································································· 36 
4.2 动态代理 ····························································································································· 37 
4.2.1 JDK动态代理 

·································································································· 37 
4.2.2 CGLIB动态代理 

······························································································ 40 
4.3 基于代理类的 AOP实现 

···························································································· 42 
4.4 基于 XML配置开发 AspectJ 

···················································································· 45 
4.5 基于注解开发 AspectJ 

······························································································· 49 
4.6 本章小结 ····························································································································· 52 习题 4 ············································································································································ 52 



学习目的与要求··························································································································· 53 本章主要内容 ······························································································································· 53 
5.1 Spring的数据库编程 ······································································································· 53 
5.1.1 Spring JDBC的配置··························································································· 53 
5.1.2 Spring jdbcTemplate的使用方法 

···························································· 54 
5.2 编程式事务管理················································································································· 58 
5.2.1 基于底层 API的编程式事务管理 

································································ 58 
5.2.2 基于 TransactionTemplate的编程式事务管理 

······································60 
5.3 声明式事务管理················································································································· 62 
5.3.1 基于 XML方式的声明式事务管理 

······························································63 
5.3.2 基于@Transactional注解的声明式事务管理 

··········································66 
5.3.3 如何在声明式事务管理中捕获异常 

····························································· 69 
5.4 本章小结 ····························································································································· 71 习题 5 ············································································································································ 71 

学习目的与要求··························································································································· 72 本章主要内容 ······························································································································· 72 
6.1 MVC模式与 Spring MVC的工作原理 

·································································· 72 
6.1.1 MVC模式·············································································································· 72 
6.1.2 Spring MVC的工作原理 ··················································································· 73 
6.1.3 Spring MVC接口································································································ 74 
6.2 第一个 Spring MVC应用 

························································································· 74 
6.2.1 创建Web应用并引入JAR包 ··········································································· 74 
6.2.2 在 web.xml文件中部署 DispatcherServlet ················································· 75 
6.2.3 创建 Web应用首页····························································································· 76 
6.2.4 创建 Controller类 ······························································································ 76 
6.2.5 创建 Spring MVC配置文件并配置 Controller映射信息··························· 76 
6.2.6 应用的其他页面···································································································· 77 
6.2.7 发布并运行 Spring MVC应用·········································································· 77 
6.3 视图解析器 ························································································································· 78 
6.4 本章小结 ····························································································································· 78 习题 6 ············································································································································ 78 



学习目的与要求··························································································································· 80 本章主要内容 ······························································································································· 80 
7.1 基于注解的控制器 

······································································································· 80 
7.1.1 Controller注解类型 ··························································································· 80 
7.1.2 RequestMapping注解类型 ············································································· 81 
7.1.3 编写请求处理方法································································································ 82 
7.2 Controller接收请求参数的常见方式 

····································································· 83 
7.2.1 通过实体 Bean接收请求参数 ··········································································· 83 
7.2.2 通过处理方法的形参接收请求参数 ·································································· 89 
7.2.3 通过 HttpServletRequest接收请求参数······················································· 90 
7.2.4 通过@PathVariable接收 URL中的请求参数 ··············································· 90 
7.2.5 通过@RequestParam接收请求参数······························································ 91 
7.2.6 通过@ModelAttribute接收请求参数···························································· 91 
7.3 重定向与转发 

··············································································································· 92 
7.4 应用@Autowired进行依赖注入··················································································· 93 
7.5 @ModelAttribute注解·································································································· 94 
7.6 本章小结 ····························································································································· 96 习题 7 ············································································································································ 96 

学习目的与要求··························································································································· 98 本章主要内容 ······························································································································· 98 
8.1 数据绑定 ····························································································································· 98 
8.2 表单标签库 ························································································································· 98 
8.3 数据绑定的应用 

·········································································································101 
8.4 JSON数据交互 

··········································································································108 
8.4.1 JSON概述···········································································································108 
8.4.2 JSON数据转换 ··································································································109 
8.5 本章小结 ···························································································································112 习题 8 ··········································································································································112 



学习目的与要求·························································································································114 本章主要内容 ·····························································································································114 
9.1 拦截器概述 

·················································································································114 
9.1.1 拦截器的定义······································································································114 
9.1.2 拦截器的配置······································································································115 
9.2 拦截器的执行流程···········································································································116 
9.2.1 单个拦截器的执行流程 

···············································································116 9.2.2 多个拦截器的执行流程 ···············································································118 
9.3 应用案例——用户登录权限验证 

············································································120 
9.4 本章小结 ···························································································································124习题 9 ··········································································································································124

学习目的与要求·························································································································125 本章主要内容 ·····························································································································125 
10.1 数据验证概述·················································································································125 
10.1.1 客户端验证·····································································································125 
10.1.2 服务器端验证·································································································125 
10.2 Spring验证器 

·········································································································126 
10.2.1 Validator接口 ······························································································126 
10.2.2 ValidationUtils类························································································126 
10.2.3 Validator验证示例 ······················································································127 
10.3 Jakarta Bean Validation(JSR 380) 

·······························································132 
10.3.1 Jakarta Bean Validation验证配置··························································132 
10.3.2 标注类型·········································································································133 
10.3.3 Jakarta Bean Validation验证示例··························································134 
10.4 本章小结·························································································································137 习题 10········································································································································137 

学习目的与要求·························································································································138 本章主要内容 ·····························································································································138 11.1 程序国际化概述 



······································································································138 
11.1.1 Java国际化的思想 ·······················································································138 
11.1.2 Java支持的语言和国家 ···············································································139 
11.1.3 Java程序国际化 ···························································································139 
11.1.4 带占位符的国际化信息 ················································································140 
11.2 Spring MVC的国际化 

··························································································141 
11.2.1 Spring MVC加载资源属性文件 ·······························································141 
11.2.2 语言区域的选择 ····························································································142 
11.2.3 使用 message标签显示国际化信息 ························································142 
11.3 用户自定义切换语言示例 

······················································································143 
11.4 本章小结·························································································································147 习题 11········································································································································147 

学习目的与要求·························································································································148 本章主要内容 ·····························································································································148 12.1 示例介绍·························································································································148 12.2 SimpleMappingExceptionResolver类·································································153 12.3 HandlerExceptionResolver接口 ············································································154 12.4 @ExceptionHandler注解·························································································155 12.5 @ControllerAdvice注解···························································································156 12.6 本章小结·························································································································157 习题 12········································································································································157 

学习目的与要求·························································································································158 本章主要内容 ·····························································································································158 
13.1 文件的上传 

···············································································································158 13.2 文件的下载 
···············································································································163 13.3 本章小结·························································································································166 习题 13········································································································································166 

学习目的与要求·························································································································167 


本章主要内容 ·····························································································································167 
14.1 MyBatis简介 ················································································································167 
14.2 MyBatis的环境构建····································································································168 
14.3 MyBatis的工作原理····································································································168 
14.4 MyBatis的核心配置····································································································169 
14.5 使用 Eclipse开发 MyBatis入门程序 

·································································170 
14.6 SSM框架的整合开发 ··································································································174 
14.6.1 相关 JAR包····································································································174 
14.6.2 MapperScannerConfigurer方式 ···························································175 
14.6.3整合示例 

···································································································176 
14.6.4SqlSessionDaoSupport方式 

·····························································180 
14.7 使用 MyBatis Generator插件自动生成映射文件 

···········································185 
14.8 映射器概述·····················································································································187 
14.9 <select>元素················································································································187 
14.9.1 使用 Map接口传递参数 

·······································································188 
14.9.2 使用 Java Bean传递参数 

·····································································190 
14.9.3 使用@Param注解传递参数 

·································································191 
14.9.4 <resultMap>元素 ·······················································································192 
14.9.5 使用 POJO存储结果集 

··········································································192 
14.9.6使用 Map存储结果集 

···········································································194 
14.10 <insert>、<update>、<delete>和<sql>元素 ··············································195 
14.10.1 <insert>元素 

······················································································195 
14.10.2 <update>与<delete>元素 ··································································197 
14.10.3 <sql>元素 ·································································································197 
14.11 级联查询 ······················································································································197 
14.11.1 一对一级联查询 

··················································································197 
14.11.2 一对多级联查询 
··················································································201 
14.11.3 多对多级联查询 
··················································································204 
14.12 动态 SQL······················································································································207 
14.12.1 <if>元素 

·······························································································207 
14.12.2 <choose>、<when>和<otherwise>元素 

································208 
14.12.3 <trim>元素 

·························································································208 
14.12.4 <where>元素 

·····················································································209 
14.12.5 <set>元素 

···························································································210 
14.12.6 <foreach>元素 

··················································································211 
14.12.7 <bind>元素 

························································································212 


14.13 MyBatis的缓存机制 ·································································································213 
14.13.1 一级缓存(SqlSession级别的缓存) 

·············································213 
14.13.2 二级缓存(Mapper级别的缓存) 

··················································215 
14.14 本章小结 ······················································································································217 习题 14········································································································································217 

学习目的与要求·························································································································218 本章主要内容 ·····························································································································218 
15.1 JUnit 5 

······················································································································218 
15.1.1 JUnit 5简介···································································································218 
15.1.2 JUnit 5注解···································································································219 
15.1.3 JUnit 5断言···································································································220 
15.2 单元测试用例·················································································································221 
15.2.1 测试环境的构建 

·······················································································221 
15.2.2测试 Mapper接口 

·················································································225 
15.2.3测试 Service层 

·······················································································227 
15.3 使用 Postman测试 Controller层 

·····································································228 
15.4 本章小结·························································································································231 习题 15········································································································································231 

学习目的与要求·························································································································232 本章主要内容 ·····························································································································232 
16.1 EL 

·······························································································································232 
16.1.1 基本语法·········································································································232 
16.1.2 EL隐含对象 ···································································································234 
16.2 JSTL 

···························································································································236 
16.2.1 配置 JSTL········································································································237 
16.2.2 核心标签库之通用标签 ················································································237 
16.2.3 核心标签库之流程控制标签········································································238 
16.2.4 核心标签库之迭代标签 ················································································240 
16.2.5 函数标签库·····································································································242 
16.3 本章小结·························································································································244 习题 16········································································································································244 



学习目的与要求·························································································································245 本章主要内容 ·····························································································································245 
17.1 系统设计·························································································································245 
17.1.1 系统的功能需求 ····························································································245 
17.1.2 系统的模块划分 ····························································································245 
17.2 数据库设计·····················································································································246 
17.2.1 数据库的概念结构设计 ················································································246 
17.2.2 数据库的逻辑结构设计 ················································································247 
17.2.3 创建数据表·····································································································249 
17.3 系统管理 

···················································································································249 


17.3.1 添加相关依赖·································································································249 
17.3.2 视图页面及静态资源管理············································································249 
17.3.3 应用的包结构·································································································250 
17.3.4 配置文件·········································································································251 
17.4 组件设计 

···················································································································254 


17.4.1 管理员登录权限验证拦截器········································································254 
17.4.2 前台用户登录权限验证拦截器 ···································································255 
17.4.3 验证码·············································································································255 
17.4.4 工具类·············································································································255 
17.5 后台管理子系统的实现································································································255 
17.5.1管理员登录 

·······························································································256 


17.5.2类型管理 

···································································································257 17.5.3新增商品 








···································································································260 
17.5.4查询商品 
···································································································262 
17.5.5修改商品 
···································································································265 
17.5.6删除商品 
···································································································267 
17.5.7查询订单 
···································································································268 
17.5.8按月统计 
···································································································269 
17.5.9按类型统计 

·······························································································271 


17.5.10 安全退出·······································································································273 
17.6 前台电子商务子系统的实现························································································274 
17.6.1 导航栏及首页搜索 

··················································································274 
17.6.2最新商品 

···································································································275 17.6.3用户注册 



···································································································276 17.6.4用户登录 



···································································································277 17.6.5商品详情 
···································································································278 
17.6.6收藏商品 
···································································································279 
17.6.7购物车 

·······································································································280 
17.6.8下单 

···········································································································282 
17.6.9个人信息 

···································································································284 
17.6.10我的收藏 

·································································································285 17.6.11我的订单 
·································································································286 
17.7 本章小结·························································································································287 习题 17········································································································································287 

A.1 基于 SSM的邮件管理系统 

·····················································································288 
A.2 基于 SSM的人事管理系统 
·····················································································288