• SSM-SpringMVC-25:SpringMVC异常顶级之自定义异常解析器


    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

    上篇博客相信大家也看到了,自定义异常,用了SimpleMappingExceptionResolver这个解析器,本次要讲的是自定义异常解析器:

    自己定义的异常解析器,实现了HandlerExceptionResolver,一会再在xml中配置一道,我把需要改或者新建的三处放在前面,下面的与上篇博客的一样(不过我也放上来),看着来把,活学活用

    案例

      1,自定义异常解析器MyHandlerExceptionResolver:

    package cn.dawn.day17selfexceptionresolver.resolver;
    
    import cn.dawn.day17selfexceptionresolver.userexception.UserageException;
    import cn.dawn.day17selfexceptionresolver.userexception.UsernameException;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Created by Dawn on 2018/3/30.
     */
    public class MyHandlerExceptionResolver implements HandlerExceptionResolver {
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
            ModelAndView modelAndView=new ModelAndView();
            /*返回的异常对象*/
            modelAndView.addObject("ex",ex);
            /*判断去那个页面*/
            if(ex instanceof UsernameException){
                modelAndView.setViewName("name");
            }
            if(ex instanceof UserageException){
                modelAndView.setViewName("age");
            }
    
            return modelAndView;
        }
    }

      2.自己的xml大配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
             http://www.springframework.org/schema/context
             http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--包扫描器-->
        <context:component-scan base-package="cn.dawn.day17selfexceptionresolver"></context:component-scan>
        <!--视图解析器-->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/day17/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    
        <!--自己的异常解析器-->
        <bean class="cn.dawn.day17selfexceptionresolver.resolver.MyHandlerExceptionResolver"></bean>
    
    </beans>

      3.讲web.xml中央调度器的上下文配置位置改为你现在这个配置xml

      下面的上篇博客就有,不过我也再放一份,ok

      4.UserageException自定义异常

    package cn.dawn.day17selfexceptionresolver.userexception;
    
    /**
     * Created by Dawn on 2018/3/30.
     */
    public class UserageException extends Exception {
        public UserageException() {
            super();
        }
    
        public UserageException(String message) {
            super(message);
        }
    }

      5.UsernameException自定义异常

    package cn.dawn.day17selfexceptionresolver.userexception;
    
    /**
     * Created by Dawn on 2018/3/30.
     */
    public class UsernameException extends Exception {
        public UsernameException() {
            super();
        }
    
        public UsernameException(String message) {
            super(message);
        }
    }

      6.自定义的处理器和处理方法

    package cn.dawn.day17selfexceptionresolver;
    
    import cn.dawn.day17selfexceptionresolver.userexception.UserageException;
    import cn.dawn.day17selfexceptionresolver.userexception.UsernameException;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * Created by Dawn on 2018/3/28.
     */
    @Controller
    public class ZDYExceptionController {
        @RequestMapping("/zidingyiException")
        public String zidingyiException(String username,Integer userage) throws Exception {
            if(!username.equals("admin")){
                throw new UsernameException("登陆名不正确");
            }
            if(userage<18){
                throw new UserageException("未成年,走开");
            }
            return "success";
        }
    }

      7.jsp页面

        7.1login.jsp

    <%@ page  pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"  %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>登录</h2>
    <form action="${pageContext.request.contextPath}/zidingyiException" method="post">
    
        用户名:<input name="username">
        年龄:<input name="userage">
    
        <input type="submit" value="登录"/>
    </form>
    </body>
    </html>

        7.2success.jsp

    <%@ page language="java" pageEncoding="utf-8" isELIgnored="false" %>
    <html>
    <body>
    <%--<img src="image/1.jpg">--%>
    <h2>Success!</h2>
    </body>
    </html>

        7.3error.jsp

    <%@ page  pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"  %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>ERROR</h2>
    <p>${ex.message}</p>
    服务器被猴子砍了,攻城狮在抢修中,还杀了个程序猿祭天
    </body>
    </html>

        7.4age.jsp

    <%@ page  pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"  %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>年龄错误ERROR</h2>
    <p>${ex.message}</p>
    服务器被猴子砍了,攻城狮在抢修中,还杀了个程序猿祭天
    </body>
    </html>

        7.5name.jsp

    <%@ page  pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" language="java" isELIgnored="false"  %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h2>名字错误ERROR</h2>
    <p>${ex.message}</p>
    服务器被猴子砍了,攻城狮在抢修中,还杀了个程序猿祭天
    </body>
    </html>

      8.启动tomcat,访问login.jsp

  • 相关阅读:
    【codevs1690】开关灯 (线段树 区间修改+区间求和 (标记))
    【codevs1191】数轴染色 (线段树 区间修改+固定区间查询)
    【机器学习】李航 统计学习方法 知识点总结
    【机器学习】生成模型 判别模型
    【机器学习】贝叶斯定理、精准推断、最大似然估计、连续特征参数估计、EM算法
    python queue 讲解
    【tensorflow】 CNN卷积神经网络原理讲解+图片识别应用(附源码)
    URL解析过程
    Python 可迭代对象迭代器生成器的区别
    【Linux】 修改主机名
  • 原文地址:https://www.cnblogs.com/DawnCHENXI/p/8683849.html
Copyright © 2020-2023  润新知