您的位置:首页 > 编程语言 > Java开发

SpringMVC 学习笔记5 - 文件上传 & json数据交互 & RESTful风格

2017-11-02 07:43 801 查看

文件上传

一、导入

Jar包:

commons-fileupload

commons-io

二、springmvc配置文件配置上传模块

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--限制大小为2M-->
<property name="maxUploadSize" value="2097152"/>
</bean>


三、定义form表单

表单属性:enctype="multipart/form-data"
表单文件域:
<input type="file" name="imgFile1" value="上传">
<input type="file" name="imgFile2" value="上传">


四、在控制方法中定义形参MultipartFile获取上传的文件,形参名与文件域名一致

常用方法:
multipartFile.getOriginalFilename();// 获取上传文件名
multipartFile.transferTo(new File(path));// 保存


json数据交互

请求Json数据转换为POJO对象

POJO形需参要注解@RequestBody
注意:整个请求体都必须是Josn文本


POJO对象转换为json文本作为响应体

控制方法的返回值类型改为POJO类,并在控制方法上注解@ResponseBody。


使用示例:

function send() {
$.ajax({
type: "post",
url: "/json.action",
contentType: "application/json;charset=UTF-8",
data: '{"id":1,"name":"wang","pass":"123","sex":0,"score":0.0}',
success: function (data) {
alert(data.name + " " + data.pass);// "rong 123"
}
});
}


@ResponseBody
@RequestMapping("/json.action")
public User getJson(@RequestBody User user) {
LogUtil.printEntity(user);
user.setName("rong");
return user;
}


RESTful风格

什么是RESUful

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以得到越来越多网站的采用。


RESTful架构

每一个URI代表一种资源
客户端和服务器之间,传递这种资源的某种表现层
客户端通过四个HTTP动词,对服务器端资源进行操作

GET    获取资源
PUT    添加资源
POST   修改资源
DELETE 删除资源


REST与非REST的对比

非REST的url: http://...../queryItems.action?id=001&type=T01 
REST的url风格: http://..../items/001


使用步骤

1. web.xml中Spring的DispatcherServlet的url-pattern设置为"/",代表处理所有静态资源(除了jsp和默认主页)请求和controller请求。

说明:设置为/而不是/*是为了避免jsp页面的请求也被DispatcherServlet拦截到。因为jsp必须由tomcat处理,如果由Spring处理就仅仅是文本文件。

注意:这时浏览器访问静态资源会出现问题,需要在springmvc.xml中配置:
<mvc:resources mapping="/js/**" location="/js/"/>
<mvc:resources mapping="/css/**" location="/css/"/>

原因:Tomcat把请求如/js/jqu
97c0
ery.js交给Spring的DispatcherServlet处理,
Spring不知道这是静态资源,就找匹配的控制方法,找不到了,就显示404。
如果进行了以上配置,当路径开头是/js/时,Spring就知道这是静态资源并且
会在/js/**下寻找对应的文件并返回。(/js/**代表)

注意:mapping必须是/js/**,而不能是/js/*。后者访问/js/util/TextUtil.js会报404,而前者正常访问。

/js/**代表js目录及其子目录,/js/*仅仅代表js目录。

2. 请求时的增删查改,使用url是一致的,如果进行删除,需要设置请求方法为delete,其他同理。

注意:请求时需要指定contentType,如果要json数据,设置成json格式的type。

3. 处理请求的controller方法:

1. 注解的method参数规定http方法,如果是delete执行删除,如果是post执行添加。
2. 注解的value的格式为/shop/{sid}/goods/{gid},然后在形参shopId中注解@PathVariable("sid"),goodsId同理。

注意:如果@PathVariable没有value值,则url变量名与形参变量名必须相同。


在使用过程中,发现form表单不支持put和delete方法,解决方法如下:

方法一:使用Spring自带的隐藏方法域读取过滤器

1. web.xml配置org.springframework.web.filter.HiddenHttpMethodFilter过滤器
2. form表单添加一个隐藏域:<input type="hidden" name="_method" value="delete"/>


方法二:使用Spring的form标签

<%@taglib uri=”http://www.springframework.org/tags/form” prefix=”form” %>



参照:

http://blog.csdn.net/ruangong1203/article/details/51050586 - spring MVC配置form支持PUT和DELETE方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: