关于我们
![]() ![]() |
Spring MVC开发技术指南
本书以大量的实例介绍了Spring MVC子框架应用的方法和技术, 同时以大量的工程实践环节巩固这些方法和技术, 力图使学生达到“做中学, 学中做”的状态。全书论述了Spring MVC子框架概述、开发环境构建、基本流程、基本配置以及开发步骤、控制器、数据绑定和表单标签、类型转换和格式化、文件上传和下载、国际化、输入校验、EL与JSTL以及名片管理系统的设计与实现等内容。
1.本书从Spring MVC基础开始讲解,逐步深入到Spring MVC开发技术,内容由易到难,讲解由浅入深。
2.包含大量实例,包括简单的代码演示,较大应用程序的实现步骤,方便阅读和实现。 3.每章包含实践环节与课后习题,帮助读者巩固所学知识,提高编程能力。 4. 可作为高等院校相关专业的教材,也可作为教辅资料,还可作为技术开发人员的参考书。 5.本书提供配套电子课件、源代码以及实践环节与课后习题的参考答案,读者可登录清华大学出版社网站下载,也可加入教材交流QQ群(46696527)下载。
目前,尽管市面上有许多与Spring框架有关的书籍,但单独介绍Spring MVC子框架的书籍还寥寥无几。而且相关书籍非常注重知识的系统性,使得知识体系结构过于全面、庞大。这种知识体系过于庞大的书籍不太适合作为高校计算机相关专业的教材。同时,许多教师在教学过程中,非常希望教材本身能引导学生尽可能地参与到教学活动中,因此本书的重点不是简单地介绍Spring MVC子框架的基础知识,而是大量的实例与实践环节。读者通过本书可以快速地掌握Spring MVC子框架,提高Java Web应用的开发能力。全书共10章,各章的具体内容如下:
第1章重点讲解MVC的设计思想以及Spring MVC开发环境的构建。 第2章详细讲解基于注解的控制器、Controller接收请求参数的方式以及如何编写请求处理方法,是本书的重点内容之一。 第3章介绍类型转换器和格式化转换器,包括内置的类型转换器和格式化转换器以及自定义类型转换器和格式化转换器。 第4章讲解数据绑定和表单标签库,是本书的重点内容之一。 第5章详细讲解Spring MVC框架的输入验证体系,包括Spring验证和JSR303验证,是本书的重点内容之一。 第6章介绍Spring MVC国际化的实现方法。 第7章讲解如何使用Spring MVC框架进行文件的上传与下载。 第8章详细讲解如何使用Spring MVC框架进行异常的统一处理,是本书的重点内容之一。 第9章介绍EL与JSTL的基本用法。 第10章是本书的重点内容之一,它将前面章节的知识进行综合,详细地讲解了如何使用Spring MVC框架来开发一个Web应用(名片管理系统)。 本书特别注重引导学生参与课堂教学活动,适合作为大学计算机及相关专业的教材或教学参考书,也适合作为Spring MVC应用开发人员的参考用书。 为便于教学,本书配有教学课件、源代码以及实践环节与课后习题参考答案,读者可从清华大学出版社网站免费下载,也可加入教材交流QQ群(46696527)下载。 由于编者水平有限,书中难免会有不足之处,敬请广大读者批评指正。 编 者 2017年2月
第1章?Spring MVC入门 1
1.1 MVC模式与Spring MVC工作原理 1 1.1.1 MVC模式 1 1.1.2 Spring MVC工作原理 2 1.1.3 Spring MVC接口 3 1.2 Spring MVC的开发环境 3 1.2.1 Spring的下载与安装 6 1.2.2 使用Eclipse开发Spring MVC应用 6 1.3 第一个Spring MVC应用 12 1.3.1 应用首页 12 1.3.2 实现Controller 13 1.3.3 配置Controller 14 1.3.4 应用的其他页面 14 1.3.5 发布并运行Spring MVC应用 14 1.3.6 实践环节 15 1.4 视图解析器 15 1.5 本章小结 16 习题1 16 第2章?Controller 17 2.1 基于注解的控制器 17 2.1.1 Controller注解类型 18 2.1.2 RequestMapping注解类型 19 2.1.3 编写请求处理方法 20 2.2 Controller接收请求参数的常见方式 21 2.2.1 通过实体bean接收请求参数 21 2.2.2 通过处理方法的形参接收请求参数 28 2.2.3 通过HttpServletRequest接收请求参数 29 2.2.4 通过@PathVariable接收URL中的请求参数 29 2.2.5 通过@RequestParam接收请求参数 30 2.2.6 通过@ModelAttribute接收请求参数 31 2.2.7 实践环节 32 2.3 重定向与转发 32 2.4 应用@Autowired和@Service进行依赖注入 33 2.5 @ModelAttribute 36 2.6 本章小结 37 习题2 38 第3章?类型转换和格式化 39 3.1 类型转换的意义 39 3.2 Converter 41 3.2.1 内置的类型转换器 41 3.2.2 自定义类型转换器 43 3.2.3 实践环节 47 3.3 Formatter 47 3.3.1 内置的格式化转换器 48 3.3.2 自定义格式化转换器 48 3.3.3 实践环节 53 3.4 本章小结 53 习题3 53 第4章?数据绑定和表单标签库 54 4.1 数据绑定 54 4.2 表单标签库 54 4.2.1 表单标签 55 4.2.2 input标签 56 4.2.3 password标签 56 4.2.4 hidden标签 56 4.2.5 textarea标签 57 4.2.6 checkbox标签 57 4.2.7 checkboxes标签 57 4.2.8 radiobutton标签 58 4.2.9 radiobuttons标签 58 4.2.10 select标签 58 4.2.11 options标签 58 4.2.12 errors标签 59 4.3 数据绑定应用 59 4.3.1 应用的相关配置 59 4.3.2 领域模型 61 4.3.3 Service层 62 4.3.4 Controller层 63 4.3.5 View层 64 4.3.6 测试应用 67 4.4 实践环节 68 4.5 本章小结 69 习题4 69 第5章?数据验证 70 5.1 数据验证概述 70 5.1.1 客户端验证 70 5.1.2 服务器端验证 71 5.2 Spring验证器 71 5.2.1 Validator接口 71 5.2.2 ValidationUtils类 71 5.2.3 验证示例 72 5.2.4 实践环节 80 5.3 JSR 303验证 81 5.3.1 JSR 303验证配置 81 5.3.2 标注类型 82 5.3.3 验证示例 83 5.3.4 实践环节 87 5.4 本章小结 88 习题5 88 第6章?国际化 89 6.1 程序国际化概述 89 6.1.1 Java国际化的思想 89 6.1.2 Java支持的语言和国家 90 6.1.3 Java程序国际化 91 6.1.4 带占位符的国际化信息 92 6.1.5 实践环节 93 6.2 Spring MVC的国际化 93 6.2.1 Spring MVC加载资源属性文件 94 6.2.2 语言区域的选择 94 6.2.3 使用message标签显示国际化信息 95 6.3 用户自定义切换语言示例 96 6.4 本章小结 101 习题6 101 第7章?文件的上传与下载 102 7.1 文件上传 102 7.1.1 commons-fileupload组件 102 7.1.2 基于表单的文件上传 103 7.1.3 MultipartFile接口 103 7.1.4 单文件上传 104 7.1.5 多文件上传 109 7.1.6 实践环节 111 7.2 文件下载 111 7.2.1 文件下载的实现方法 111 7.2.2 文件下载过程 112 7.3 本章小结 115 习题7 115 第8章?统一异常处理 117 8.1 示例介绍 117 8.2 SimpleMappingExceptionResolver类 124 8.3 HandlerExceptionResolver接口 126 8.4 @ExceptionHandler注解 127 8.5 本章小结 129 习题8 129 第9章?EL与JSTL 130 9.1 表达式语言EL 130 9.1.1 基本语法 130 9.1.2 EL隐含对象 133 9.1.3 实践环节 136 9.2 JSP标准标签库JSTL 136 9.2.1 配置JSTL 136 9.2.2 核心标签库之通用标签 137 9.2.3 核心标签库之流程控制标签 138 9.2.4 核心标签库之迭代标签 140 9.2.5 函数标签库 142 9.2.6 实践环节 146 9.3 本章小结 146 习题9 146 第10章?名片管理系统的设计与实现 148 10.1 系统设计 148 10.1.1 系统功能需求 148 10.1.2 系统模块划分 148 10.2 数据库设计 149 10.2.1 数据库概念结构设计 149 10.2.2 数据库逻辑结构设计 150 10.3 系统管理 150 10.3.1 导入相关的jar包 150 10.3.2 JSP页面管理 151 10.3.3 包管理 156 10.3.4 配置文件管理 157 10.4 组件设计 160 10.4.1 工具类 160 10.4.2 统一异常处理 161 10.4.3 登录权限控制器 162 10.4.4 数据库统一操作 162 10.5 名片管理 164 10.5.1 Controller实现 164 10.5.2 Service实现 168 10.5.3 Dao实现 170 10.5.4 添加名片 172 10.5.5 查询名片 174 10.5.6 修改名片 178 10.5.7 删除名片 183 10.6 用户相关 187 10.6.1 Controller实现 187 10.6.2 Service实现 189 10.6.3 Dao实现 190 10.6.4 注册 192 10.6.5 登录 195 10.6.6 修改密码 197 10.6.7 基本信息 199 10.7 安全退出 201 10.8 本章小结 201 参考文献 202
第3章
类型转换和格式化 学习目的与要求 本章主要学习类型转换器和格式化转换器。通过本章的学习,应该理解类型转换器和格式化转换器的原理,掌握类型转换器和格式化转换器的用法。 本章主要内容 * Converter * Formatter 在Spring MVC框架中,需要收集用户请求参数,并将请求参数传递给应用的控制器组件。此时存在一个问题,所有的请求参数类型只能是字符串数据类型,但Java是强类型语言,所以Spring MVC框架必须将这些字符串请求参数转换成相应的数据类型。 Spring MVC框架不仅提供了强大的类型转换和格式化机制,而且开发者还可以方便地开发出自己的类型转换器和格式化转换器,完成字符串和各种数据类型之间的转换。这正是学习本章的目的所在。 3.1 类型转换的意义 本节通过一个简单应用(JSP + Servlet)为示例来介绍类型转换的意义。如图3.1所示地添加商品页面,该页面用于收集用户输入的商品信息。商品信息包括:商品名称(字符串类型String)、商品价格(双精度浮点类型double)、商品数量(整数类型int)。 图3.1 添加商品信息的收集页面 addGoods.jsp页面的代码如下: 商品名称: 商品价格: 商品数量: 希望页面收集到的数据提交到addGoods的Servlet(AddGoodsServlet类),该Servlet将这些请求信息封装成一个Goods类的值对象。 Goods类的代码如下: package domain; public class Goods { private String goodsname; private double goodsprice; private int goodsnumber; //无参数的构造方法 public Goods(){} //有参数的构造方法 public Goods(String goodsname, double goodsprice, int goodsnumber) { super(); this.goodsname = goodsname; this.goodsprice = goodsprice; this.goodsnumber = goodsnumber; } //此处省略了setter和getter方法 … } AddGoodsServlet类的代码如下: package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import domain.Goods; public class AddGoodsServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //设置编码,防止乱码 request.setCharacterEncoding("utf-8"); //获取参数值 String goodsname = request.getParameter("goodsname"); String goodsprice = request.getParameter("goodsprice"); String goodsnumber = request.getParameter("goodsnumber"); //下面进行类型转换 double newgoodsprice = Double.parseDouble(goodsprice); int newgoodsnumber = Integer.parseInt(goodsnumber); //将转换后的数据封装成goods值对象 Goods goods = new Goods(goodsname, newgoodsprice, newgoodsnumber); //将goods值对象传递给数据访问层,进行添加操作,代码省略 … } } 对于上面这个应用而言,开发者需要自己在Servlet中进行类型转换,并将其封装成值对象。这些类型转换操作全部手工完成,非常烦琐。 对于Spring MVC框架而言,它必须将请求参数转换成值对象类里各属性对应的数据类型——这就是类型转换的意义。 3.2 Converter Spring MVC框架的Converter是一个可以将一种数据类型转换成另一种数据类型的接口,这里S表示源类型,T表示目标类型。开发者在实际应用中,使用框架内置的类型转换器基本就够了,但有时需要编写具有特定功能的类型转换器。 3.2.1 内置的类型转换器 在Spring MVC框架中,对于常用的数据类型,开发者无须创建自己的类型转换器,因为Spring MVC框架有许多内置的类型转换器完成常用的类型转换。Spring MVC框架提供的内置类型转换包括如下几种类型。 * 标量转换器 StringToBooleanConverter:String到boolean类型转换。 ObjectToStringConverter:Object到String转换,调用toString方法转换。 StringToNumberConverterFactory:String到数字转换(如Integer、Long等)。 NumberToNumberConverterFactory:数字子类型(基本类型)到数字类型(包装类型)转换。 StringToCharacterConverter:String到Character转换,取字符串第一个字符。 NumberToCharacterConverter:数字子类型到Character转换。 CharacterToNumberFactory:Character到数字子类型转换。 StringToEnumConverterFactory:String到枚举类型转换,通过Enum.valueOf将字符串转换为需要的枚举类型。 EnumToStringConverter:枚举类型到String转换,返回枚举对象的name()值。 StringToLocaleConverter:String到java.util.Locale转换。 PropertiesToStringConverter:java.util.Properties到String转换,默认通过ISO-8859-1解码。 StringToPropertiesConverter:String到java.util.Properties转换,默认使用ISO-8859-1编码。 * 集合、数组相关转换器 ArrayToCollectionConverter:任意数组到任意集合(List、Set)转换。 CollectionToArrayConverter:任意集合到任意数组转换。 ArrayToArrayConverter:任意数组到任意数组转换。 CollectionToCollectionConverter:集合之间的类型转换。 MapToMapConverter:Map之间的类型转换。 ArrayToStringConverter:任意数组到String转换。 StringToArrayConverter:字符串到数组的转换,默认通过“,”分隔,且去除字符串的两边空格(trim)。 ArrayToObjectConverter:任意数组到Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回数组的第一个元素并进行类型转换。 ObjectToArrayConverter:Object到单元素数组转换。 CollectionToStringConverter:任意集合(List、Set)到String转换。 StringToCollectionConverter:String到集合(List、Set)转换,默认通过“,”分隔,且去除字符串的两边空格(trim)。 CollectionToObjectConverter:任意集合到任意Object的转换,如果目标类型和源类型兼容,直接返回源对象;否则返回集合的第一个元素并进行类型转换。 ……
你还可能感兴趣
我要评论
|