1文件上传

当enctype="multipart/form-data"时request.getParameter()方法失效

单文件上传
导入坐标

   <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.6</version></dependency>
<form action="${pageContext.request.contextPath}/user/quick22" method="post" enctype="multipart/form-data">名称<input type="text" name="username"><br>文件<input type="file" name="uploadFile1"><br>文件<input type="file" name="uploadFile2"><br>文件<input type="submit" value="提交"><br>
</form>

配置文件上传解析器
在spring-mvc.xml中加入

   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--上传文件编码类型--><property name="defaultEncoding" value="UTF-8"></property><!--单文件总大小--><property name="maxUploadSize" value="500000"></property><!--文件总大小--><property name="maxUploadSizePerFile" value="1044000"></property></bean>

这里上传到webapp下

@RequestMapping(value = "/quick22")@ResponseBody //不进行页面跳转不进行数据回写响应体为空public void save22(String username, MultipartFile uploadFile1, MultipartFile uploadFile2) throws IOException {System.out.println(username);//String originalFilename1 = uploadFile1.getOriginalFilename();String originalFilename2 = uploadFile2.getOriginalFilename();//获取servletContext对象WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();ServletContext servletContext =
//获取真实路径
webApplicationContext.getServletContext();String realPath = servletContext.getRealPath("/");//上传到哪儿uploadFile1.transferTo(new File(realPath+originalFilename1));uploadFile2.transferTo(new File(realPath+originalFilename2));}

多文件上传
前台

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

客户端用数组接循环存储就行

    @RequestMapping(value = "/quick23")@ResponseBody //不进行页面跳转不进行数据回写响应体为空public void save23(String username, MultipartFile[] uploadFile) throws IOException {System.out.println(username);WebApplicationContext webApplicationContext = ContextLoader.getCurrentWebApplicationContext();ServletContext servletContext = webApplicationContext.getServletContext();String realPath = servletContext.getRealPath("/");for (MultipartFile multipartFile : uploadFile) {String originalFilename = multipartFile.getOriginalFilename();multipartFile.transferTo(new File(realPath+originalFilename));}}

2,springMVC拦截器
类似Servlet开发中的过滤器Filter 用于处理器的预处理和后处理
不会拦截js,css html jsp
1)创建MyInterceptorl一个类实现implements HandlerInterceptor
有三个方法

//在目标方法值前@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return flase;//放不放行}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {//再返回视图时执行}//在返回视图后执行@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
    <!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--对所有的目标方法都拦截--><mvc:mapping path="/**"/><bean class="com.flatly.interceptor.MyInterceptorl"/></mvc:interceptor></mvc:interceptors>
@Controller
public class TargetController {@RequestMapping("/target")
public ModelAndView show(){System.out.println("目标资源执行。。");ModelAndView modelAndView =new ModelAndView();modelAndView.addObject("name","flatly");modelAndView.setViewName("index");return modelAndView;
}
}

preHandle方法返回true才会执行目标方法
postHandle可以修改视图modelAndView

测试
携带参数param是yes放行index不然重定向error

public class MyInterceptorl implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("preHandle..");String param = request.getParameter("param");if("yes".equals(param)){return true;}else {request.getRequestDispatcher("/error.jsp").forward(request,response);return false;}}}

在目标方法中存储name

    modelAndView.addObject("name","flatly");

返回试图前执行postHandle

        @Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {//再返回视图时执行modelAndView.addObject("name","flatlypostuppd");System.out.println("postHandle");}

在页面上取${name}为flatlypostuppd
配置多个拦截器
顺序(先过去再执行)
1preHandle 2preHandle 目标 postHandle2 postHandle1 afterCompletion2 afterCompletion1

3 异常处理机制
1spring提供简单异常处理机制SimpleMappingExceptionResolver
在spring-mvc.xml

   <!--配置异常处理器--><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><--这是默认的跳转页面视图--><property name="defaultErrorView" value="error"/><--异常类型与之匹配-->property name="exceptionMappings"><map><entry key="java.lang.ClassCastException" value="error1"/><entry key="com.itheima.exception.MyException" value="error2"/></map></property></bean>

2自定义异常处理步骤
实现HandlerExceptionResolver

public class MyExceptionResolver implements HandlerExceptionResolver {/*参数Exception:异常对象返回值ModelAndView:跳转到错误视图信息*/public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {ModelAndView modelAndView = new ModelAndView();if(e instanceof MyException){modelAndView.addObject("info","自定义异常");}else if(e instanceof ClassCastException){modelAndView.addObject("info","类转换异常");}modelAndView.setViewName("error");return modelAndView;}
}

在前端取数据${info}

   <!--自定义异常处理器--><bean class="com.itheima.resolver.MyExceptionResolver"/>

spring文件上传拦截器及异常处理相关推荐

  1. Spring文件上传

    2019独角兽企业重金招聘Python工程师标准>>> Spring文件上传 1.所需依赖包:commons-fileupload-1.3.1.jar 2.Maven配置文件pom. ...

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

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

  3. 修正Strut2 自带上传拦截器功能

    Struts2字典的FileUploadInterceptor 拦截器 主要帮助获取上传文件的ContentType.fileName.文件对象.如果开发人员在开发过程中使用.则需要设置set/get ...

  4. Spring 文件上传功能

    本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: 1 2 3 4 5 <dependency>     & ...

  5. Spring文件上传和连接重置问题

    一个Spring Servlet初始化程序,用于配置文件上传限制,每个文件5mb,每个请求10mb. MyWebInitializer.java public class MyWebInitializ ...

  6. 服务器上传图片显示图片404,关于使用spring文件上传遇到的服务器中的图片访问不到报404的问题...

    中的enctype确实是"multipart/form-data",后来实在没办法了,他前面提到过找不到类,那会不会是还有jar没有引进去呢,后来发现错误信息里有IOUtils这个 ...

  7. struts2的文件上传和文件下载

    实现使用Struts2文件上传和文件下载: 注意点: (1)对应表单的file1和私有成员变量的名称必须一致 <input type="file" name="fi ...

  8. struts2文件上传(2)

    单文件上传: 在动作类action中,声明相关属性 在动作类action中,要声明与页面中表单name属性同名的属性,同名的属性的类型是File类型 在动作类action中,要声明[同名的属性]Con ...

  9. Struts2 文件上传

    JSP界面: 必须把表单的enctype属性改为 multipart/form-data才能上传 Action: 程序如果多人使用,必须保证文件名是唯一,文件名相同会覆盖掉原来的文件,所以使用时间作为 ...

最新文章

  1. mongodb 安装_1、MongoDB 安装
  2. python太难学了-为何编程那么难?新手该怎么学Python?
  3. mysql 函数依赖关系_MySQL关系规范化
  4. 寄存器(cpu工作原理)
  5. 行云管家堡垒机 导入腾讯云主机
  6. vue-slicksort拖拽组件
  7. 原生js写简单轮播图方式1-从左向右滑动
  8. 单片机蜂鸣器音乐c语言程序,51单片机 使用蜂鸣器播放简单音乐
  9. 服务器四核cpu性能排行,服务器cpu性能排行
  10. 教师办公用计算机使用管理制度,教师办公室计算机使用规章制度
  11. 猜数字游戏:随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏
  12. 黑马程序员——网络编程的应用
  13. python moving average_Python实现滑动平均(Moving Average)的代码教程
  14. jquery填充列表内容
  15. 大赛来袭 | 千万项目商机+超40W大赛奖金,快来报名吧!
  16. 实例检索︱图像的实例搜索(文献、方法描述、商业案例)
  17. 新手小白用C# winform 读取Excel表
  18. 如何将pdf等非标准数据文件转换成可供EXCEL等软件分析的数据
  19. 错误1:Archive for required library: XXXXXXXXcannot be read or is not a valid ZIP file
  20. 南京邮电大学2019-2020第二学年度微型计算机接口技术考试真题回忆

热门文章

  1. iOS:Xcode Instruments的使用
  2. 关于uni-app的一些坑(日后再做补充)
  3. 量化(3): 量化校准
  4. 数据库 PolarDB 开源之路该如何走?听听他们怎么说
  5. 关于u盘插入电脑在我的电脑中不显示盘符无法正常使用,但是在右下角图标有显示的问题。
  6. UT-Exynos4412开发板三星ARM四核旗舰开发平台android4.0体验-12音频输入输出功能调试
  7. wince buid
  8. 汉诺塔(河内塔)问题(递归)
  9. MySQL-06-MD5加密
  10. 使用多线程时@Service工具类出现NullPoint错误解决