7. spring MVC 拦截器组件,异常处理,文件上传

Spring MVC拦截器组件

拦截器组件

拦截器组件实现HandlerInterceptor接口。接口中有3个方法,分别在处理器执行前、执行后、请求处理完毕响应输出前执行。

案例:登录检查

  1. 编写一个拦截器组件,实现HandlerInterceptor接口,按需求在方法中添加逻辑

    public class CheckInterceptor implements HandlerInterceptor{
    
        //postHandle和afterCompletion省略
    
        public boolean preHandle(
            HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
            //检查是否登录,session是否有指定信息
            HttpSession session = request.getSession();
            Object user = session.getAttribute("user");
            if(user != null){//有登录信息
                return true;
            }else{
                response.sendRedirect("/spring_05/login.do");
                return false;
            }
        }
    
    }
    
  2. 在spring中配置拦截器

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/book/delete.do"/>
            <mvc:mapping path="/book/modify.do"/>
            <bean class="cn.xdl.interceptor.CheckInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    

案例:请求处理时间监控

参考案例代码

Spring MVC异常处理

全局异常处理

当流程调用Controller、Service、Dao组件抛出异常后,SpringMVC会调用ExceptionResolver异常处理器处理,异常处理器可以使用内置的,也可以自定义。

  1. 内置异常处理器SimpleMappingExceptionResolver

    该组件只需要在spring配置下即可

    <bean id="handleException" 
    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props>
            <prop key="java.lang.Exception">error</prop>
        </props>
    </property>
    

    所有Controller方法抛出异常都会触发该异常处理器,跳转到error.jsp

  2. 自定义ExceptionResolver组件

    编写实现类,实现HandlerExceptionResolver接口

    public class MyExceptionResolver implements HandlerExceptionResolver{
        //注入异常类型和视图名
        private Properties exceptionMappings;
        //set注入方法
        public void setExceptionMappings(Properties exceptionMappings) {
            this.exceptionMappings = exceptionMappings;
        }
    
        @Override
        public ModelAndView resolveException(
            HttpServletRequest request, 
            HttpServletResponse response, 
            Object arg2,
            Exception ex) {
            ModelAndView mav = new ModelAndView();
            //根据ex类型封装成对应ModelAndView
            String className = ex.getClass().getName();
            String viewName = exceptionMappings.getProperty(className);
            if(viewName == null){
                viewName = "error";
            }
            System.out.println("className:"+className);
            System.out.println("viewName:"+viewName);
            mav.setViewName(viewName);
            return mav;
        }
    
    }
    

    配置异常处理器

    <bean id="handleException" 
        class="cn.xdl.exception.MyExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="java.lang.NumberFormatException">error</prop>
            </props>
        </property>
    </bean>
    

局部异常处理

ExceptionResolver都是全局范围处理,如果某个Controller异常需要特殊处理,可以使用@ExceptionHandler局部处理

@ExceptionHandler
public ModelAndView handlerException(Exception e){...}

@ExceptionHandler
public String handlerException(Exception e){...}

SpringMVC文件上传

Spring框架提供了一个CommonsMultipartResolver组件,可以调用commons-fileupload.jar工具包将请求中的上文件流信息解析出来保存到服务器某个目录下。

使用方法如下:

  1. 在spring配置CommonsMultipartResolver组件

    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>
    
  2. 导入commons-fileupload.jar或commons-io.jar

利用上传处理器执行上传功能,步骤如下:

  1. JSP页面表单,method必须为post;enctype必须为multipart/form-data.

  2. Controller方法参数为MultipartFile类型接收。

    由于multipartResolver解析处理,所以Controller方法才能直接用MultipartFile接收文件对象。

  3. 图片存储(存储路径、存储文件名)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值