拦截器,Spring中异常处理:

拦截器:

拦截器 就是对 之前过滤器的一个封装 功能和之前的过滤器类似 比如有 身份认证 登录检查
资源的加密访问 编码设置等功能。
拦截器在Spring 中 需要实现 HandlerInterceptor 接口

HandlerInterceptor 接口介绍:

preHandle 在HandlerMapping 之后 控制器之前 返回 布尔值类型 如果返回 true
则代表继续后续逻辑调用 如果返回false 则请求被拦截。
postHandle 控制器处理之后 视图处理器之前
afterCompletion 视图处理器之后 响应之前

拦截器的使用步骤:

  1. 搭建一个基于标注的 spring MVC 完成基本的登录功能 最起码有 toLogin.do
  2. 编写一个拦截器类 实现HandlerInterceptor 接口 覆盖接口方法
  3. 在Spring 配置文件中配置拦截器
       大体需要配置 拦截的路径   不拦截的路径    拦截器对象 
    
  4. 测试功能

Spring 中的异常处理:

  1. 全局异常处理 —- 系统提供的异常处理器 SimpleMappingExceptionResolver
    指定对应的异常 可以跳转到 对应的页面
    <!--  配置一个 系统提供的异常处理器  什么样对应什么样的页面 --> 
    <bean  id="exceptionResolver"  
       class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
       <property name="exceptionMappings">
           <props>
               <prop key="java.lang.Exception">error2</prop>
               <prop key="java.lang.RuntimeException">error</prop> 
           </props>
       </property>
    </bean>
    
  2. 全局异常处理 ——- 自定义异常处理器
    实现 HandlerExceptionResolver 并且在Spring 容器中创建自定义异常处理器对象
    `
    @Controller
    public class MyExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request,

         HttpServletResponse response, Object method,
         Exception e) {
     // 出现什么样的异常 就跳转到对应的页面 
     ModelAndView  mav  = new  ModelAndView();
     if(e  instanceof  RuntimeException) {
          mav.setViewName("error");
     }else if(e instanceof  Exception) {
          mav.setViewName("error2");
     }
     return mav;
    

    }

}

3. 局部异常处理 ----- 只处理具体的一个控制器抛出的异常  

@ExceptionHandler
public String 方法名(Exception e){
return “错误页面的名字”;
}
`
文件上传:

  1. 编写一个文件上传的页面
    form 表单的method=”post” enctype=”multipart/form-data”
    form 表单中要有 type=”file” 的组件
  2. 编写一个控制器 用来获取文件数据 并将文件数据写入服务器的磁盘中
    真正完成文件上传 需要依赖于文件解析器 —- 注意文件解析器依赖于文件上传的jar包 还有这个解析器的
    id必须是 multipartResolver