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. 其它的不便于使 ...
随机推荐
- Linux下protobuf的编译与安装【各种奇葩问题】
1.下载源码 首先,从github上下载protobuf的源码,地址:https://github.com/google/protobuf,我选择下载2.5.0版本. 2.编译protobuf 2.1 ...
- 提交到APPStore出现ERROR ITMS-90474
解决的方案是:在工程的targets--->General----->Develoment Info ------->Status BarStyle
- 【.net 深呼吸】在运行阶段修改应用配置文件
上一篇博文中,老周所介绍的自行编写的配置类,虽然能够很好地做封装,但它仅允许修改用户级别的配置,所以文件都是保存到用户配置目录下的.可是,许多情况下,我们还是不考虑用户隔离,而是能够直接修改与应用程序 ...
- 关于appium+模拟器+idea的细谈
之前转载的虫师的appium移动端自动化的文章,前边appium环境的搭建,这里就不过多介绍了,不明白的小伙伴可以返回去看,后边有不会的步骤, 也都去看,总之,两篇文章结合看! 关于移动端自动化测试- ...
- (转)JAVA堆栈操作
java.util.Queue用法(是util中的一个接口) 队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行 ...
- win7下从ruby源代码编译安装
工作中需要在c++代码中嵌入ruby c api,然而在vs工程中编译失败,所以现在通过手动从源代码编译ruby寻找原因(之前使用rubyinstaller安装). 先从官网下载ruby 2.4. ...
- 关于Oracle连接超时的问题
测试环境ORACLE 11.2.0. 如果连接池设置单个连接闲置时间大于数据库连接超时时间,则连接池中的连接发出数据请求时会出现Connect timeout occurred错误, 这是由于连接超时 ...
- 机器学习实战 logistic回归 python代码
# -*- coding: utf-8 -*- """ Created on Sun Aug 06 15:57:18 2017 @author: mdz "&q ...
- Vmware虚拟机三种网络模式详解
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...
- python几种常见语法
NO1.type自动匹配类型 name="zhangsan"age=18 print (type(name))#type自动匹配类型 print ("name:%s,ag ...