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. API & HTTP 请求调试:Postman

    参考: Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试. 它能够发送任何类型的HTTP requests (GET, HEAD, POST, PU ...

  2. VS2017安装后如何移动 Windows Kits文件夹

    MS的回答 LINK Try the following technique: Close all programs, move the “Windows Kits” folder to anothe ...

  3. 空间索引网格大小无效的解决方法The spatial index grid size is invalid

    原名引至:http://www.cnblogs.com/linhugh/archive/2012/07/24/2606439.html   之前在做shp数据导入Geodatabase中时,程序运行出 ...

  4. Birt中实现字段拆分为表的还有一种方法

    来源:     http://developer.actuate.com/community/forum/index.php? /topic/36204-split-data-row/. 将字段拆分为 ...

  5. MVC4 过滤器(转)

    先来看看一个例子演示过滤器有什么用: public class AdminController : Controller { // ... instance variables and constru ...

  6. 需要掌握哪些python标准库和三方库?

    讨论参考:https://www.zhihu.com/question/20501628 库太多了,根据需要使用相应领域的三方库:至于对于企业常用的三方库,可以参考热门招聘网站的招聘说明

  7. Js组件layer的使用

    作为独立组件使用 layer 引入好layer.js后,直接用即可 <script src="layer.js"></script> <script& ...

  8. VS2010 OpenCL运行环境配置

    1.安装AMD GPU显卡驱动(安装后重启) 13-12_win7_win8_64_dd_ccc_whql.exe 2.安装AMD OpenCL SDK(安装后重启) AMD-APP-SDK-v2.9 ...

  9. 使用C# + httpWebRequest 解析WMTS服务元数据

    解析http://219.142.81.86/igserver/ogc/kvp/TAS10R52000J49/WMTSServer服务的元数据 // 测试httpWebRequest读取 wmts元数 ...

  10. 监听内容变化 TextWatcher @功能

    监听多个TextView的内容变化 使用示例 TextWatcherUtils.addTextChangedListener(isAllNotEmpty -> btnLogin.setEnabl ...