1 对于二进制文件上传功能的实现。在spring中使用multipart来处理,处理方式有两种。

  • CommonsMultipartResolver:使用Jakarta Commons FileUpload解析Multipart请求
  • StandardServletMultipartResolver:依赖于Servlet 3.0对multipart请求的支持(始于Spring 3.1)。

如果在Servlet 3.0容器中部署,推荐使用StandardServletMultipartResolver。配置类中如下方式

@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setDefaultEncoding("utf-8");return multipartResolver;
}

如果需要设置其他参数,并且配置的 DispatcherServlet 的初始化类继承了 AbstractAnnotationConfigDispatcherServletInitializer 或者 AbstractDispatcherServletInitializer 的话,我们可以重载customizeRegistration

@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setMultipartConfig(
new MultipartConfigElement("/tmp/blog/uploads")
);
}

这个参数指定文件系统的绝对路径,上传文件会临时写入到该目录中。

2 编写页面以处理文件上传

<h1>Multipart上传测试</h1>
<form id="form" enctype="multipart/form-data" action="/upload.do" method="post">
<input id="file" name="file" type="file">
<input type="submit" value="开始上传">
</form>

3 controller的编写也很简单,如下:

@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
public String upLoadFiles(MultipartFile file) { File tempFile = new File("d://multipart.jpg");
try {
file.transferTo(tempFile);
return "success";
} catch (IOException e) {
e.printStackTrace();
return "error";
}
}

二、处理异常

2.1 添加异常类

@ResponseStatus(value = HttpStatus.NOT_FOUND,
reason = " Spittle not found")
public class SpittleNotFoundException extends RuntimeException {
}

使用@ResponseStatus 将这一异常映射为状态吗404,

2.2 编写异常处理方法,在Controller的请求处理方法,只处理正常情况的视图,如果有异常就抛出。

如果想要处理抛出的异常,需要在 Controller 中添加处理异常的方法。

@ExceptionHandler(SpittleNotFoundException.class)
public String handleSpittleNotFound() {
return "error/notFound";
}

@ExceptionHandler(SpittleNotFoundException.class) 表明抛出 SpittleNotFoundException 异常类时,将会委托该方法进行处理。它能够处理同一个控制器所有方法抛出的SpittleNotFoundException

异常。

2.3 控制器添加通知

spring 3.2为解决多个控制器处理相同异常,需要重复写@ExceptionHandler的问题。控制器通知是带有@ControllerAdvice 注解的类,这个类可以包含如下类型方法

@ExceptionHandler()
@InitBinder
@ModelAttribute

在带有@ControllerAdvice 注解的类中,以上所述的方法会运用到整个应用所有控制器中带有@RequestMapping注解的方法上。

@ControllerAdvice注解本身已经使用了@Component,因此@ControllerAdvice注解的类会自动被组件扫描获取到。

@ControllerAdvice
public class MyControllerAdvice { @ExceptionHandler(SpittleNotFoundException.class)
public String fun1() {
return "/error/notFound";
}
}

三、跨重定向传递数据

一般的,在处理完POST请求后,通常最好执行一下重定向。这样可以防止用户点击浏览器刷新按钮或后退按钮时,客户端重新执行POST请求。在spring中返回视图String变量是以redirect:开头,

3中方法

1)将数据放到url后面,不过不可以传递对象

2)将对象数据直接放到回话中,然后再删除

3)使用flash 属性,flash 属性会一直携带这些数据直到下次请求,然后才会消失。

第三种方法是spring 3.1中提供了 RedirectAttributes 的 addFlashAttribute()方法来设置flash属性。

spring处理过程是首先将flash 属性复制到回话中,重定向后,取出falsh属性,并从会话中转移到model 中。处理重定向的方法就可以从model 中访问对象了。

@RequestMapping(value = "/register")
public String register(RedirectAttributes model) {
model.addAttribute("username", "nice");
model.addFlashAttribute("user", new Person());
return "redirect:/spitter/{username}"; }

spring in action 7.2 小结的更多相关文章

  1. spring in action 5.1 小结 spring mvc起步

    0 配置 DispatcherServlet 是 spring mvc的核心,常规配置方法可以查看之前博客.springMVC简单例子 在此使用servlet 3 规范和 spring3.1 功能增强 ...

  2. spring in action 7.1 小结

    0 AbstractAnnotationConfigDispatcherServletInitializer剖析,在Servlet 3.0环境中,容器会在类路径中查找实现ServletContaine ...

  3. spring in action第一章小结1

    1 spring基本理念是简化java开发. 使用以下4个策略简化java开发 1) 基于POJO的轻量级和最小侵入性编程 2)通过使用DI和AOP实现松耦合 3)基于切面和惯例进行声明式编程 4)通 ...

  4. 1、Spring In Action 4th笔记(1)

    Spring In Action 4th笔记(1) 2016-12-28 1.Spring是一个框架,致力于减轻JEE的开发,它有4个特点: 1.1 基于POJO(Plain Ordinary Jav ...

  5. spring in action 4th --- quick start

    读spring in action. 环境搭建 quick-start依赖注入 面向切面 1.环境搭建 jdk1.8 gradle 2.12 Intelij idea 2016.2.1 1.1创建一个 ...

  6. ssh整合随笔(注解方式,Spring 管理action)

    Web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  7. Spring in action记录

    最近一段时间重新学习了一遍SPRING,现在对这些笔记整理一下,一来算是对之前的学习有一个交代,二来当是重新学习一次,三来可以留下备份 这次学习中以SPRING IN ACTION 4这学习资料,整书 ...

  8. Spring in Action 4th 学习笔记 之 AOP

    前提:本文中的AOP仅限于Spring AOP. 先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的 ...

  9. 学习spring in action 第一天

    这段时间,开始学习java吧,因为C sharp 学习了java的大量语法格式,所以,留意下,就不会错了,java 有的c sharp也有,而且之前我也学习过java的桌面开发,但是一下子上来就要自己 ...

随机推荐

  1. Google用不了解决方法(添加gmail用不了的方法)

     1. 获取google最新的ip列表 能够使用工具1: http://ip.chinaz.com/? IP=www.google.com 也能够使用工具2: http://tool.17mon.cn ...

  2. Oracle初始安装内存设置参考

      预备知识 shared memory:共享内存段: 一个内存区域,可以被不同的进程读取.oracle使用它来构成sga.oracle使用以下三种方法来创建一个sga区: 1. 使用单个共享内存段. ...

  3. Heap Spray原理

    Heap Spray定义基本描述 Heap Spray并没有一个官方的正式定义,毕竟这是漏洞攻击技术的一部分.但是我们可以根据它的特点自己来简单总结一下.Heap Spray是在shellcode的前 ...

  4. 为运行SQL Server的虚拟机切换装有DB Logs的最佳实践

    上一篇说到虚拟机启动不了, 原因是有一块VHDX的文件找不到了. 解决了这个问题之后, 又遇到了另一个问题, 那就是我的这台SQL Server的虚机启动之后, 我的几个重要database变成了su ...

  5. WebSocket原理分析

    Web应用的通信过程通常是客户端通过浏览器发出一个请求,服务器端接收请求后进行处理并返回结果给客户端,客户端浏览器将信息呈现.这种机制对于信息变化不是特别频繁的应用可以良好支撑,但对于实时要求高.海量 ...

  6. AJAX前台传过来的中文在后台获取是乱码问题

    前台传值时加上encodeURI $.SaveForm({ url: "${basePath}/soft/mergeSoftAction_add.do?ids="+ids+&quo ...

  7. 转:美团Android资源混淆保护实践

    转自:http://tech.meituan.com/mt-android-resource-obfuscation.html 前言 Android应用中的APK安全性一直遭人诟病,市面上充斥着各种被 ...

  8. [Javascript Crocks] Compose Functions for Reusability with the Maybe Type

    We can dot-chain our way to great success with an instance of Maybe, but there are probably cases wh ...

  9. SVG Viewer 3.0安装发现SVG Viewer License.txt无法介入写入,安装失败

    这几天研究SVG,发现"SVG Viewer 3.0安装发现SVG Viewer License.txt无法介入写入,安装失败"这个问题,晚上没找到解答的答案,后来被我们项目经理搞 ...

  10. 如何获取浏览器URL中查询字符串的参数?

    如何获取浏览器URL中查询字符串的参数? 想要知道怎样解决这个问题,首先我们先认识一下Location对象. Location对象包含了当前页面与位置(url)相关的信息 URL示例:http://w ...