目录 源码下载 学习目的与要求······························································································································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