SpringMVC高级课程
requestBody和responseBody
requestBody把前台页面传递JSON格式数据强制转换JavaBean
responseBody在后台把javabean转换成JSON格式的数据返回页面
这两个注解不能直接使用,需要导入依赖Jackson的jar
|
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.2</version> </dependency> |
配置JSON格式的转换
在适配器设置对JSON数据格式的支持(注:使用<mvc:annotation-driven />则不用配置)

如果在web.xml配置的DIspatcherServlet的url-patten为”/”时,意味着所有请求(包括静态资源)都被映射到DIspatcherServlet,为了正确处理资源,需要在Spring MVC配置文件添加resources元素
例:配置才<mvc:resources>能引入js文件
请求JSON响应JSON
Controller部分代码如下:

jsp页面部分代码如下:

请求POJO响应JSON
Controller部分代码如下:

jsp页面部分代码如下:


使用FastJson进行JSON处理
引入jar包
fastjson-x.x.xx.jar
请求页面参考:
$.ajax({
url:path+””, //请求的url
type:”post/get”,
data:{xx:xx}, //请求参数
dataType:”json”, //请求返回的数据类型
success:function(data){ //data:返回的json对象
}
})
controller页面参考:
@RequestMapping(“xxx”)
@ResponseBody
public Object userById(Integer id){
User user = userService.getUserById(id);
//将数据转换为JSON对象
String myjson = JSON.toJSONString(user);
return myjson;
}
解决JSON数据传递的日期格式问题
在pojo时间属性上添加 @JSONField(format=”yyyy-MM-dd”)
@DateTimeFormat(patterns=”yyyy-MM-dd”)
配置全局异常处理
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings"> //植入该类的内置参数
<props>
<!-- 定义自定义异常类,可以定义多个异常并设置异常逻辑视图名-->
<prop key="java.lang.RuntimeException">error(逻辑视图名)</prop>
</props>
</property>
</bean>
在逻辑视图页面使用${exception.message } 获取异常信息
SpringMVC表单标签
Spring提供的轻量级标签库
可以在JSP页面中渲染HTML元素的标签
用法:
必须在JSP页面的开头声明taglib指令
<%@ taglib uri=”http://www.springframework.org/tags/form” prefix=”fm”%>
引入标签声明之后使用Spring表单标签



服务器端的数据效验
利用Spring自带的验证框架
利用JSR 303实现
Java为Bean数据合法性效验所提供的标准框架
Spring MVC支持JSR 303标准的效验框架
JSR 303通过Bean属性上标注效验注解指定效验规则,并通过标准的验证接口对Bean进行验证:http://jcp.org/en/jsr/detail?id=303
Spring本身没有提供JSR 303的实现
实现者:Hibernate Validator http://hibernate.org/validator

实现步骤:
加入jar文件

修改POJO
给bean需要验证的属性增加相应的效验注解



页面显示:

SpringMVC单文件上传
MultipartResolver接口
用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而实现操作.
两个实现类
StandardServletMultipartResolver
使用了Servlet3.0标准的上传方式
CommonsMultipartResolver
使用了Apache的commons-fileUpload来完成具体的上传操作
实现步骤:
1.导入jar文件

commons-lang-x.x.jar; 获取系统随机数(可忽略)
模拟开发跨服务器上传文件时使用的包

Mavne代码:
|
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <-- 跨服务器上传maven --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.19</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifactId> <version>1.19</version> </dependency> |
2.配置MultipartResolver(springmvc-servlet.xml)
使用CommonsMultipartResolver配置一个MultipartResolver解析器
|
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 配置上传文件大小上限,单位为字节 --> <property name="maxUploadSize" value="5000000"></property> <!-- 配置请求编码格式,默认为ISO-8859-1 --> <property name="defaultEncoding" value="UTF-8"></property> </bean> |
3. 编辑文件上传表单页
设置上传方式 method=”post”,enctype=”multipart/from-data”;
编写上传文件的input type=”file” name=”设置文件传输name”
4. 编写控制器,处理方法
编写接收添加方法接收文件
参数为:xxx (@RequestParam(value=”设置文件传输name”) MultipartFile picture);
定义文件路径
String idPicPat = null;
判断文件是否为空:file.isEmpty()
设置储存路径:(地址使用自适应路径分隔符)
String path = requrest.getSession().getServletContext.getRealPath(“statics”+ File.separator + “uploadfiles”);
获取原文件名
String oldFileName = picture.getOriginalFilename();
获取文件后缀
String prefix = FilenameUtils.getExtension(oldFileName );
获取上传文件大小进行判断
int fileSize = 5000000; picture.getSIze();获得文件上传大小,进行判断
不符合则返回页面并添加提示信息
判断文件后缀是否符合图片格式
prefix.equalsIgnoreCade(“jpg”) || prefix.equalsIgnoreCade(“jpeg”) ||
prefix.equalsIgnoreCade(“png”) || prefix.equalsIgnoreCade(“pneg”) ||
不符合则返回页面并添加提示信息
设置文件名
StringBuffer sb = new StringBuffer();
//获取事件至毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
sb.append(sdf.format(new Date()));
Random rd = new Random();
for (int i = 0; i < 3; i++) {
sb.append(rd.nextInt(8));
}
String fileName = sb.toString()+”_picture.jpg”
创建新文件对象
File targetFile = new File(path,fileName );
判断文件夹是否存在
if(!targetFile.exists()){
//没有则自动创建
targetFile.mkdirs();
}
//上传->接收用户对象上传的文件流进行保存
picture.transferTo(targetFile);
//传入到数据库的绝对路径
idPicPath = path+File.separator+fileName;

多文件上传采用数组接收,循环迭代即可
如果是跨服务器上传参考:使用jersy实现跨服务器上传
SpringMVC高级课程的更多相关文章
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMVC框架 课程笔记
SpringMVC框架 课程笔记 第0章 SpringMVC框架的核心内容 1.SpringMVC 概述 2.SpringMVC 的 HelloWorld 3.使用 @RequestMapping 映 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- spring-mvc高级技术
Spring MVC高级技术包括但不限于web.xml配置.异常处理.跨重定向请求传递数据 1.web.xml文件的配置 <!DOCTYPE web-app PUBLIC "-//Su ...
- IT大数据服务管理高级课程(IT服务,大数据,云计算,智能城市)
个人简历 金石先生是马克思主义中国化的研究学者,上海财经大学经济学和管理学硕士,中国民主建国会成员,中国特色社会主义人文科技管理哲学的理论奠基人之一.金石先生博学多才,对问题有独到见解.专于工作且乐于 ...
- 编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展
一.软件开发的现状 软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化. 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的. 随着这些新的技术以 ...
- SpringMVC高级参数绑定(数组和List)
本节内容: 参数绑定之数组 将表单的数据绑定到List 复制下上篇博客中的工程,作为今天开发的工程. 一.参数绑定之数组 1. 需求 在商品列表页面选中多个商品,然后删除. 2. 需求分析 功能要求商 ...
- 第7章—SpringMVC高级技术—不用web.xml,而使用java类配置SpringMVC
不用web.xml,而使用java类配置SpringMVC DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置 ...
- 第7章—SpringMVC高级技术—处理multipart形式的数据
处理multipart形式的数据 MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 Multip ...
随机推荐
- 2017-10-03-morning
#include <algorithm> #include <cstring> #include <cstdio> inline void read(int &am ...
- HTML学习之Flex 布局
一.Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性. 任何一个容器都可以指定为 Flex 布局. .box ...
- Eclipse编辑YAML插件-YEdit
官网:https://github.com/oyse/yedit 离线版本:(链接: https://pan.baidu.com/s/1b1j2gQ 密码: wyyb) 安装方法:直接复制JAR包到P ...
- 1、Java并发性和多线程-并发性和多线程介绍
以下内容转自http://ifeve.com/java-concurrency-thread/: 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行 ...
- MongoDB小结17 - find【查询条件$or】
我们再添加一个游泳的人,并用$in查询游泳的人 db.user.find({"hobby":{"$in":["swimming"]}},{& ...
- Android: Mac无法找到Android SDK问题
通过brew cask install android-sdk后,Intellij Idea中设置Android SDK路径失败,解决方法如下: /usr/local/Caskroom/android ...
- netty4与protocol buffer结合简易教程
各项目之间通常使用二进制进行通讯,占用带宽小.处理速度快~ 感谢netty作者Trustin Lee.让netty天生支持protocol buffer. 本实例使用netty4+protobuf-2 ...
- openstack (4)---部署Glance镜像服务,Nova计算服务
一.Glance Glance是Openstack项目中负责镜像管理的模块,其功能包括虚拟机镜像的查找.注册和检索等. Glance提供Restful API可以查询虚拟机镜像的metadata及获取 ...
- SQLite数据库基本操作
SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同,SQLite 的安装和运行非 ...
- linux内核对块设备的使用
1 partition table 这里的分析以经典的MBR为例. 在MBR里面有partition table,每一项对应一个逻辑的块设备,partion table中的每一项是16个字节. 第一个 ...