标签:文件下载 spring oid bash nbsp mp3 问题: file 添加
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(四)-- 文件下载、自定义拦截器、异常处理
标签:文件下载 spring oid bash nbsp mp3 问题: file 添加
原文地址:http://www.cnblogs.com/lwj-0923/p/7424933.html