(一)文件上传
导入依赖
<!--文件上传-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
配置springmvc.xml文件
JSP部分的form标签
Controller
代码
@RequestMapping("/addUser")
//传来的文件名字不能与类的属性相同
public void addUser(TUser user,MultipartFile image,HttpServletResponse response,
HttpServletRequest request) throws Exception{
response.setContentType("text/html;charset=utf-8");
if(image!=null){
String oldfileName=image.getOriginalFilename();
System.out.println("旧文件名:"+oldfileName);
File f = createDir(request.getServletContext());//在服务器创建存储文件的文件夹
String newfileName = createName(oldfileName);//防止重名,给文件赋予新文件名
File file = new File(f,newfileName);
String absolutePath = file.getAbsolutePath();//获取文件的真实路径
System.out.println("文件的真实路径:"+absolutePath);
image.transferTo(file);//将ufile存储到file
//数据库中存入新的文件名
int index = absolutePath.lastIndexOf("upload");
String ss = absolutePath.substring(index + 7);
user.setUfile(ss); //设置文件名
}
//新增用户到数据库
user.setUpass("888666"); //设置默认密码
int count = us.addUser(user);
if (count > 0) {
response.getWriter().write("<script>alert('新增成功');location.href='/User/page/1';</script>");
} else {
response.getWriter().write("<script>alert('新增失败');location.href='/User/page/1';</script>");
}
}
// 创建目录---以日期,一天一个文件夹
private File createDir(ServletContext context) {
String realPath = context.getRealPath("/upload");
//使用的时候在upload文件夹放一个文件,因为默认不编译空文件夹
String date = new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime());
File file = new File(realPath, date);//以date日期在realPath路径下创建一个名为date的文件夹
if (!file.exists()) {
file.mkdir();
}
return file;
}
// 创建文件名--区分同名文件,在文件名前加上当前的时间
private String createName(String name) {
return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime()) + "_" + name;
}
(二)文件显示
从session中取出文件名
(三)拦截器
拦截器(interceptor)的作用:
Spring MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器预处理和后处理。用户可以自己定义一些拦截器拉实现特定的功能。
拦截器(interceptor)和过滤器(Filter)的区别:
过滤器是servlet规范中的一部分,任何java web工程都可使用,拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。过滤器在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。拦截器它是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。它也是AOP思想的具体应用。
我们想要自定义拦截器,必须要实现HandlerInceptor接口。
过滤器实现的是Filter接口,拦截器实现的HandlerInterceptor接口!
实现HandlerInceptor接口
拦截器中的方法说明
放行的含义是指,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器链的最后一个,则执行控制器中的方法。
在springmvc.xml中配置拦截器
多个拦截器的执行顺序:
拦截器1:preHandle 拦截器拦截了.......
拦截器2:preHandle 拦截器拦截了.......
系统生成的验证码: EtM7
拦截器2:postHandle 拦截器拦截了.......
拦截器1:postHandle方法执行了....
拦截器2: afterCompletion 拦截器拦截了.......
拦截器1:afterCompletion方法执行了....
多个拦截器是按照配置的顺序决定的。
(四)JSON
访问控制器返回Json类型数据
导入对应的JSON包
在springmvx.xml中配置转换器
配合@ResponseBody返回Json数据类型!