【SSM框架系列】SpringMVC的文件上传、拦截器及异常处理
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的文件上传、拦截器及异常处理相关推荐
- spring文件上传拦截器及异常处理
1文件上传 当enctype="multipart/form-data"时request.getParameter()方法失效 单文件上传 导入坐标 <dependency& ...
- 关于SpringMVC框架实现简单的文件上传下载(ssm)
关于ssm框架整合文件的上传和下载. 首先来看单个附件的上传和下载: 1.首先创建一个用来测试的jsp文件上传下载的页面 代码如下 <%@ page language="java&q ...
- 【转】jsp+servlet和SSM分别是如何实现文件上传(示例)
原文地址:https://blog.csdn.net/niceliusir/article/details/78453560 以下是jsp+servlet和SSM分别是如何实现文件上传的方法示例 两种 ...
- SpringMVC实现文件上传
1.文件上传之上传原理分析和搭建环境 springmvc文件上传也会用到Javaweb实现文件上传的组件. 1.1文件上传的必要条件 A .form 表单的 enctype 取值必须是:multipa ...
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- struts2和springmvc实现文件上传
struts2 struts有专门的文件上传功能,struts的Action已经脱离了servlet容器的范围,所以servlet中的smartupload不是很方便使用,甚至初始化servletCl ...
- SpringMVC学习--文件上传
简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="m ...
- SpringMVC+uploadify文件上传
前言 准备筹划一个自己的个人网站,初步的架构设计采用SSH(Spring-MVC,Spring,Hibernate),在这里 顺便记录一下设计和开发过程,以备参考.后续会陆续更新文档,如有任何问题,欢 ...
- springmvc图片文件上传接口
springmvc图片文件上传 用MultipartFile文件方式传输 Controller package com.controller;import java.awt.image.Buffere ...
最新文章
- Django View(视图系统)
- for循环 php 增加数组维数_PHP数组在循环中创建多维数组
- iOS 编写高质量Objective-C代码(六)
- 输入一个字母,转大小写
- 边界信任模型,零信任模型
- Java 实例 - 测试两个字符串区域是否相等
- [转载] 七龙珠第一部——第086话 打进前八强
- 数据结构和算法———P6 线性表
- 【实践】基于百度地图API实现的地图形式天气预报【一】
- 丹尼斯·里奇的自述简历
- 关于 未受信任的企业级开发者 提示的解决
- MADlib——基于SQL的数据挖掘解决方案(7)——数据转换之其它转换
- android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码
- 自然数 素数 质数_素数列表–最多20,000个素数的图表
- python 开启子进程的两种方式
- apache 问题 You don't have permission to access /test.php on this server 解决方法
- 软件测试,自学3个月出来就是高薪工作?你以为还是2019年以前?
- 麒麟659鸿蒙系统,华为官宣自研系统,麒麟659以上的华为手机可以直接切换新系统...
- 爱点击ICLK.US增持畅移,深度协同催生更多增长机会
- 计算机物理学论文300字,物理考试反思范文300字(精选6篇)
热门文章
- [C++]VisualAssistX中文注释提示错误 解决办法
- 解决AJAX CalendarExtender控件不显示中文的情况(转帖博客园某人(不好意思,实在是没有找到您的尊姓大名,感谢一下!))...
- 五分钟叫你看懂美国金融危机的成因和巨大危害[转]
- 安卓应用程序插件化开发框架 -AAP Framework
- linux可读可写为啥设置421
- 计算机组成原理:储存系统和结构
- Arduino 控制舵机
- mbstowcs 和 wcstombs函数:C语言提供的宽字符和多字节字符转换函数
- tomcat参数java_opts调整
- 数据结构与算法:链表,队列,栈,递归,有序表