SpringMVC(五)
- 文件上传
1、导入相应jar包:jakarta commons fileupload及jakarta commons io
2、配置MultipartResplver
<bean id="miltipartResovler" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="5242880"></property>
</bean>
注意:defaultEncoding必须和用户JSP的pageEncoding属性一致
3、目标方法
@RequestMapping("/testFileUpload")
public String testFileUpload(@RequestParam("file")MultipartFile file,@RequestParam("desc")String desc) throws IOException {
System.out.println("desc:"+desc);
System.out.println("OriginalFilename:"+file.getOriginalFilename());
System.out.println("InputStream:"+file.getInputStream());
return "success";
}
- 自定义拦截器
SpringMVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerIntercepter接口
-preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求request进行处理。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
-postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet向客户端返回相应前被调用,在该方法中对用户请求request进行处理。
-afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
多个拦截器时三个方法执行顺序:preHandle按配置正序执行,其余两个按反序执行
用法:
定义一个拦截器类,实现HandlerIntercepter接口以及其三个方法。在配置文件中进行配置
<mvc:interceptors>
<!-- 配置自定义拦截器 -->
<bean class="com.gh.spring.interceptor.FirstInterceptor"></bean>
</mvc:interceptors>
拦截器的配置
除上述方式,还有以下配置方式:
配置拦截器(不)作用的路径
<mvc:intercepter>
<mvc:mapping>
<bean>
- 异常处理注解:ExceptionHandler
SpringMVC通过HandlerExceptionResolver处理程序的异常,包括Handler映射、数据绑定以及目标方法执行时发生的异常
-HandlerExceptionResolver
主要处理Handler中用@ExceptionHandler注解定义的方法。若找不到该注解的话,会找@ControllerAdvice(注解类)中的@ExceptionHandler注解方法
@ExceptionHandler({ArithmeticException.class})
public ModelAndView handleArithmeticException(Exception ex){
System.out.println("出异常了: " + ex);
ModelAndView mv = new ModelAndView("error");
mv.addObject("exception", ex);
return mv;
}
* 1. 在 @ExceptionHandler 方法的入参中可以加入 Exception 类型的参数, 该参数即对应发生的异常对象
* 2. @ExceptionHandler 方法的入参中不能传入 Map. 若希望把异常信息传导页面上, 需要使用 ModelAndView 作为返回值
* 3. @ExceptionHandler 方法标记的异常有优先级的问题.
* 4. @ControllerAdvice: 如果在当前 Handler 中找不到 @ExceptionHandler 方法来出来当前方法出现的异常,
则将去 @ControllerAdvice 标记的类中查找 @ExceptionHandler 标记的方法来处理异常.
-ResponseStatusExceptionResolver
在异常及异常父类中找到@ResponseStatus注解,然后使用这个注解的属性进行处理。
定义一个@ResponseStatus注解修饰的异常类
@ResponseStatus
public class XXXException extends RuntimeException
{...}