图片上传
- 第一步上传图片的表单表达是如下,注意一下几点 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才调用