SpringMVC(四)-- 文件下载、自定义拦截器、异常处理
1.文件下载
用ResponseEntity<byte[]> 返回值完成文件下载
具体参见本博客之前的《文件上传下载》
@RequestMapping(value="/testResponseEntity")
public ResponseEntity<byte[]> testResponseEntity(HttpServletRequest request) throws Exception{
ServletContext servletContext = request.getServletContext();
String fileName = "风吹麦浪.mp3";
String realPath = servletContext.getRealPath("/WEB-INF/"+fileName);
InputStream in = new FileInputStream(new File(realPath)); byte[] body = new byte[in.available()];
in.read(body);
MultiValueMap<String, String> headers = new HttpHeaders(); fileName = new String(fileName.getBytes("gbk"),"iso8859-1"); headers.set("Content-Disposition", "attachment;folename="+fileName);
HttpStatus statusCode = HttpStatus.OK; ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
in.close();
return response;
}
2.自定义拦截器
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("1-preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("1-postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("1-afterCompletion");
}
}
三个方法
2).在springmvc配置文件中配置相对应的拦截器
<mvc:interceptors>
<!--配置自定义拦截器 ,MyFilter都拦截 -->
<bean class="com.neuedu.springmvc.filter.MyFilter"></bean>
</mvc:interceptors>
若有多个拦截器
<mvc:interceptors>
<bean class="com.neuedu.springmvc.interceptor.MyInterceptor"></bean>
<mvc:interceptor>
<mvc:mapping path="/**"/><!-- 都拦截 -->
<mvc:exclude-mapping path="/testInterceptor"/><!-- 除了这个都拦截 -->
<bean class="com.neuedu.springmvc.interceptor.BInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<mvc:mapping path=" "/> 与 <mvc:exclude-mapping path=" "/> 连用
前者代表:都拦截
后者代表:除了这个都拦截
3.SpringMVC的异常处理
@ExceptionHandler(value={ArithmeticException.class})
public ModelAndView handleException(Exception ex){
ModelAndView mv = new ModelAndView();
mv.setViewName("error");
mv.addObject("exception", ex);
return mv;
}
@ControllerAdvice
public class HangleException {
@ExceptionHandler(value={ArithmeticException.class})
public String handleException(){
System.out.println("no");
return "error";
}
}
4,基于配置的异常处理
如果希望对所有异常进行统一处理,可以使用 SimpleMappingExceptionResolver,它将异常类名映射为视图名,即发生异常时使用对应的视图报告异常
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- exceptionAttribute用于指定异常对象在request域中的键 -->
<property name="exceptionAttribute" value="ex"></property>
<property name="exceptionMappings">
<props>
<!-- key:指定异常的全类名 value:出现错误后要转发到的页面,但是此处没有value属性,所以直接写,如"error"-->
<prop key="java.lang.ArithmeticException">error</prop>
</props>
</property>
</bean>
在 jsp页面写 ${exception },会在页面显示错误信息
这是因为默认将该信息写到 request 域中

如果不想用这个 名称,可以在配置信息中添加
<property name="exceptionAttribute" value="ex"></property>
这样在 jsp 页面写 ${ex } 也会在页面显示错误信息
单拦截器流程图:

多拦截器流程图:

SpringMVC(四)-- 文件下载、自定义拦截器、异常处理的更多相关文章
- JavaEE开发之SpringMVC中的自定义拦截器及异常处理
上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...
- SpringMVC 文件上传&拦截器&异常处理
文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload ...
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- SpringMVC——自定义拦截器、异常处理以及父子容器配置
自定义拦截器: 一.若想实现自定义拦截器,需要实现 org.springframework.web.servlet.HandlerInterceptor 接口. 二.HandlerIntercepto ...
- springMVC整理04--文件上传 & 拦截器 & 异常处理
1. 文件上传 SpringMVC 的文件上传非常简便,首先导入文件上传依赖的 jar: <!-- 文件上传所依赖的 jar 包 --> <dependency> <g ...
- SpringMvc自定义拦截器
SpringMvc也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HandlerInterceptor接口 -preHandle():这个方法在业务处理器 ...
- springmvc 自定义拦截器实现未登录用户的拦截
第一步:编写自定义拦截器类,该类继承HandlerInterceptorAdapter,重写preHandle方法 第二步:配置springmvc.xml文件,定义拦截器属性 登录请求的mappi ...
- SpringMVC系列(十二)自定义拦截器
Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口– preHandle():这个方法在业务处 ...
- SpringMVC中session使用&&拦截器&&乱码处理&&异常处理
### 1. 使用Session 通常,会在Session中存放: 1. 客户端(用户)的身份标识,通常是用户的id:2. 使用频率非常高的数据,例如显示在页面中的用户名.头像等:3. 其它的不便于使 ...
随机推荐
- 干货~powershell与bash和docker在项目中怎么用
回到目录 这个标题够直接了吧,够坦诚了吧,也许你在项目里这三个东西都没有用到,但这三个东西在未来的两年里将成为最HOT的技术,它们不是什么框架,也不是什么设计模式,而是做为程序和环境快速部署而设计出来 ...
- MyEclipse安装SVN插件
MyEclipse安装svn插件有两种方式,一种是从MyEclipse里面下载,但是下载速度巨慢:第二种是将插件先下载好,再进行配置,这种方式会快一些,本文讲的是第二种方式. 1.下载SVN插件sub ...
- Java面向对象之抽象类,接口
抽象类: 含有抽象方法的类被声明为抽象类 抽象方法由子类去实现 含有抽象方法的类必须被声明为抽象类 抽象类被子类继承,子类(如果不是抽象类)必须重写抽象类中的所有抽象方法 抽象方法: 声明而未被实现的 ...
- nyoj_14:会场安排问题
一道很经典的贪心问题 题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=14 #include<iostream> #inclu ...
- java.net.UnknownHostException 异常解决方案
1)使用hostname命令设置新的host name与/etc/hosts本机hostname一致 #hostname 本机hostname 具体可以查看:/etc/hosts和//etc/sysc ...
- 【HTML】dl dt dd
摘要 看到没怎么使用过的html 标签,记录下 定义 dl 类似于 ul ,无任何样式,自定义列表容器, ul 为无序列表容器,ol 为有序列表容器 dt dd 类似于 li ,无任何样式,为帮助实现 ...
- listView属性随笔--不断增加中。
对于一个控件的认识总是会随着时间的推移,而变的逐渐深刻. 简单的就 android:layout_height:属性来说给的数值不同就会有不同的效果,有些时候你根本想不到是跟这个属性的设置有关. 有时 ...
- Eclipse 改变字体大小,设置背景色
Eclipse背景颜色修改: 操作界面默认颜色为白色.对于我们长期使用电脑编程的人来说,白色很刺激我们的眼睛,所以我经常会改变workspace的背景色,使眼睛舒服一些.设置方法如下: 1.打开win ...
- PHP appserv + ZendStudio12.5.1 + 注册码
PHP软件安装 百度云盘 安装激活破解ZendStudio12.05(注册码) Zend Studio 配置 apache server
- 利用python发送邮件
找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...