SpeingMVC框架(三)

目录

五、响应数据与结果视图

1、返回值分类

2、springmvc的请求转发和重定向

六、异常处理

1、处理思路

2、自定义异常处理器

七、springmvc中的拦截器

1、拦截器概述

2、自定义拦截器步骤


五、响应数据与结果视图

1、返回值分类

返回String:Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

返回值是void:如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。可以使用请求转发或者重定向跳转到指定的页面

返回值是ModelAndView对象:ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图

2、springmvc的请求转发和重定向

forward请求转发

java 复制代码
@RequestMapping("/save4.do")
    public String save4(){
        System.out.println("执行了...");
        return "forward:/pages/suc.jsp";
    }

redirect重定向

java 复制代码
 @RequestMapping("/save5.do")
    public String save5(){
        System.out.println("执行了...");
        return "redirect:/pages/suc.jsp";
    }

六、异常处理

1、处理思路

Controller调用service,service调用dao,异常都是向上抛出的,最终有DispatcherServlet找异常处理器进行异常的处理。

2、自定义异常处理器

java 复制代码
public class SysExceptionResolver implements HandlerExceptionResolver {
​
    /**
     * 程序出现了异常,调用异常处理器中的方法
     * @param o
     * @param e
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
        // 在控制台打印异常的信息
        e.printStackTrace();
        // 做强转
        SysException exception = null;
        // 判断
        if(e instanceof SysException){
            exception = (SysException)e;
        }else{
            exception = new SysException("系统正在维护,请联系管理员");
        }
​
        // 存入异常提示信息
        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg",e.getMessage());
        // 设置跳转的页面
        mv.setViewName("error");
        return mv;
    }
​
}
​

七、springmvc中的拦截器

  1. 底层实现:过滤器是基于函数回调的,而拦截器是基于Java的反射机制(动态代理)实现的。

1、拦截器概述

  1. SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。
  2. 可以定义拦截器链,连接器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。
  3. 拦截器和过滤器的功能比较类似,有区别
    1. 过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。
    2. 拦截器是SpringMVC框架独有的。
    3. 过滤器配置了/*,可以拦截任何资源。
    4. 拦截器只会对控制器中的方法进行拦截。
  4. 拦截器也是AOP思想的一种实现方式
  5. 想要自定义拦截器,需要实现HandlerInterceptor接口。

2、自定义拦截器步骤

创建类,创建拦截器类 实现HandlerInterceptor接口,重写需要的方法,修改配置信息在springmvc.xml中配置拦截器类
拦截器类

java 复制代码
public class MyInterceptor2 implements HandlerInterceptor{
​
    /**
     * 拦截controller中方法。放行了,执行controller中方法。
     * return true 方向
     * return 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方法执行了...");
        // 手动跳转页面
        // request.getRequestDispatcher("/index.jsp").forward(request,response);
        // 拦截,不放行
        //return false;
        // 放行
        return true;
    }
​
}
​

配置信息

XML 复制代码
<!--配置拦截器们-->
    <mvc:interceptors>
        <!--配置拦截器-->
        <mvc:interceptor>
            <!--该拦截器拦截哪些资源-->
            <mvc:mapping path="/dept/**"/>
            <!--哪些资源不想拦截
            <mvc:exclude-mapping path="" />
            -->
            <!--拦截器对象-->
            <bean class="com.qcbyjy.demo4.MyInterceptor2" />
        </mvc:interceptor>
    </mvc:interceptors>

3、HandlerInterceptor接口中的方法

  1. preHandle方法是controller方法执行前拦截的方法
    1. 可以使用request或者response跳转到指定的页面
    2. return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法。
    3. return false不放行,不会执行controller中的方法。
  2. postHandle是controller方法执行后执行的方法,在JSP视图执行前。
    1. 可以使用request或者response跳转到指定的页面
    2. 如果指定了跳转的页面,那么controller方法跳转的页面将不会显示。
  3. postHandle方法是在JSP执行后执行
  4. request或者response不能再跳转页面了
    4、配置多个拦截器
XML 复制代码
<!--配置拦截器们-->
    <mvc:interceptors>
        <!--配置拦截器-->
        <mvc:interceptor>
            <!--该拦截器拦截哪些资源-->
            <mvc:mapping path="/dept/**"/>
            <!--哪些资源不想拦截
            <mvc:exclude-mapping path="" />
            -->
            <!--拦截器对象-->
            <bean class="com.qcbyjy.demo4.MyInterceptor2" />
        </mvc:interceptor>
​
        <!--配置拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.qcbyjy.demo4.MyInterceptor3" />
        </mvc:interceptor>
    </mvc:interceptors>
相关推荐
计算机-秋大田20 分钟前
基于微信小程序的游泳馆管理系统设计与实现(LW+源码+讲解)
java·微信小程序·小程序·课程设计
计算机-秋大田24 分钟前
基于微信小程序的书籍销售系统设计与实现(LW+源码+讲解)
java·后端·微信小程序·小程序·课程设计
V+zmm1013424 分钟前
学生资助在线管理软件开发微信小程序ssm+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
毋若成44 分钟前
【搭建JavaEE】(2)Tomcat安装配置和第一个JavaEE程序
java·java-ee·tomcat
daily_23331 小时前
c++领域展开第十二幕——类和对象(STL简介——简单了解STL)超详细!!!!
开发语言·c++
上位机付工1 小时前
C#轻松实现ModbusTCP服务器接口
服务器·开发语言·c#·modbustcp服务器
SomeB1oody1 小时前
【Rust自学】12.7. 使用环境变量
开发语言·后端·重构·rust
Future_yzx1 小时前
Java爬虫——使用Spark进行数据清晰
java·爬虫·spark
clp200311012 小时前
【Javascript Day8】计算机存储方式、方法定义方式、作用域、预解析、对象
开发语言·javascript·ecmascript
self-abasedAshuai2 小时前
C# Winform:项目引入SunnyUI后,显示模糊
开发语言·c#