小工具知识网

当前位置: 首页 > 行业知识 > SpringMVC进阶(自定义拦截器以及异常处理)

行业知识

SpringMVC进阶(自定义拦截器以及异常处理)

2026-11-02 22:30:48 来源:互联网转载

文章目录

    • 1.自定义拦截器
        • 1.基本介绍
          • 1.说明
          • 2.自定义拦截器的三个方法
          • 3.流程图
          • 2.快速入门
            • 1.Myinterceptor01.java
            • 2.FurnHandler.java
            • 3.springDispatcherServlet-servlet.xml配置拦截器
            • 4.单元测试
            • 3.拦截特定路径
              • 1.拦截指定路径
              • 2.通配符配置路径
              • 4.细节说明
              • 5.多个拦截器
                • 1.执行流程图
                • 2.应用实例
                  • 1.FurnHandler.java目标方法
                  • 2.拦截器
                  • 3.结果展示
                  • 2.异常处理
                      • 1.基本介绍
                      • 2.局部异常处理器
                        • 1.需求分析
                        • 2.抛出问题
                          • 1.MyExceptionHandler.java
                          • 2.不处理异常则交给tomcat处理
                          • 3.局部异常实例
                            • 1.MyExceptionHandler.java
                            • 2.exception_mes.jsp
                            • 3.结果展示
                            • 3.全局异常处理器
                            • 1.基本介绍
                            • 2.全局异常实例
                                • 1.MyGlobalException.java
                                • 2.global_exception.jsp
                                • 3.结果展示
                                • 3.细节说明
                                  • 1.局部异常优先级高于全局异常
                                  • 2.处理异常机制
                                  • 4.自定义异常
                                    • 1.基本介绍
                                    • 2.自定义异常应用实例
                                      • 1.SelfException.java
                                      • 2.selfex.java
                                      • 3.结果展示
                                      • 3.可以使用有参构造,抛出异常交给异常处理器接管
                                        • 1.SelfException.java
                                        • 2.selfex.java抛出自定义异常并制定message
                                        • 3.MyGlobalException.java捕获自定义异常
                                        • 4.结果展示
                                        • 5.统一异常处理器
                                          • 1.基本介绍
                                          • 2.需求分析
                                          • 3.具体实现
                                            • 1.MyExceptionHandler.java抛出数组越界异常
                                            • 2.springDispatcherServlet-servlet.xml配置统一异常处理器
                                            • 3.arrEx.jsp异常处理页面
                                            • 4.结果展示
                                            • 6.对未知异常进行统一处理
                                              • 1.具体实现
                                                • 1.MyExceptionHandler.java抛出异常
                                                • 2.springDispatcherServlet-servlet.xml修改统一异常处理器
                                                • 3.allEx.jsp所有未知异常的处理
                                                • 4.结果展示
                                                • 7.异常处理的优先级
                                                  • 1.局部异常处理器
                                                  • 2.全局异常处理器
                                                  • 3.统一异常处理器
                                                  • 4.Tomcat默认机制
                                                  • 3.springMVC阶段的配置文件
                                                      • 1.springDispatcherServlet-servlet.xml
                                                      • 2.web.xml

                                                        1.自定义拦截器

                                                        1.基本介绍
                                                        1.说明
                                                        2.自定义拦截器的三个方法
                                                        3.流程图
                                                        2.快速入门
                                                        1.Myinterceptor01.java
                                                        package com.sun.web.interceptor;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @author 孙显圣 * @version 1.0 */@Component //注入容器public class Myinterceptor01 implements HandlerInterceptor {    /**     * 在目标方法执行前被调用,如果返回false,目标方法不会被执行     *     * @param request     * @param response     * @param handler     * @return     * @throws Exception     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        System.out.println("preHandle");        return true;    }    /**     * 在目标方法执行后被调用,可以获取目标方法返回的ModelAndView,可以根据业务进行二次处理     *     * @param request     * @param response     * @param handler     * @param modelAndView     * @throws Exception     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {        System.out.println("postHandle");    }    /**     * 在渲染之后会被调用,可以进行资源清理工作     *     * @param request     * @param response     * @param handler     * @param ex     * @throws Exception     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        System.out.println("afterCompletion");    }}
                                                        2.FurnHandler.java
                                                        package com.sun.web.interceptor;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class FurnHandler {    @RequestMapping("/hi")    public String hi() {        System.out.println("hi方法被调用");        return "success";    }    @RequestMapping("/hello")    public String hello() {        System.out.println("hello方法被调用");        return "success";    }}
                                                        3.springDispatcherServlet-servlet.xml配置拦截器
                                                                                    
                                                        4.单元测试
                                                        3.拦截特定路径
                                                        1.拦截指定路径
                                                                                                                    
                                                        2.通配符配置路径
                                                                                                                                                        
                                                        4.细节说明
                                                        5.多个拦截器
                                                        1.执行流程图
                                                        2.应用实例
                                                        1.FurnHandler.java目标方法
                                                            @RequestMapping("/topic")    public String topic() {        System.out.println("topic执行!");        return "success";    }
                                                        2.拦截器
                                                            @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        //只要参数中有topic是topic就直接响应        String topic = request.getParameter("topic");        if (topic.equals("topic")) {            response.setContentType("text/html;charset=utf-8");            response.getWriter().write("

                                                        请不要乱说话!!

                                                        "); } //后面的不再执行 return false; }
                                                        3.结果展示

                                                        2.异常处理

                                                        1.基本介绍
                                                        2.局部异常处理器
                                                        1.需求分析
                                                        2.抛出问题
                                                        1.MyExceptionHandler.java
                                                        package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class MyExceptionHandler {    @RequestMapping("/getNum/{num}")    public String getNUm(@PathVariable("num") Integer num) {        //这里如果传进来的是0则会出现异常        System.out.println(10 / num);        return "success";    }}
                                                        2.不处理异常则交给tomcat处理
                                                        3.局部异常实例
                                                        1.MyExceptionHandler.java
                                                        package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class MyExceptionHandler {    @RequestMapping("/getNum/{num}")    public String getNUm(@PathVariable("num") Integer num) {        //这里如果传进来的是0则会出现异常        System.out.println(10 / num);        return "success";    }    //处理异常    @ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组,可以接受多个异常类型    public String exceptionHandler(Exception ex, HttpServletRequest request) { //当出现异常时,异常会自动封装到ex中(数据绑定)        System.out.println("异常的信息=" + ex.getMessage());        //可以将异常信息请求转发给下一个页面        request.setAttribute("reason", ex.getMessage());        return "exception_mes";    }}
                                                        2.exception_mes.jsp
                                                            Title

                                                        出现异常

                                                        异常信息是${requestScope.reason}

                                                        3.结果展示
                                                        3.全局异常处理器
                                                        1.基本介绍
                                                        2.全局异常实例
                                                        1.MyGlobalException.java
                                                        package com.sun.web.exception;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import javax.servlet.http.HttpServletRequest;/** * @author 孙显圣 * @version 1.0 */@ControllerAdvice //表示这个是处理全局异常的类public class MyGlobalException {    @ExceptionHandler(ArithmeticException.class) //这个是处理算数异常的算数异常处理器    public String globalException(Exception ex, HttpServletRequest request) {        System.out.println("全局异常信息是=" + ex.getMessage());        //将全局异常信息请求转发        request.setAttribute("reason", ex.getMessage());        return "global_exception";    }}
                                                        2.global_exception.jsp
                                                            Title

                                                        出现异常

                                                        全局异常信息是${requestScope.reason}

                                                        3.结果展示
                                                        3.细节说明
                                                        1.局部异常优先级高于全局异常
                                                        2.处理异常机制
                                                        • 先从发生异常的方法所在的类中查找有@ExceptionHandler 注解的方法,如果异常不匹配则进行下一步
                                                        • 从有@ControllerAdvice 注解的类查找有@ExceptionHandler 注解的方法,如果匹配异常则处理,无法匹配则交给tomcat处理
                                                          4.自定义异常
                                                          1.基本介绍
                                                          2.自定义异常应用实例
                                                          1.SelfException.java
                                                          package com.sun.web.exception;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.ResponseStatus;/** * @author 孙显圣 * @version 1.0 *///reason指的是返回的异常原因信息,value指的是返回的响应状态@ResponseStatus(reason = "年龄需要在1-120之间", value = HttpStatus.BAD_REQUEST)public class SelfException extends RuntimeException{}
                                                          2.selfex.java
                                                          package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class selfex {    @RequestMapping("/selfex")    public void ex() {        throw new SelfException();    }}
                                                          3.结果展示
                                                          3.可以使用有参构造,抛出异常交给异常处理器接管
                                                          1.SelfException.java
                                                          package com.sun.web.exception;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.ResponseStatus;/** * @author 孙显圣 * @version 1.0 *///reason指的是返回的异常原因信息,value指的是返回的响应状态@ResponseStatus(reason = "年龄需要在1-120之间", value = HttpStatus.BAD_REQUEST) //注意这个是给tomcat看的public class SelfException extends RuntimeException{    public SelfException() {    }    //这样就可以从全局异常里获取message了    public SelfException(String message) {        super(message);    }}
                                                          2.selfex.java抛出自定义异常并制定message
                                                          package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class selfex {    @RequestMapping("/selfex")    public void ex() {        throw new SelfException("年龄需要在1-100"); //指定message    }}
                                                          3.MyGlobalException.java捕获自定义异常
                                                          package com.sun.web.exception;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import javax.servlet.http.HttpServletRequest;/** * @author 孙显圣 * @version 1.0 */@ControllerAdvice //表示这个是处理全局异常的类public class MyGlobalException {    //处理自定义异常    @ExceptionHandler(SelfException.class)    public String selfex(Exception ex, HttpServletRequest request) {        //将全局异常信息请求转发        request.setAttribute("reason", ex.getMessage());        return "global_exception";    }}
                                                          4.结果展示
                                                          5.统一异常处理器
                                                          1.基本介绍
                                                          2.需求分析
                                                          3.具体实现
                                                          1.MyExceptionHandler.java抛出数组越界异常
                                                          package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class MyExceptionHandler {    //抛出数组越界异常,局部异常处理器和全局异常处理器都没有处理,则会交给统一异常处理器来处理    @RequestMapping("/arr")    public String array() {        int[] ints = {1, 2, 3};        System.out.println(ints[1222]); //交给统一异常处理器来处理        return "success";    }}
                                                          2.springDispatcherServlet-servlet.xml配置统一异常处理器
                                                                                                                      arrEx                        
                                                          3.arrEx.jsp异常处理页面
                                                              Title

                                                          数组越界异常

                                                          4.结果展示
                                                          6.对未知异常进行统一处理
                                                          1.具体实现
                                                          1.MyExceptionHandler.java抛出异常
                                                          package com.sun.web.exception;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * @author 孙显圣 * @version 1.0 */@Controllerpublic class MyExceptionHandler {    //没有归类的异常    @RequestMapping("/test")    public String test() {        String str = "hello";        char c = str.charAt(10); //这里会抛出异常        return "success";    }}
                                                          2.springDispatcherServlet-servlet.xml修改统一异常处理器
                                                                                                                      arrEx                allEx                        
                                                          3.allEx.jsp所有未知异常的处理
                                                              Title

                                                          所有未知异常的处理界面

                                                          4.结果展示
                                                          7.异常处理的优先级
                                                          1.局部异常处理器
                                                          • 方法上加@ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组,可以接受多个异常类型
                                                            2.全局异常处理器
                                                            • 类上加@ControllerAdvice //表示这个是处理全局异常的类
                                                            • 方法上加@ExceptionHandler({ArithmeticException.class, NullPointerException.class}) //参数是一个数组,可以接受多个异常类型
                                                              3.统一异常处理器
                                                              • 匹配方式是匹配尽可能具体的类型,跟配置的顺序无关
                                                              • 在Spring配置文件中配置
                                                                                                                            arrEx                allEx                        
                                                                4.Tomcat默认机制

                                                                3.springMVC阶段的配置文件

                                                                1.springDispatcherServlet-servlet.xml
                                                                                                                                                                                                                                                                                    arrEx                allEx                                            
                                                                2.web.xml
                                                                                CharacterEncodingFilter        org.springframework.web.filter.CharacterEncodingFilter                            encoding            utf-8                        CharacterEncodingFilter        /*                                                                HiddenHttpMethodFilter        org.springframework.web.filter.HiddenHttpMethodFilter                    HiddenHttpMethodFilter        /*                        springDispatcherServlet        org.springframework.web.servlet.DispatcherServlet                        1                springDispatcherServlet                /    

上一篇:服务器怎么上传?

下一篇:怎么升级端口服务器?