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

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

2016-01-08 10:40 706 查看

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":"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实现
   @Controller
public 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息