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

Springmvc关于图片上传,json数据,拦截器案例的详解

2017-06-03 23:04 861 查看

图片上传

第一步上传图片的表单表达是如下,注意一下几点 enctype=”mulitipart/form-data” 提交方式为post

<form id="itemForm"
action="${pageContext.request.contextPath }/updateitem.action"
method="post" enctype="multipart/form-data">
<input type="file"  name="pictureFile"/>


2.在cotroller中建立一个方法用于图片上传:注意:一定要有MultipartFile类型的参数 pictureFile 而且一定要注意参数值一定要保证是pictureFile.同时在springmvc.xml文件中建立一个对MultipartFile的实例化bean对象。

@RequestMapping(value = "/updateitem.action")
public String updateitem(QueryVo vo, MultipartFile pictureFile) throws IllegalStateException, IOException {
// 保存图片d:upload
String name = UUID.randomUUID().toString().replace("-", "");
// 获取 后缀名
String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
//保存文件至指定的目录。
pictureFile.transferTo(new File("D:\\pic\\" + name + "." + ext));
//将文件名称保存进数据库
vo.getItems().setPic(name + "." + ext);
itemservice.updateItem(vo.getItems());
//重定向到该页面
return "redirect:/item/toEdit.action?id=" + vo.getItems().getId();
}


配置上传图片的实例对象

<!-- 配置上传文件实现类 name属性的值一定要是这个值负责,在容器中找不到这个对象 -->
<bean name="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大上传大小 -->
<property name="maxUploadSize" value="5000000"></property>
</bean>


Json数据

json数据通过Ajax请求到服务器然后回调到页面

**1.首先要引入jQuery

2.通过书写ajax代码来发送json字符串,这里有一个标准而且严格的数字方式。**

$(function() {
//alert("a");
//声明一个json字符串。
var param = '{"id":1,"name":"测试商品信息","price":660,"detail":"测试商品描述","pic":"123456.jpg"}';
$.ajax({
url : "${pageContext.request.contextPath }/json.action",
data : param,
contentType : "application/json",
type : "post",
dataType : "json",//回调
success : function(data) {
//下边这是回调内容代码
alert(data.name);
}
});
});


3.通过在控制器中接受所发送的数据。

//其中有方法返回至而且加上了@ResponseBody 这时对json字符串的回调。通过return返回对象,通过该注解可以将对象转换成json格式字符串,我们可以在前台页面重新获得json字符串数组。

@RequestBody这是接收的请求对象将json数组转换为Items对象。

//json字符串的形参

@RequestMapping(value = "/json.action")
public @ResponseBody Items json(@RequestBody Items items) {
System.out.println(items.getName());
return items;
}


使用Springmvc拦截器

首先建立一个类实现HandlerInterceptor接口。

package com.springmvc.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class Intrceptor1 implements HandlerInterceptor {
// 拦截之前
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
// TODO Auto-generated method stub
System.out.println("拦截器一前");
//返回true即可放行,否则不能通过
return true;
}

// 页面渲染
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("拦截器后一");
}

// 拦截之后
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
System.out.println("页面渲染一后");

}

}


这里的拦截器需要在springmvc中进行配置

<mvc:interceptors>
<!-- 配置多个拦截器 -->
<mvc:interceptor>
<!--配置映射路径,这里两个*指的是在根目录下还有文件需要拦截-->
<mvc:mapping path="/**" />
<!-- 自定义拦截器类 -->
<bean class="com.springmvc.interceptor.Intrceptor1" />
</mvc:interceptor>
<mvc:interceptor>
<!--拦截项目下的所有,两个*表示如果有多个文件路径也可以进行拦截如:abd/def/efg.action-->
<mvc:mapping path="/**" />
<!-- 自定义拦截器类 -->
<bean class="com.springmvc.interceptor.Intrceptor2" />
</mvc:interceptor>
</mvc:interceptors>


一个项目中可以配置多个拦截器进行对项目进行拦截,我们在多个拦截器发挥的作用总结如下

总结:

preHandle按拦截器定义顺序调用

postHandler按拦截器定义逆序调用

afterCompletion按拦截器定义逆序调用

postHandler在拦截器链内所有拦截器饭或成功调用
afterCompletion只有preHandler返回true才调用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc json 拦截器
相关文章推荐