• SpringMVC学习笔记五:HandlerExceptionResolver异常处理


    继承HandlerExceptionResolver自定义异常处理器

    控制器ExceptionController.java

    package com.orange.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.orange.exception.NameException;
    import com.orange.exception.PasswordException;
    
    @Controller
    @RequestMapping("/exception")
    public class ExceptionController {
    
        @RequestMapping("handlerException")
        public ModelAndView doException2(String name, String password, ModelAndView mav) throws Exception{
            if(! "admin".equals(name)){
                throw new NameException("用户名错误");
            }
            if(! "admin".equals(password)){
                throw new PasswordException("密码错误");
            }
            mav.addObject("name", name);
            mav.addObject("password", password);
            mav.setViewName("/showException.jsp");
            return mav;
        }
    }

    定义两个异常类型,NameException.Java和PasswordException.java

    package com.orange.exception;
    
    public class NameException extends Exception {
    
        public NameException() {
            super();
        }
    
        public NameException(String message) {
            super(message);
        }
    
        
    }
    package com.orange.exception;
    
    public class PasswordException extends Exception {
    
        public PasswordException() {
            super();
        }
    
        public PasswordException(String message) {
            super(message);
        }
    
        
    }

    自定义异常处理器MyException,当发生异常时,指定跳转的视图jsp

    package com.orange.exception;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    
    import com.fasterxml.jackson.core.sym.Name;
    
    public class MyExceptionResolver implements HandlerExceptionResolver {
    
        @Override
        public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
                Exception ex) {
            ModelAndView mav = new ModelAndView();
            mav.addObject("ex", ex);
            mav.setViewName("/defaultException.jsp");
            
            if(ex instanceof NameException){
                mav.setViewName("/showException.jsp");
            }
            
            if(ex instanceof PasswordException){
                mav.setViewName("/showException.jsp");
            }
            
            return mav;
        }
    
    }

    注册异常处理器

    <!-- 注册异常处理器 -->
        <bean class="com.orange.exception.MyExceptionResolver">

    当发生异常时,跳转的jsp页面

    exception.jsp

    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>    
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <base href="<%=basePath %>">
    <title>Default Page</title>
    </head>
    <body>
    <dir>
        <h3>SimpleMappingExceptionResolver</h3><br>
        <a href="exception/simple">测试</a>
    </dir>
    <hr>
    <div>
        <h3>HandlerExceptionResolver</h3><br>
        <form action="exception/handlerException">
            name: <input type="text" name="name"><br>
            password: <input type="text" name="password"><br>
            <input type="submit" value="submit">
        </form>
    </div>
    </body>
    </html>

    showException.jsp

    <%@ page language="java" contentType="text/html; charset=GBK"
        pageEncoding="GBK"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>    
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
    <base href="<%=basePath %>">
    <title>ShowExceptionPage</title>
    </head>
    <body>
    <div>
        <c:out value="${ex.message }"></c:out>
    </div>
    <div>
        <c:out value="${name }"></c:out><br>
        <c:out value="${password }"></c:out>
    </div>
    </body>
    </html>
  • 相关阅读:
    详细讲解Linux下安装python3(Python3.5.4)
    JavaScript抽象语法树英文对照
    关于MacBook Pro外接4K/60HZ显示器的问题
    Vue组件v-if新渲染的组件不更新
    Vue 子组件与子组件之间传值
    Spring整合CXF步骤,Spring实现webService,spring整合WebService
    CXF错误:Unsupported major.minor version 51.0,java.lang.UnsupportedClassVersionErro
    springMvc中406错误解决,springMvc使用json出现406 (Not Acceptable)
    jquery.validate中使用remote,remote相同值不校验问题解决
    MyBatis返回主键,MyBatis Insert操作返回主键
  • 原文地址:https://www.cnblogs.com/djoker/p/6618825.html
Copyright © 2020-2023  润新知