文件上传
1、导入jar包
2、配置上传解析器
<!--配置上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--最大上传大小,单位:字节-->
<property name="maxUploadSize" value="10000000"></property>
<property name="defaultEncoding" value="UTF-8"></property>
</bean>
3、jsp页面
<!--
enctype="multipart/form-data":表示当前表单包含文件上传控件
-->
<form action="/user/registerUser.action" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username"/> <br/><br/>
密 码:<input type="text" name="password"/> <br/><br/>
选择文件:<input type="file" name="headFile"/> <br/><br/>
<!--文件进入后台由MultipartFile类接收,-->
<input type="submit" value="注册"/>
</form>
4、Controller层
MultipartFile对象负责接收文件,注意属性名,并且上传。
将文件上传到指定路径中,并且重命名文件,将文件名存入对象中
//用户注册(上传图片)
@RequestMapping("/registerUser.action")
public String registerUser(User user, MultipartFile headFile) throws IOException {
//UUID生成不重读的字段,用于重命名文件
String uuid = UUID.randomUUID().toString();
//获取文件名
String filename = headFile.getOriginalFilename();
//截取文件扩展名
String suffix = filename.substring(filename.lastIndexOf("."));
//上传文件并重命名
headFile.transferTo(new File("C://Users/Sherlock/IdeaProjects/Spring/uploading/img/img-"+uuid+suffix));
//将文件名存在对象中
user.setHeadPic(uuid+suffix);
//将用户添加到数据库中
us.registerUser(user);
return "succ";
}
json转换
导入jar包
@RequestBody:将前端的json串转成对象
@ResponseBody:将数据库的对象转成json串
结果:
拦截器
创建拦截器MyIntercepter类,实现HandlerInterceptor接口,实现preHandle(),postHandle(),afterCompletion()方法
方法 | 执行时间 |
---|---|
preHandle() | 请求到达Controller之前执行,决定是否通过 |
postHandle() | 请求Controller中处理完成后,还未响应View之前 |
afterCompletion | Controller处理完成,View响应完成后执行 |
postHandle()在所有的拦截器返回true才执行
afterCompletion() 当前拦截器preHandle返回true就执行
false为拦截
//拦截器
//创建拦截器,实现HandlerInterceptor接口
public class MyIntercepter implements HandlerInterceptor {
//请求到达Controller之前执行,是否通过
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
System.out.println("preHandle方法: 未到Controller");
//返回值决定是否拦截
return true;
}
//请求Controller中处理完成后,还未响应视图之前
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle方法:已到Controller,还未响应View");
}
//Controller处理完成和视图响应给客户端后执行
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
System.out.println("afterCompletion方法:Controller处理完成,View响应完成");
}
}
配置拦截器:
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--所有请求都拦截-->
<mvc:mapping path="/**"/>
<bean class="com.intercepter.MyIntercepter"></bean>
</mvc:interceptor>
<mvc:interceptor>
<!--拦截/item下的请求-->
<mvc:mapping path="/item/**"/>
<bean class="com.intercepter.UserIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>
运行结果: