《基于Spring的Java Web开发技术详解》目录 第1章 Spring、Spring MVC 9 与Java Web应用简介 9 1.1 Java Web应用概述 10 1.1.1 Servlet组件 11 1.1.2 JSP组件 13 1.1.3 共享数据在Web应用中的范围 14 1.1.4 JavaBean组件及其在Web应用中的存放范围 16 1.1.5 自定义的JSP标签 17 1.1.6 XML语言 18 1.1.7 Web服务器 18 1.2 Web组件的三种关联关系 19 1.2.1 请求转发 19 1.2.2 请求重定向 21 1.2.3 包含 21 1.3 MVC概述 22 1.3.1 MVC设计模式 22 1.3.2 JSP Model1和JSP Model2 24 1.4 Spring MVC概述 25 1.4.1 Spring MVC的框架结构 26 1.4.2 Spring MVC的工作流程 28 1.5 Spring框架和它的分支框架 28 1.6 小结 28 1.7 思考题 29 第2章 第一个入门范例:helloapp应用 30 2.1 分析helloapp应用的需求 30 2.2 运用Spring MVC框架 30 2.3 创建视图组件 31 2.3.1 创建JSP文件 31 2.3.2 创建消息资源文件 34 2.4 创建控制器组件 34 2.4.1 Controller控制器类的URL入口和请求转发 35 2.4.2 访问模型组件 36 2.4.3 和视图组件共享数据 36 2.4.4 Web组件存取共享数据的原生态方式 38 2.5 创建模型组件 39 2.6 创建配置文件 41 2.6.1 创建Web应用的配置文件 41 2.6.2 创建Spring MVC框架的配置文件 42 2.6.3 访问静态资源文件 43 2.7 发布和运行helloapp应用 44 2.7.1 初次访问hello.jsp的流程 45 2.7.2 数据验证的流程 46 2.8 依赖注入和控制反转 47 2.9 向Spring框架注册Bean组件的三种方式 49 2.10 小结 49 2.11 思考题 50 第3章 控制器层的常用类和注解 52 3.1 用@Controller注解标识控制器类 52 3.2 控制器对象的存在范围 52 3.3 设置控制器类的请求处理方法的URL入口 53 3.3.1 设置URL入口的普通方式 53 3.3.2 限制URL入口的请求参数、请求方式和请求头 54 3.3.3 @GetMapping和@PostMapping等简化形式的注解 55 3.4 绑定HTTP请求数据和控制器类的方法参数 56 3.4.1 直接定义和请求参数同名的方法参数 57 3.4.2 用@RequestParam注解绑定请求参数 57 3.4.3 用@RequestHeader注解绑定HTTP请求头 58 3.4.4 用@CookieValue注解绑定Cookie 59 3.4.5 用@PathVariable注解绑定RESTFul风格的URL变量 59 3.4.6 把一组请求参数和一个JavaBean类型的方法参数绑定 60 3.5 请求参数的类型转换 61 3.5.1 创建包含表单的hello.jsp 62 3.5.2 创建包含Person信息的Person类 62 3.5.3 创建类型转换器PersonConverter类 63 3.5.4 在Spring MVC配置文件中注册类型转换器 63 3.5.5 创建处理请求参数的控制器类PersonController 64 3.6 请求参数的格式转换 64 3.7 控制器类的方法的参数类型 67 3.8 控制器类的方法的返回类型 67 3.8.1 String返回类型 68 3.8.2 void返回类型 68 3.9 控制器与视图的数据共享 68 3.9.1 @ModelAttribute注解 69 3.9.2 Model接口 71 3.9.3 ModelMap类 72 3.9.4 ModelAndView类 72 3.9.5 把Model中的数据存放在session范围内 73 3.9.6 通过@SessionAttribute注解读取session范围内的Model数据 75 3.10 @ControllerAdvice注解的用法 76 3.11 小结 77 3.12 思考题 78 第4章 视图层创建HTML表单 80 4.1 Spring标签库中的表单标签 80 4.1.1 表单标签 80 4.1.2 文本框标签 81 4.1.3 密码框标签 81 4.1.4 隐藏框标签 82 4.1.5 文本域标签 82 4.1.6 复选框标签 82 4.1.7 组合复选框标签 82 4.1.8 单选按钮标签 标签 84 4.1.9 组合单选按钮标签 85 4.1.10 下拉列表标签 85 4.1.11 输出错误消息的标签 86 4.2 处理复杂表单的Web应用范例 87 4.2.1 在JSP文件中生成复杂表单 87 4.2.2 控制器类与视图共享表单数据 89 4.3 设置HTTP请求和响应结果的字符编码 91 4.4 小结 91 4.5 思考题 92 第5章 数据验证 94 5.1 按照JSR-303规范进行数据验证 94 5.1.1 数据验证注解 94 5.1.2 自定义数据验证注解 97 5.1.3 在Spring MVC的配置文件中配置Hibernate Validator验证器 98 5.1.4 在控制器类中进行数据验证 99 5.1.5 在JSP文件中指定显示错误消息的CSS样式 100 5.2 Spring框架的数据验证机制 100 5.2.1 实现Spring的Validator接口 101 5.2.2 用数据验证类进行数据验证 102 5.3 小结 103 5.4 思考题 104 第6章 拦截器 105 6.1 拦截器的基本用法 105 6.1.1 创建自定义的拦截器 106 6.1.2 配置拦截器 106 6.1.3 拦截器的执行流程 107 6.2 串联的拦截器 108 6.3 范例:用拦截器实现用户身份验证 110 6.4 小结 113 6.5 思考题 114 第7章 异常处理 115 7.1 Spring MVC的异常处理机制 116 7.1.1 处理视图层的异常 117 7.1.2 处理HTTP状态代码为404的错误 119 7.1.3 处理模型层的异常 119 7.1.4 处理控制器层的异常 120 7.2 使用SimpleMappingExceptionResolver类 121 7.3 实现HandlerExceptionResolver接口 123 7.4 使用@ExceptionHandler注解 124 7.4.1 在控制器类中用@ExceptionHandler注解标识多个方法 125 7.4.2 在控制器增强类中使用@ExceptionHandler注解 125 7.5 小结 126 7.6 思考题 126 第8章 Web应用的国际化 128 8.1 Locale类的用法 129 8.2 Spring MVC框架的处理国际化的接口和类 130 8.3 使用SessionLocaleResolver 131 8.3.1 在JSP文件的URL中包含表示Locale的请求参数 132 8.3.2 创建和配置消息资源文件 133 8.3.3 在控制器类中读取消息文本 135 8.3.4 读取带参数的消息文本 136 8.3.5 在控制器类中测试Locale信息 136 8.4 使用CookieLocaleResolver 138 8.5 使用AcceptHeaderLocaleResolver 140 8.6 小结 141 8.7 思考题 142 第9章 Spring MVC的各种实用操作 143 9.1 文件上传 143 9.2 文件下载 145 9.3 利用Ajax和JSON实现前后端分离 146 9.3.1 JSON数据格式 148 9.3.2 用@RequestBody和@ResponseBody注解转换JSON格式的请求和响应 149 9.3.3 用JavaScript和Ajax开发前端网页 150 9.4 利用Token机制解决重复提交 153 9.4.1 用自定义的拦截器来管理Token 154 9.4.2 定义并在控制器类中使用@Token注解 157 9.4.3 在HTML表单中定义token隐藏字段 157 9.5 服务器端推送 158 9.5.1 在多个TCP连接中推送数据 159 9.5.2 在一个长TCP连接中推送数据 163 9.6 小结 164 9.7 思考题 164 第10章 异步处理客户请求 166 10.1 异步处理客户请求的基本原理 166 10.2 在web.xml文件中启用异步处理功能 169 10.3 配置异步处理线程池 170 10.4 请求处理方法返回类型为Callable 170 10.5 请求处理方法返回类型为WebAsyncTask 173 10.6 请求处理方法返回类型为DeferredResult 175 10.7 处理异步操作中产生的异常 178 10.8 小结 179 10.9 思考题 179 第11章 AOP面向切面编程 180 和输出日志 180 11.1 SLF4J和Log4J的整合 180 11.2 通过SLF4J API输出日志 183 11.3 AOP的基本概念和原理 184 11.4 用AOP和SLF4J输出日志的范例 186 11.5 通过配置方式配置切面类 190 11.6 小结 191 11.7 思考题 192 第12章 创建模型层组件 193 12.1 安装MySQL数据库和创建SAMPLEDB数据库 193 12.2 通过Spring JDBC API访问数据库 197 12.3 在Spring配置文件中配置数据源和事务管理器 198 12.4 创建DAO层组件 200 12.4.1 向数据库新增Customer对象 201 12.4.2 获得新增Customer对象的ID 202 12.4.3 向数据库更新Customer对象 203 12.4.4 向数据库批量更新Customer对象 203 12.4.5 向数据库删除Customer对象 203 12.4.6 向数据库查询一个Customer对象 204 12.4.7 向数据库查询多个Customer对象 204 12.5 创建业务逻辑服务层组件 204 12.6 @Repository注解和@Service注解 206 12.7 用@Transactional注解声明事务 206 12.7.1 事务传播行为 208 12.7.2 事务隔离级别 208 12.7.3 事务超时 209 12.7.4 事务的只读属性 209 12.7.5 事务撤销规则 209 12.8 控制器层访问模型层组件 209 12.9 小结 211 12.10 思考题 212 第13章 通过Spring Data API 214 访问数据库 214 13.1 ORM的基本原理 216 13.1.1 描述对象-关系映射信息的元数据 216 13.1.2 访问ORM软件的API 217 13.2 Spring Data API的主要接口 218 13.3 创建通过Spring Data API访问数据库的范例 219 13.3.1 创建CustomerDao接口 219 13.3.2 创建CustomerService接口和实现类 219 13.3.3 创建Spring配置文件 220 13.4 Repository接口的用法 222 13.4.1 在查询方法名中设定查询条件 222 13.4.2 用@Query注解设定查询语句 223 13.4.3 通过@Query和@Modifying注解进行新增、更新和删除操作 224 13.5 CrudRepository 接口的用法 225 13.6 PagingAndSortingRepository 接口的用法 226 13.6.1 对查询结果分页 226 13.6.2 对查询结果排序 227 13.7 JpaRepository 接口的用法 228 13.8 JpaSpecificationExecutor 接口的用法 230 13.9 通过JPA API实现自定义Repository接口 231 13.10 用Maven下载所依赖的类库 232 13.11 小结 235 13.12 思考题 236 第14章 创建综合购物网站应用 237 14.1 实现业务数据 237 14.2 实现业务逻辑服务层 241 14.3 实现DAO层 244 14.4 实现控制器层 245 14.4.1 客户身份验证 246 14.4.2 管理购物车 248 14.4.3 管理订单 252 14.5 配置、发布和运行netstore应用 256 14.5.1 安装SAMPLEDB数据库 256 14.5.2 发布netstore应用 257 14.5.3 运行netstore应用 257 14.6 小结 260 14.7 思考题 261 第15章 创建RESTFul风格的 263 Web应用 263 15.1 RESTFul风格的HTTP请求 263 15.2 控制器类处理RESTFul风格的HTTP请求 264 15.2.1 读取客户请求中的RESTFul风格的URL变量 266 15.2.2 读取客户请求中的JSON格式的Java对象的数据 267 15.2.3 请求处理方法的返回类型 267 15.3 客户端发送RESTFul风格的HTTP请求 268 15.4 通过RestTemplate类模拟客户程序 271 15.5 小结 273 15.6 思考题 274 第16章 WebFlux响应式编程 275 16.1 Spring WebFlux框架概述 277 16.2 WebFlux框架访问MySQL数据库 279 16.3 WebFlux框架的注解开发模式 280 16.3.1 用R2DBC映射注解来映射Customer实体类 281 16.3.2 创建CustomerDao接口 282 16.3.3 创建CustomerService业务逻辑服务接口以及实现类 282 16.3.4 创建CustomerController控制器类 283 16.3.5 上传和下载文件 286 16.4 WebFlux框架的函数式开发模式 288 16.5 用Intellij IDEA开发工具开发WebFlux应用 290 16.5.1 搭建helloapp应用的基本框架 291 16.5.2 创建Java类以及Spring属性配置文件 294 16.5.3 创建Maven配置文件pom.xml 294 16.5.4 由Spring Boot创建的HelloappApplication启动类 295 16.5.5 运行helloapp应用 295 16.5.6 整合JUnit编写测试程序 296 16.6 小结 297 16.7 思考题 298 第17章 基于WebSocket的双向通信 299 17.1 WebSocket的基本原理 299 17.2 Spring WebSocket API简介 300 17.3 用WebSocket创建聊天应用 301 17.3.1 创建WebSocket握手拦截器类 301 17.3.2 创建WebSocket通信处理器类 302 17.3.3 配置WebSocket握手拦截器类和通信处理器类 304 17.3.4 创建负责登录聊天室的控制器类 305 17.3.5 创建负责客户端登录以及WebSocket通信的JSP文件 306 17.3.6 运行范例程序 308 17.4 小结 310 17.5 思考题 311 第18章 用Spring整合CXF 312 开发Web服务 312 18.1 Web服务运作的基本原理 312 18.2 CXF框架和JWS API 315 18.3 创建提供Web服务的Web应用 316 18.3.1 创建Web服务接口和实现类 316 18.3.2 在Spring配置文件中配置Web服务 317 18.3.3 在web.xml配置文件中配置CXF 317 18.3.4 在Tomcat中发布Web服务 318 18.4 创建访问Web服务的Web应用 319 18.5 小结 321 18.6 思考题 321 第19章 用Spring Cloud开发微服务 323 19.1 微服务架构的基本原理 323 19.2 Spring Cloud框架概述 325 19.3 创建采用Spring Cloud框架的cloudapp应用 326 19.4 创建微服务注册中心eurekamodule模块 328 19.4.1 创建EurekamoduleApplication启动类 330 19.4.2 配置eurekamodule模块 330 19.4.3 通过浏览器访问Eureka服务器 331 19.5 创建提供微服务的servicemodule模块 332 19.5.1 创建ServicemoduleApplication启动类 334 19.5.2 创建微服务入口ServiceController控制器类 334 19.5.3 配置servicemodule模块 335 19.5.4 运行servicemodule模块 335 19.6 创建访问微服务的clientmodule模块 337 19.6.1 创建ClientmoduleApplication启动类 338 19.6.2 创建访问微服务的ClientController控制器类 338 19.6.3 通过Feign来访问微服务 340 19.6.4 配置clientmodule模块 341 19.6.5 运行clientmodule模块 341 19.7 小结 343 19.8 思考题 344 附录A 部分软件的安装和使用 346 A.1 本书所用软件的下载地址 346 A.2 部分软件的安装 346 A.2.1 安装JDK 346 A.2.2 安装ANT 347 A.2.3 安装Tomcat 348 A.3 编译源程序 348 A.4 处理编译和运行错误 349