• MVC异常处理


    处理局部异常

      控制器:

    @Controller
    @RequestMapping("/ex")
    public class ExceptionController {
    
        @ExceptionHandler
        public ModelAndView exceptionHandler(Exception ex){
            ModelAndView mv=new ModelAndView();
            //保存异常变量
            mv.addObject("ex",ex);
            //添加错误页面
            mv.setViewName("error");
            System.out.println("出现了异常!");
            return mv;
        }
    View Code
    @RequestMapping("/hello")       //设置处理器方法与用户请求的url之间的映射关系@WebServlet
    public String toIndex() throws Exception {
        if (1==1){
            throw new Exception("我是异常哈哈哈哈");
        }
        return "index";
    }
    View Code

    页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
    <%--<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>--%>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%--<c:forEach items="${error}" var="item">
        <span>${item.defaultMessage}</span>
    </c:forEach>--%>
    ${error.defaultMessage}
    
    </body>
    </html>
    View Code

      结果

    处理全局异常

      ExceptionHandler类:

    /*全局异常处理*/
    @ControllerAdvice
    public class ExceptionHandler {
    
        @org.springframework.web.bind.annotation.ExceptionHandler
        public ModelAndView except(Exception e){
            String message = e.getMessage();    //获取异常信息
            ModelAndView mv=new ModelAndView("404");
            mv.addObject("message",message);
            return mv;
        }
    }
    View Code

      控制器:

    @RequestMapping("/hello")       //设置处理器方法与用户请求的url之间的映射关系@WebServlet
    public String toIndex() throws Exception {
        if (1==1){
            throw new Exception("我是异常哈哈哈哈");
        }
        return "index";
    }
    View Code

    自定义异常

      spring-mvc文件配置:

    <!--异常处理-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error"></property>
        <property name="exceptionAttribute" value="ex"></property>
    </bean>
    View Code

      控制器:

    @RequestMapping("/getex")
    @ResponseBody
    public String getex(){
        int num=5/0;
        return "index";
    }
    View Code

      结果:

    自定义异常类

      spring-mvc文件配置:

    <!--异常处理-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="error"></property>
        <property name="exceptionAttribute" value="ex"></property>
        <property name="exceptionMappings">
            <props>
                <prop key="com.cmy.exception.UserName">UserName</prop>
                <prop key="com.cmy.exception.Password">Password</prop>
            </props>
        </property>
    </bean>
    View Code

      控制器:

    @RequestMapping("/getex01")
    public String getex01(String userName,String password) throws Exception {
        if (!userName.equals("admin")){
            throw new Exception("用戶民不正確!!!");
        }
        if (!password.equals("admin")){
            throw  new Exception("密碼不正確!!!");
        }
        return "index";
    }
    View Code

      UserName.class异常类:

    package com.cmy.exception;
    
    public class UserName extends Exception {
    
        public UserName() {
        }
    
        public UserName(String message) {
            super(message);
        }
    }
    View Code

      Password.class异常类:

    package com.cmy.exception;
    
    //自定义异常类
    public class Password extends Exception {
    
        public Password() {
        }
    
        public Password(String message) {
            super(message);
        }
    }
    View Code

      页面:

      结果:

    自定义异常类实现(HandelExceptionResolver接口)

      spring-mvc.xml文件配置:

    <bean class="com.cmy.exception.HandelException">
    View Code

      HandelException.class异常类:

    public class HandelException implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
            ModelAndView mv=new ModelAndView();
            mv.addObject("ex",e);
            mv.setViewName("error");
            if (e instanceof  UserName){
                mv.setViewName("UserName");
            }
            if (e instanceof  Password){
                mv.setViewName("Password");
            }
    
            return mv;
        }
    }
    View Code

      控制器:

    @RequestMapping("/getex01")
    public String getex01(String userName,String password) throws Exception {
        if (!userName.equals("admin")){
            throw new Exception("用戶民不正確!!!");
        }
        if (!password.equals("admin")){
            throw  new Exception("密碼不正確!!!");
        }
        return "index";
    }
    View Code
  • 相关阅读:
    搭建一个redis高可用系统
    从“如何设计用户超过1亿的应用”说起----数据库调优实战
    单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
    信息安全系统和安全体系
    敏捷开发系列之旅 第五站(不一样的RUP统一软件开发过程)
    微服务理论与实践(三)-微服务架构的基本能力和优缺点
    学习“CC攻击”
    查看IIS错误日志
    ISNULL函数
    IE6/7下Select控件Display属性无效解决办法
  • 原文地址:https://www.cnblogs.com/wnwn/p/11834295.html
Copyright © 2020-2023  润新知