zoukankan      html  css  js  c++  java
  • SpringMVC由浅入深day02_5数据回显_6异常处理器

    数据回显

      5.1 什么数据回显

    表单提交失败需要再回到表单页面重新填写,原来提交的数据需要重新在页面上显示。

      5.2 pojo数据回显方法

    1、springmvc默认对pojo数据进行回显。

    pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)

    使用@ModelAttribute指定pojo回显到页面在request中的key

    jsp页面:

    页面中的从“items”中取数据。

    2、@ModelAttribute还可以将方法的返回值传到页面

    如果key不是pojo的类名(首字母小写),可以使用@ModelAttribute完成数据回显。

    在商品查询列表页面,通过商品类型查询商品信息。

    在controller中定义商品类型查询方法,最终将商品类型传到页面。

    页面上可以得到itemTypes数据。

    3、使用最简单方法使用model,可以不用@ModelAttribute

    页面:

      5.3 简单类型数据回显

    对于简单数据类型,如:IntegerString、Float等使用Model将传入的参数再放到request域实现显示。

    使用最简单方法使用model

    model.addAttribute("id", id);

    异常处理

    springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。

      6.1 异常处理思路

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

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

     

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

      6.2 自定义异常类

    为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

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

      6.3 全局异常处理器

    思路:

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

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

        解析出异常类型

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

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

    springmvc提供一个HandlerExceptionResolver接口

    CustomExceptionResolver.java

    package cn.itcast.ssm.exception;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    /**
     * 全局异常处理器
     * @author yejin
     */
    public class CustomExceptionResolver implements HandlerExceptionResolver{
        
        /**
         * ex 系统抛出的异常
         */
        @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;
        }
    }

      6.4 错误页面

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

      6.6 异常测试

    修改商品信息,id输入错误提示商品信息不存在。

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

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

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

    在service接口中抛出异常:

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

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

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

  • 相关阅读:
    linux mysql添加用户
    linux mysql为root用户初始化密码和改变root密码
    linux pts/0的含义
    mysql查看表的结构
    linux踢人命令 pkill踢人用法
    linux查看在线用户 who命令参数及用法
    linux mysql数据库安装(tar.gz)
    vue app外卖(5) 使用swiper 进行图片轮播
    element-UI 点击一行,背景色变化
    vue 外卖app(3) 利用slot分发内容
  • 原文地址:https://www.cnblogs.com/justdoitba/p/8343342.html
Copyright © 2011-2022 走看看