ITKeyword,专注技术干货聚合推荐

注册 | 登录

Spring MVC - 上傳圖片, JSON数据交互 ,RESTful 支持

LABLENET 分享于 2016-01-08

推荐:spring mvc实现Restful返回json格式数据

在本示例中,我们将向您展示如何将对象转换成json格式并通过spring mvc框架返回给用户。 使用技术及环境: Spring 3.2.2.RELEASE Jackson 1.9.10 JDK 1.6 Eclips

2020腾讯云共同战“疫”,助力复工(优惠前所未有!4核8G,5M带宽 1684元/3年),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1054

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

1.上传图片

springmvc中对多部件(multipart)类型解析,在页面from中提交enctype="multipart/form-data" 的数据时,需要springmvc对multipart类型的数据进行解析;

1.1 在springmvc.xml中配置解析器

org.springframework.web.multipart.commons.CommonsMultipartResolver

1.2 模拟:在tomcat上配置虚拟目录来进行上传图片

注意:在图片虚拟目录中,一定将图片目录分级创建(提高i/o性能),一般按照日期创建;

上传思路:

1)存储的物理路径

2)拿到原始名称 getOriginalFileName()

3)新的图片名称 UUID.randomUUID() + 原始

4)新图片 new File(物理+新名称)

5)tranTofer(file)

6)存储图片路径与名称

1.3 tomcat建立虚拟文件目录

(1)方法1:图形化界面操作

图片访问路径就为 示例: http://localhost:8989/images/3e896d12-ff02-4777-aa6e-90b2b31d3359.png

(2)方法2 :Tomact配置文件配置

tomcat / conf /server.xml 中 的 host标签中添加 :

<Context docBase="D:\yuan\image" path="/images" reloadable="true"/>

即 :docBase为物理路径 , path为虚拟路径 ;

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

<!-- SingleSignOn valve, share authentication between web applications

Documentation at: /docs/config/valve.html -->

<!--

<Valve className="org.apache.catalina.authenticator.SingleSignOn" />

-->

<!-- Access log processes all example.

Documentation at: /docs/config/valve.html

Note: The pattern used is equivalent to using pattern="common" -->

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>

<Context docBase="D:\yuan\image" path="/images" reloadable="true"/>

</Host>

1.3 SpringMvc.xml 中 配置解析器

解析器: org.springframework.web.multipart.commons.CommonsMultipartResolver

<!-- 配置文件上传解析器 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 最大的上传尺寸 -->

<property name="maxUploadSize" value="5242880"></property>

</bean>

1.4 controller实现示例

@RequestMapping("/uploadImage")

public String uploadImage(FClient fc,MultipartFile mFile) throws Exception{

if(mFile!=null){

//物理路径

String lujin="D:\\yuan\\image\\";

//文件名称

String oldImagename=mFile.getOriginalFilename();

//新的文件名称

String newImagename=UUID.randomUUID()+oldImagename.substring(oldImagename.lastIndexOf('.'));

File file = new File(lujin+newImagename);

//保存文件

mFile.transferTo(file);

//图片名称

System.out.println(newImagename);

}

System.out.println(fc.getUsername());

return "/success.jsp";

}

1.5 JSp页面实现

<form action="${pageContext.request.contextPath}/clients/uploadImage.action" method="post" enctype="multipart/form-data">

客户姓名: <input type="text" name="username" /> <br> <br>

上传图片:<input type="file" name="mFile"> <br> <br>

<input type="submit" value="提交表单">

</form> 2.Json数据交互

2.1

为什么进行JSON数据交互 json数据在js中,手机客户端中,webservice中使用流行且简单;

2.2 所需jar

http://download.csdn.net/detail/lablenet/9394976

2.3 两个注解

@RequestBody:将json串转成java对象 ;

@ResponseBody:将java对象转成json串;

2.4 Json配置实现

(1) 注解驱动的方式不需要配置,即

<mvc:annotation-driven conversion-service="conversionService" validator="validator"></mvc:annotation-driven>

(2)

注解适配器的方式,需要配置json配置

//使用注解器的配置json使用

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">

<property name="messageConverters">

<list>

<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>

</list>

</property>

</bean>

2.5 请求的是json,输出的是json,要求请求的是json串,所以在前端页面中需要将请求的内容转为json 实现

(1)controller实现

@RequestMapping("/requestJson")

public @ResponseBody FClient requestJson(@RequestBody FClient client){

client.setUsername("我去");

return client;

}

(2)ajax进行请求

function requestJson(){

$.ajax({

type: 'post',

url:'/SpringMvcMybatis1Demo/requestJson.action',

contentType:'application/json;charset=utf-8',

data:'{"id&qu

推荐:Spring MVC 返回 xml json pdf 数据的配置方法

 <!-- Spring MVC 返回 xml 数据的配置方法 -->

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">

<propert

ot;:"102","username":"yuan"}',

success:function(data){

console.log(data);

}

});

}

2.6 请求key-value ,输出的json, 比较常用 ;

(1)controller实现

@RequestMapping("/requestJsonKV")

public @ResponseBody FClient requestJsonKV( FClient client){

client.setUsername("我去");

return client;

}

(2)ajax实现

function requestJson(){

$.ajax({

type: 'post',

url:'/SpringMvcMybatis1Demo/requestJsonKV.action',

data:'id=102&username=yuan',

success:function(data){

console.log(data);

}

});

}

2.7 整个json Controller实现

@Controllerpublic class JsonController {

@Autowired

private FClientService fs;

@RequestMapping("/requestJson")

public @ResponseBody FClient requestJson(@RequestBody FClient client){

client.setUsername("我去");

return client;

}

@RequestMapping("/requestJsonKV")

public @ResponseBody FClient requestJsonKV( FClient client){

client.setUsername("我去");

return client;

}

@RequestMapping("/requestListJsons")

public @ResponseBody List<FClient> getClients() throws Exception{

return fs.findClientList();

}

@RequestMapping("/findClientsbyid/{id}")

public @ResponseBody FClient findClientsbyid(@PathVariable("id") Integer id) throws Exception{

return fs.findClientById(id);

}

}

html实现 : <!DOCTYPE html><html>

<head>

<title>json</title>

<meta name="keywords" content="keyword1,keyword2,keyword3">

<meta name="description" content="this is my page">

<meta name="content-type" content="text/html; charset=UTF-8">

<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>

<script type="text/javascript">

function requestJson(){

$.ajax({

type: 'post',

url:'/SpringMvcMybatis1Demo/requestJson.action',

contentType:'application/json;charset=utf-8',

data:'{"id":"102","username":"yuan"}',

success:function(data){

console.log(data);

}

});

}

function requestJson1(){

$.ajax({

type: 'post',

url:'/SpringMvcMybatis1Demo/requestJsonKV.action',

data:'id=102&username=yuan',

success:function(data){

console.log(data);

}

});

}

$(document).ready(function(){

console.log("我家在了");

});

</script>

</head>

<body>

<input type="button" onclick="requestJson()" value="测试"

/>

<input type="button" onclick="requestJson1()" value="测试1"

/>

</body></html> 3.RESTful实现

3.1 什么是restful?

restful 是一种开发的理念,是对http的很好的诠释,全称Representational State Transfer :表现层的状态转换;

3.2 作用1 :对Url进行规范,写成RESTful格式的url

即:参数后以斜杠传入参数 http://localhost:8989/SpringMvcMybatis1Demo/findClientsbyid/1

3.3 实现

(1)配置RESTful的前端控制器

可以和 .action 共存,但servlet-name不可以一样;

<!-- 配置rest的支持 -->

<servlet>

<servlet-name>springmvc_rest</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<init-param>

<param-name>contextConfigLocation</param-name>

<param-value>classpath:spring/springmvc.xml</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>springmvc_rest</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

(2) URL模板映射 :将URL中的模板变量映射到指定名称中;使用 @PathVariable()

@RequestMapping("/findClientsbyid/{id}")

public @ResponseBody FClient findClientsbyid(@PathVariable("id") Integer id) throws Exception{

return fs.findClientById(id);

}

(3)一个问题:RESTful模式需要对静态资源的加载,配置前端控制器的url-partten中指定的 / ,对静态资源文件的访问有问题;

解决: 静态资源的解析,静态文件有 :js, img,html 等;

<mvc:resources location="/js/" mapping="/js/**" />

例如:对html的指定访问

<mvc:resources location="/" mapping="/**" /> 4.Demo免积分下载 http://download.csdn.net/detail/lablenet/9395542

推荐:求助Spring mvc xml/json多视图返回json数据问题

各位IT界的兄弟姐妹你们好: 小弟最近做一个Spring mvc 支持返回xml/json多视图问题: 请求URL:http://localhost:8080/GraphicService/getGraphicInfoList.json

1.上传图片        springmvc中对多部件(multipart)类型解析,在页面from中提交enctype="multipart/form-data" 的数据时,需要springmvc对multipart类型的数据进行解析;      1.1 在springmv

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。