SpringMVC的文件上传

服务器端实现文件上传的技术有很多种,Servlet3.0,FileUtils,框架等等,都可以实现文件上传,不管使用哪一种上传技术,都必须满足三要素:

  • 表单项type=“file”

  • 表单的提交方式是post

  • 表单的enctype属性是多部分表单形式,及enctype=“multipart/form-data”

    <form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">名称<input type="text" name="username"><br/>文件1<input type="file" name="uploadFile"><br/><input type="submit" value="提交"></form>

SpringMVC的请求-文件上传-文件上传的原理

SpringMVC的请求-文件上传-单文件上传的代码实现1

添加依赖

     <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.3</version></dependency>

配置多媒体解析器

<!--配置文件上传解析器--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="UYF-8"/><property name="maxUploadSize" value="500000"/></bean>

后台程序

@RequestMapping(value="/quick22")@ResponseBodypublic void save22(String username, MultipartFile uploadFile) throws IOException {System.out.println(username);System.out.println(uploadFile);}

SpringMVC的请求-文件上传-单文件上传的代码实现2

完成文件上传

    @RequestMapping(value="/quick22")@ResponseBodypublic void save22(String username, MultipartFile uploadFile) throws IOException {System.out.println(username);//获得上传文件的名称String originalFilename = uploadFile.getOriginalFilename();uploadFile.transferTo(new File("C:\\upload\\"+originalFilename));}

SpringMVC的请求-文件上传-多文件上传的代码实现3

多文件上传,只需要将页面修改为多个文件上传项,将方法参数MultipartFile类型修改为MultipartFile[]即可

    <form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data">名称<input type="text" name="username"><br/>文件1<input type="file" name="uploadFile"><br/>文件2<input type="file" name="uploadFile"><br/><input type="submit" value="提交"></form>@RequestMapping(value="/quick23")@ResponseBodypublic void save23(String username, MultipartFile[] uploadFile) throws IOException {System.out.println(username);for (MultipartFile multipartFile : uploadFile) {String originalFilename = multipartFile.getOriginalFilename();multipartFile.transferTo(new File("C:\\upload\\"+originalFilename));}}

SpringMVC的拦截器

SpringMVC拦截器-拦截器的作用

  • Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。

  • 将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(InterceptorChain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。

Filter过滤器的作用

  • 在请求到达目标资源之前干的事(对request增强)
  • 在响应到达客户端之前干的事(对response增强)
  • 可以决定是否让请求到达目标资源

SpringMVC拦截器-interceptor和filter区别

关于interceptor和filter的区别,如图所示:

SpringMVC拦截器-基础入门

自定义拦截器很简单,只有如下三步:

创建拦截器类实现HandlerInterceptor接口

    public class MyInterceptor1 implements HandlerInterceptor {//在目标方法执行之前 执行public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {System.out.println("preHandle.....");// true代表放行,false代表阻止该请求到达目标资源return true;}//在目标方法执行之后 视图对象返回之前执行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {System.out.println("postHandle...");}//在流程都执行完毕后 执行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {// 页面加载完毕之后才会输出System.out.println("afterCompletion....");}}

配置:在SpringMVC的配置文件中配置

     <!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor1"/></mvc:interceptor></mvc:interceptors>

编写Controller,发请求到controller,跳转页面

@Controllerpublic class TargetController {@RequestMapping("/target")public ModelAndView show(){System.out.println("目标资源执行......");ModelAndView modelAndView = new ModelAndView();modelAndView.addObject("name","赵丽颖");modelAndView.setViewName("index");return modelAndView;}}

页面

    <html><body><h2>Hello World! ${name}</h2></body></html>

SpringMVC拦截器-基础入门详解

拦截器在预处理后什么情况下会执行目标资源,什么情况下不执行目标资源,以及在有多个拦截器的情况下拦截器的执行顺序是什么?

配置拦截器2

<!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor2"/></mvc:interceptor><mvc:interceptor><!--对哪些资源执行拦截操作--><mvc:mapping path="/**"/><bean class="cs.wy.interceptor.MyInterceptor1"/></mvc:interceptor></mvc:interceptors>

结论:

  • 当拦截器的preHandle方法返回true则会执行目标资源,如果返回false则不执行目标资源

  • 多个拦截器情况下,配置在前的先执行,配置在后的后执行

  • 拦截器中的方法执行顺序是:preHandler-------目标资源----postHandle---- afterCompletion

拦截器中的方法说明如下

SpringMVC异常处理机制

异常处理的思路
  • 系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试等手段减少运行时异常的发生。

  • 系统的Dao、Service、Controller出现都通过throws Exception向上抛出,最后由SpringMVC前端控制器交由异常处理器进行异常处理

异常处理两种方式
  • 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver

  • 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器

简单异常处理器SimpleMappingExceptionResolver

SpringMVC已经定义好了该类型转换器,在使用时可以根据项目情况进行相应异常与视图的映射配置

    <!--配置简单映射异常处理器--><bean class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>     <property name=“defaultErrorView” value=“error”/>   默认错误视图<property name=“exceptionMappings”><map>     异常类型                                     错误视图<entry key="cs.wy.exception.MyException" value="error"/><entry key="java.lang.ClassCastException" value="error"/></map></property></bean>

自定义异常处理步骤

①创建异常处理器类实现HandlerExceptionResolver

    public class MyExceptionResolver implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {//处理异常的代码实现//创建ModelAndView对象ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("exceptionPage");return modelAndView;}}

②配置异常处理器

    <bean id="exceptionResolver"        class="cs.wy.exception.MyExceptionResolver"/>

③编写异常页面

   <%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>这是一个最终异常的显示页面</body></html>

④测试异常跳转

    @RequestMapping("/quick22")@ResponseBodypublic void quickMethod22() throws IOException, ParseException {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); simpleDateFormat.parse("abcde");}

【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理相关推荐

  1. spring文件上传拦截器及异常处理

    1文件上传 当enctype="multipart/form-data"时request.getParameter()方法失效 单文件上传 导入坐标 <dependency& ...

  2. 关于SpringMVC框架实现简单的文件上传下载(ssm)

    关于ssm框架整合文件的上传和下载. 首先来看单个附件的上传和下载: 1.首先创建一个用来测试的jsp文件上传下载的页面  代码如下 <%@ page language="java&q ...

  3. 【转】jsp+servlet和SSM分别是如何实现文件上传(示例)

    原文地址:https://blog.csdn.net/niceliusir/article/details/78453560 以下是jsp+servlet和SSM分别是如何实现文件上传的方法示例 两种 ...

  4. SpringMVC实现文件上传

    1.文件上传之上传原理分析和搭建环境 springmvc文件上传也会用到Javaweb实现文件上传的组件. 1.1文件上传的必要条件 A .form 表单的 enctype 取值必须是:multipa ...

  5. [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...

    引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...

  6. struts2和springmvc实现文件上传

    struts2 struts有专门的文件上传功能,struts的Action已经脱离了servlet容器的范围,所以servlet中的smartupload不是很方便使用,甚至初始化servletCl ...

  7. SpringMVC学习--文件上传

    简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...

  8. SpringMVC+uploadify文件上传

    前言 准备筹划一个自己的个人网站,初步的架构设计采用SSH(Spring-MVC,Spring,Hibernate),在这里 顺便记录一下设计和开发过程,以备参考.后续会陆续更新文档,如有任何问题,欢 ...

  9. springmvc图片文件上传接口

    springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...

最新文章

  1. Django View(视图系统)
  2. for循环 php 增加数组维数_PHP数组在循环中创建多维数组
  3. iOS 编写高质量Objective-C代码(六)
  4. 输入一个字母,转大小写
  5. 边界信任模型,零信任模型
  6. Java 实例 - 测试两个字符串区域是否相等
  7. [转载] 七龙珠第一部——第086话 打进前八强
  8. 数据结构和算法———P6 线性表
  9. 【实践】基于百度地图API实现的地图形式天气预报【一】
  10. 丹尼斯·里奇的自述简历
  11. 关于 未受信任的企业级开发者 提示的解决
  12. MADlib——基于SQL的数据挖掘解决方案(7)——数据转换之其它转换
  13. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码
  14. 自然数 素数 质数_素数列表–最多20,000个素数的图表
  15. python 开启子进程的两种方式
  16. apache 问题 You don't have permission to access /test.php on this server 解决方法
  17. 软件测试,自学3个月出来就是高薪工作?你以为还是2019年以前?
  18. 麒麟659鸿蒙系统,华为官宣自研系统,麒麟659以上的华为手机可以直接切换新系统...
  19. 爱点击ICLK.US增持畅移,深度协同催生更多增长机会
  20. 计算机物理学论文300字,物理考试反思范文300字(精选6篇)

热门文章

  1. [C++]VisualAssistX中文注释提示错误 解决办法
  2. 解决AJAX CalendarExtender控件不显示中文的情况(转帖博客园某人(不好意思,实在是没有找到您的尊姓大名,感谢一下!))...
  3. 五分钟叫你看懂美国金融危机的成因和巨大危害[转]
  4. 安卓应用程序插件化开发框架 -AAP Framework
  5. linux可读可写为啥设置421
  6. 计算机组成原理:储存系统和结构
  7. Arduino 控制舵机
  8. mbstowcs 和 wcstombs函数:C语言提供的宽字符和多字节字符转换函数
  9. tomcat参数java_opts调整
  10. 数据结构与算法:链表,队列,栈,递归,有序表