Spring企业级程序设计 • 【第6章 深入Spring MVC开发】
全部章节 >>>>
本章目录
6.3.2 基于Annotaion JSR-303标准的数据校验
6.1 模型数据解析及控制器返回值
Spring MVC框架作为一个MVC框架,很重要的一项工作是控制器获取模型数据并返回给客户端,即在JSP页面展示模型数据。
模型数据的绑定,是指将模型数据绑定给JSP域对象。模型数据的绑定是由视图解析器来完成的,开发时先添加模型数据,再交给视图解析器来绑定。
Spring MVC提供了Map、Model和ModelAndView等方式添加模型数据,而控制器的返回值有ModelAndView、String和void。
配置视图解析器,简化转向地址的编写。在Spring MVC的核心配置文件中,配置视图解析器。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp"></property>
<property name="suffix" value=".jsp"></property>
</bean>
6.1.1 ModelAndView多种用法
示例:模型数据解析及控制器返回值的多种用法。
配置视图解析器后,转向地址简化了,前缀和后缀都不用写了
@RequestMapping("/modelAndViewTest1")
public ModelAndView modelAndViewTest1(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "大哥");
modelAndView.setViewName("index");
return modelAndView;
}
@RequestMapping("/modelAndViewTest2")
public ModelAndView modelAndViewTest2(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name", "二哥");
View view = new InternalResourceView("/WEB-INF/jsp/index.jsp");
modelAndView.setView(view);
return modelAndView;
}
@RequestMapping("/modelAndViewTest3")
public ModelAndView modelAndViewTest3(){
ModelAndView modelAndView = new ModelAndView("index");
modelAndView.addObject("name", "三哥");
return modelAndView;
}
@RequestMapping("/modelAndViewTest4")
public ModelAndView modelAndViewTest4(){
ModelAndView modelAndView = new ModelAndView("index","name", "四哥");
return modelAndView;
}
6.1.2 Map添加模型数据和返回String类型值
Spring MVC在内部使用Model接口存储模型数据,在调用业务方法前会创建一个隐含对象作为模型数据的存储容器。
设置业务方法的入参为Map类型,Spring MVC会将隐含对象的引用传递给入参。
在方法体中,开发者可以通过入参对象访问到模型中的所有数据,也可以向模型中添加新数据。即只需要在业务方法添加Map类型的入参,方法体中便可通过对入参的操作来完成模型数据的添加。
示例: 使用Map类型的入参来完成模型数据的添加,并且返回String类型值
@Controller
public class MapController {
@RequestMapping("/mapTest")
public String mapTest(Map<String, String> map){
map.put("name", "小王");
return "index";
}
}
配置视图解析器后,转向地址简化了,前缀和后缀都不用写了

6.1.3 Model添加模型数据和返回String类型值
示例:使用Model类型的入参完成模型数据的添加,并且返回String类型值
@Controller
public class ModelController {
@RequestMapping("/modelTest")
public String modelTest(Model model){
model.addAttribute("name", "小章");
return "index";
}
}

6.1.4 返回值为String类型的重定向和转发
示例:返回值为String类型时,重定向和转发的跳转的实现。
@RequestMapping("/forward")
// 转发跳转到商品列表页面
public String forwardTest(){
return "forward:/jump.do";
}
@RequestMapping("/redirect")
// 重定向跳转到商品列表页面
public String redirectTest(){
return "redirect:/jump.do";
}
6.1.5 实践练习
6.2 Spring MVC表单标签库
表单标签库的实现类在spring-webmvc.jar文件当中,标签库描述文件是spring-form.tld。要使用Spring MVC的表单标签库,必须在JSP页面的开头处声明一下taglib指令。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
|
标签 |
描述 |
|
Form |
渲染表单元素 |
|
input |
渲染<input type=”text” />元素 |
|
password |
渲染<input type=”password” />表单元素 |
|
hidden |
渲染<input type=”hidden” />元素 |
|
textarea |
渲染textarea元素 |
|
Checkbox |
渲染一个<input type=”checkbox” />元素 |
|
Checkboxes |
渲染多个<input type=”checkbox” />元素 |
|
Radiobutton |
渲染一个<input type=”radio” />元素 |
|
Radiobuttons |
渲染多个<input type=”radio” />元素 |
|
Select |
渲染一个选择元素 |
|
Option |
渲染一个可选元素 |
|
Options |
渲染一个可选元素列表 |
|
errors |
在span元素中渲染字段错误 |
6.2.1 form表单与模型数据的绑定
示例:完成Spring MVC表单与模型数据绑定。
<body>
<h1>修改学生信息</h1>
<form:form modelAttribute="student" action="modifyDo.do" method="post">
学生姓名:<form:input path="stuName" /><br/>
学生年龄:<form:input path="age" /><br/>
<input type="submit" value="提交"/>
</form:form>
</body>
<form:form></form:form>标签渲染的是HTML中的<form></form>,通过modelAttribute属性绑定具体的模型数据,<form:input />渲染的是HTML中的<input type="text"/>,form标签绑定的是模型数据,input标签绑定的就是模型数据中的属性值,通过path属性与模型数据的属性名对应。
6.2.2 Spring MVC常用标签
示例:首先在Student类中添加password、hobby、sex、city和introduce五个属性,然后在modifyStudent.jsp文件中添加标签内容,最后在页面输出修改后学生信息。
<form:form modelAttribute="student" action="modifyDo.do" method="post">
// 原有代码省略
学生密码:<form:password path="password" /><br/>
学生爱好:<form:checkbox path="hobby" value="读书" />读书
<form:checkbox path="hobby" value="看电影" />看电影
…<br/>
学生性别:<form:radiobutton path="sex" value="男" />男
<form:radiobutton path="sex" value="女" />女<br/>
城市:<form:select path="city">
<form:option value="0">--请选择--</form:option>
<form:option value="北京">北京</form:option>
…
</form:select><br/>
自我介绍:<form:textarea path="introduce" />
<input type="submit" value="提交"/>
</form:form>
6.2.3 实践练习
6.3 Spring MVC数据校验
数据校验就是用来验证客户输入的数据是否合法。数据校验分为客户端校验和服务端校验,Spring MVC提供的数据校验为服务端校验。
Spring MVC提供了两种数据校验的方式:基于Validator接口的方式和使用Annotaion JSR-303标准进行校验。
使用Spring MVC的数据校验需导入jar包

6.3.1 基于Validator接口方式的数据验证
示例:在学生登录界面,验证学生姓名和密码是否为空。
@RequestMapping("/login")
// @Validated:对它注解的POJO进行校验
// BindingResult:通过这个对象可以获取到校验失败额信息,
// 它和@Validated注解必须配对使用,而且一前一后
public String login(@Validated Student student, BindingResult rs){
if(rs.hasErrors()){
// 校验失败返回登录界面
return "login";
}
// 校验成功返回首页
return "success";
}
public class StudentValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Student.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "stuName", null, "学生用户名不能为空!");
ValidationUtils.rejectIfEmpty(errors, "password", null, "学生密码不能为空!");
}
}
<!-- 配置自定义校验器 -->
<bean id="studentValidator" class="com.mhys.demo.validator.StudentValidator"></bean>
<!-- 开启注解驱动 -->
<mvc:annotation-driven validator="studentValidator"></mvc:annotation-driven>
<body>
<h1>学生登录</h1>
<form:form action="login.do" modelAttribute="student" method="post">
学生用户名:<form:input path="stuName"/><form:errors path="stuName" /><br/><br/>
学生密码:<form:input path="password"/><form:errors path="password" /><br/><br/>
<input type="submit" value="登 录" />
</form:form>
</body>
6.3.2 基于Annotaion JSR-303标准的数据校验
使用Annotaion JSR-303标准则不需要自定义验证器,通过注解的方式可以直接在实体类中添加每个属性的校验规则,这种方式使用更加方便。
|
标签 |
描述 |
|
@Null |
限制只能为null |
|
@NotNull |
限制必须不为null |
|
@AssertFalse |
限制只能为false |
|
@AssertTrue |
限制只能为true |
|
@DecimalMax(value) |
限制必须为一个不大于指定值得数字 |
|
@DecimalMin(value) |
限制必须为一个不小于指定值得数字 |
|
@Max(value) |
限制必须为一个不大于指定值的数字 |
|
@Min(value) |
限制必须为一个不小于指定值的数字 |
|
@Pattern(value) |
限制必须符合指定的正则表达式 |
|
@Size(max,min) |
限制字符长度必须在min到max之间 |
|
@NotEmpty |
验证注解的元素值不为null(字符串长度不为0、集合大小不为0) |
|
@NotBlank |
验证注解的元素值不为空(只用于字符串且在比较时会去除字符串的空格) |
|
|
验证注解的元素值是Email,也可以通过正则表达式指定自定义的Email格式 |
示例:通过用户注册功能,使用注解的方式,完成用户实体类属性的校验。
public class User {
@NotEmpty(message="用户名不能为空!")
private String username;
@Size(min=6,max=12,message="密码长度为6到12位!")
private String password;
@Email(regexp = "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$",
message = "请输入正确的邮箱格式")
private String email;
@Pattern(regexp = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$",
message="请输入正确的电话格式")
// set()方法和get()方法省略
}
@RequestMapping("/registerDo")
public String registerDo(@Valid User user, BindingResult br){
if(br.hasErrors()){
return "register";
}
return "registerSuccess";
}
<form:form action="registerDo.do" modelAttribute="user" method="post">
用户名:<form:input path="username"/><form:errors path="username" cssClass="error" /><br/><br/>
用户密码:<form:password path="password"/><form:errors path="password" cssClass="error" /><br/><br/>
用户邮箱:<form:input path="email"/><form:errors path="email" cssClass="error" /><br/><br/>
用户电话:<form:input path="telphone"/><form:errors path="telphone" cssClass="error" /><br/><br/>
<input type="submit" value="注 册" />
</form:form>

6.3.3 实践练习
6.4综合案例
6.4.1 在Spring MVC中使用RESTful架构
REST(RepresEntational State Transfer,(资源)表现层状态转化)是目前最流行的一种互联网软件架构,它结构清晰、符合标准、易于理解并且扩展方便,得到了越来越多网站的采用。特点如下:
url更加简洁,将参数通过url传到服务端。
- 非REST的url为http://…/queryUserById?id=1。
- REST的url风格为http://…/queryUserById/1 。
有利于不同系统之间的资源共享,只需要遵守规范,不需要做其他的配置就能达到资源共享。
示例:使用@PathVariable注解获取REST的url风格中的参数值。
@Controller
public class TestController {
@RequestMapping("/test/{name}/{id}")
@ResponseBody
public String test(@PathVariable String name,@PathVariable String id){
return "名字:" + name + " ----- 编号:" + id;
}
}

6.4.2 课程管理模块需求说明
在课程管理系统中,课程管理模块主要负责管理所有的课程信息。主要功能包括添加、删除、修改和查找课程信息。根据本章所学知识,开发一个简单的课程管理模块,要求:
- 完成课程列表展示。
- 新增课程功能。
- 删除课程功能。
- 修改课程功能。
6.4.2 课程管理模块实现思路
创建t10_course表,添加courseId、courseName和coursePrice字段。
在springmvc.xml配置文件中开启注解扫描功能、配置数据源、配置JdbcTemplate模板、开启注解驱动和配置视图解析器,dataSource.properties配置文件中内容省略。
在com.mhys.demo.pojo包下创建T10_course类,添加courseId、courseName和coursePrice属性,添加注解和验证规则。
在com.mhys.demo.dao包下创建T10_courseDao接口,添加getT10_courseList()方法、addT10_course()方法和deleteT10_course()方法。
在com.mhys.demo.dao.impl包下创建T10_courseDaoImpl类并实现T10_courseDao接口,实现接口中的方法
在com.mhys.demo.service包下创建T10_courseService接口,添加getT10_courseList()方法、addT10_course()方法和deleteT10_course()方法。
在com.mhys.demo.service.impl包下创建T10_courseServiceImpl类并实现T10_courseService接口,实现接口中的方法。
在com.mhys.demo.controller包下创建T10_courseServiceController处理器类并注册到容器,声明getT10_courseList()方法、addT10_course()方法、addT10_courseDo()方法和deleteT10_courseDo()方法。
在WEB-INF/jsp目录下创建t10_course_list.jsp文件和addT10_course.jsp文件。



6.4.3 实践练习
总结:
Spring MVC提供了Map、Model和ModelAndView等方式添加模型数据,而控制器的返回值有ModelAndView、String和void。
Spring表单标签有 : <form:form>标签、<form:input>标签<form:password>标签、<form:chexkbox>标签、<form:radiobutton>标签、<form:select>标签、<form:option>标签、<form:textarea>标签和<form:hidden>标签等。
JSR常用注解:@Null注解、@NotNull注解、@DecimalMax(value)注解、@DecimalMin(value)注解、@Max(value)注解、@Min(value)注解、@Pattern(value)注解、@Size(max,min)注解、@NotEmpty注解以及@NotBlank注解等等。
Spring企业级程序设计 • 【第6章 深入Spring MVC开发】的更多相关文章
- Spring企业级程序设计作业目录(作业笔记)
Spring企业级程序设计 • [目录] 第1章 Spring之旅 >>> 1.1.6 使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打 ...
- Spring企业级程序设计 • 【目录】
章节 内容 实践练习 Spring企业级程序设计目录(作业笔记) 第1章 Spring企业级程序设计 • [第1章 Spring之旅] 第2章 Spring企业级程序设计 • [第2章 Spring ...
- Spring企业级程序设计 • 【第7章 Spring框架整合】
全部章节 >>>> 本章目录 7.1 模型数据解析及控制器返回值 7.1.1 SSM框架环境搭建 7.1.1 ModelAndView多种用法 7.1.2 整合MyBati ...
- Spring企业级程序设计 • 【第4章 Spring持久化层和事务管理】
全部章节 >>>> 本章目录 4.1 配置数据源资源 4.1.1 JdbcTemplate介绍 4.1.2通过ComboPooledDataSource创建数据源 4.1. ...
- Spring企业级程序设计 • 【第1章 Spring之旅】
全部章节 >>>> 本章目录 1.1 Spring框架基础 1.1.1 Spring特点及体系结构 1.1.1 Spring的体系结构 1.1.2 使用Eclipse搭建 ...
- Spring企业级程序设计 • 【第5章 Spring MVC快速入门】
全部章节 >>>> 本章目录 5.1 Spring MVC设计概述及其框架结构 5.1.1 Spring MVC介绍 5.1.1 Spring MVC优势 5.1.2 S ...
- Spring企业级程序设计 • 【第3章 面向切面编程】
全部章节 >>>> 本章目录 3.1 AOP基本概念和术语 3.1.1 AOP概念 3.1.2 AOP的术语解释 3.1.3 通知类型介绍 3.1.4 通过AOP模拟事务操 ...
- Spring企业级程序设计 • 【第2章 Spring Bean管理进阶】
全部章节 >>>> 本章目录 2.1 bean标签和import标签 2.1.1 标签中的id属性和name属性 2.1.2 Bean的作用范围和生命周期 2.1.2 Be ...
- Spring Boot学习第一部分(Spring 4.x)第一章(Spring 基础)
1.spring概述 1.1.spring的简史 第一阶段:XML配置spring 1.x时代, 第二阶段:注解配置spring 2.x时代, @Controller @Service @Compon ...
随机推荐
- 【Other】逻辑分析仪的使用(UART、SPI)
首先上一张接线示意图 上方是UART的接线方式,下方则是SPI的 事实上,这样接就能收到信号了 如果是SPI,要设定自己为主机,UART则没有这个问题 下面来说明逻辑分析仪的界面设定 设定介绍完了 下 ...
- Oracle—表、约束、索引、表空间、分区、序列、统计信息
表.约束.索引.表空间.分区.序列.统计信息 一.表及其操作 1.创建表 create table 表名 ( 字段名1 字段类型 默认值 是否为空 , 字段名2 字段类型 默认值 是否为空, 字段名3 ...
- Linux磁盘分区(三)之查看磁盘分区常用命令
Linux磁盘分区(三)之查看磁盘分区常用命令转自https://blog.csdn.net/x356982611/article/details/77893264 1.df df -T 总的 ...
- ps精修
1.磨皮方法: a,, 添加高斯模糊后,按住alt键新建图层蒙版,设置前景色为白色,用画笔在脸上雀斑的位置涂抹,注意脸轮廓位置不要涂抹.最后添加曲线提亮 b. 添加蒙尘和划痕后,后面上面的一样
- GO Exit Fatal panic
Exit() 应用程序(不只是函数)退出执行 defer 不会被执行(因为程序都退出了) log.Fatal() 输出打印内容 应用程序退出 defer 不会被执行 panic() 函数停止执行(不是 ...
- Vue API 3 (模板语法 ,指令)
条件 v-if v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回 truthy 值的时候被渲染. v-show v-show 指令也是用于根据条件展示一块内容.v-show 只是 ...
- 快速上手git gitlab协同合作
简单记录,整理. 摘要 为方便大家快速上手Git,并使用Gitlab协同合作,特编写此手册,手册内容不会太丰富与深入.主要包含如下内容: Git 使用教程1.1 安装1.2 常用命令1.3 版本控制1 ...
- lambda表达式快速创建
Java 8十个lambda表达式案例 1. 实现Runnable线程案例 使用() -> {} 替代匿名类: //Before Java 8: new Thread(new Runnable( ...
- 【Spring Framework】Spring入门教程(六)Spring AOP使用
Spring的AOP 动态代理模式的缺陷是: 实现类必须要实现接口 -JDK动态代理 无法通过规则制定拦截无需功能增强的方法. Spring-AOP主要弥补了第二个不足,通过规则设置来拦截方法,并对方 ...
- 【Spring Framework】spring管理自己new的对象
使用AutowireCapableBeanFactory手动注入 使用.newInstance();创建对象的话,如果其他对象都使用Spring Autowired,还需要手动创建所有依赖的Bean: ...