• SpringMVC学习记录六——异常定义和上传图片


    19       异常处理

    19.1      异常处理思路

    系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

             系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

    springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

    19.2      自定义异常类

    对不同的异常类型定义异常类,继承Exception。

     

    19.3      全局异常处理器

    思路:

             系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

             全局异常处理器处理思路:

                      解析出异常类型

                      如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

                      如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

    springmvc提供一个HandlerExceptionResolver接口

    @Override
       public ModelAndView resolveException(HttpServletRequest request,
    
             HttpServletResponse response, Object handler, Exception ex) {
    
          //handler就是处理器适配器要执行Handler对象(只有method)
    //    解析出异常类型
    
    //    如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示
    
    //    String message = null;
    
    //    if(ex instanceof CustomException){
    
    //       message = ((CustomException)ex).getMessage();
    
    //    }else{
    
    ////        如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
    
    //       message="未知错误";
    
    //    }
          //上边代码变为
    
          CustomException customException = null;
    
          if(ex instanceof CustomException){
    
             customException = (CustomException)ex;
    
          }else{
    
             customException = new CustomException("未知错误");
    
          }
          //错误信息
          String message = customException.getMessage();
          ModelAndView modelAndView = new ModelAndView();
          //将错误信息传到页面
    
          modelAndView.addObject("message", message);
          //指向错误页面
          modelAndView.setViewName("error");
          return modelAndView;
       }

    19.4      错误页面

     

    19.5      在springmvc.xml配置全局异常处理器

     

    19.6      异常测试

    在controller、service、dao中任意一处需要手动抛出异常。

    如果是程序中手动抛出的异常,在错误页面中显示自定义的异常信息,如果不是手动抛出异常说明是一个运行时异常,在错误页面只显示“未知错误”。

    在商品修改的controller方法中抛出异常 .

     

    在service接口中抛出异常:

     

    如果与业务功能相关的异常,建议在service中抛出异常。

    与业务功能没有关系的异常,建议在controller中抛出。

    上边的功能,建议在service中抛出异常。

    20       上传图片

    20.1      需求

    在修改商品页面,添加上传商品图片功能。

    20.2      springmvc中对多部件类型解析

    在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析。

    在springmvc.xml中配置multipart类型解析器。

     

    20.3      加入上传图片的jar

    上边的解析内部使用下边的jar进行图片上传。

     

    20.4      创建图片虚拟 目录 存储图片

    通过图形界面配置:

     

    也可以直接修改tomcat的配置:

    在conf/server.xml文件,添加虚拟 目录 :

    注意:在图片虚拟目录 中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建。

    20.5      上传图片代码

    2.5.1     页面

     

    20.5.2     controller方法

    修改:商品修改controller方法:

     

    json数据

  • 相关阅读:
    一文让你明白Redis持久化
    spring-data-redis 2.0 的使用
    中间自适应布局的5种解法
    php实现只需要一个QQ号就可以获得用户信息
    基于LINUX下的进程管理问题
    【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
    初码-爬虫系列-文章目录
    初码-阿里云系列-文章目录
    初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
    初码-Azure系列-记一次MySQL数据库向Azure的迁移
  • 原文地址:https://www.cnblogs.com/PengChengLi/p/8505179.html
Copyright © 2020-2023  润新知