• SpringMVC自定义视图解析器


    /**
    * 使用View接口完成请求转发|重定向
    * 解释:
    * SpringMVC的官方,提供了一个叫做View的接口,告诉开发人员
    * DispatcherServlet底层会调用View接口的实例化对象中的逻辑方法
    * 来完成对应的请求转发和重定向
    * 使用:
    * 1. 单元方法的返回值为View接口类型
    * 2.真实return的为View接口的实例化对象(视图解析器)。
    * 官方提供的实现了View接口的视图解析器:
    * InternalResourceView:请求转发
    * RedirectView:重定向
    * @return
    */

     @RequestMapping("demoView")
       public View demoView(HttpServletRequest request){
           //处理请求
            System.out.println("MyController.demoView:View接口实例化对象完成请求转发|重定向");
           //响应结果
                //请求转发
                    //return  new InternalResourceView("/req.jsp");
                //重定向
                    return new RedirectView(request.getContextPath()+"/redirect.jsp");
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    /**
     * SpringMVC视图解析器升级:ModelAndView
     *  问题:
     *      在原有的View接口的视图解析器中需要自己在单元方法中根据响应方式
     *      来创建对应的视图解析器对象返回给DispatcherServlet使用,过于麻烦。
     *  解决:
     *      从根据响应方式的不同创建不同的视图解析器对象,变为只创建一个
     *      视图解析器对象,该对象内部自动根据参数来实现请求转发或者重定向。
     *  实现:
     *      ModelAndView
     *   注意:
     *      升级后也就意味着DispatcherServlet使用ModelAndView来接收
     *      单元方法的返回值,为了兼容早期版本,让ModelAndView可以接收
     *      View接口的实例化对象。
     *  特点:
     *    ModelAndView对象是Model和View对象的结合体。既可以作为视图解析器使用
     *    又可以作为数据流转的载体使用。
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    @RequestMapping("md")
    public ModelAndView demoModelAndView(){
        //处理请求
        System.out.println("MyController.demoModelAndView:ModelAndView视图解析器");
        //响应结果
            //创建ModelAndView对象
            ModelAndView modelAndView=new ModelAndView();
            modelAndView.addObject("str","我是流转的数据");
            //请求转发
                //modelAndView.setViewName("forward:/mdReq.jsp");
           //重定向
                modelAndView.setViewName("redirect:/mdRedirect.jsp");
            return modelAndView;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    /**
     * SpringMVC视图解析器再次升级:
     *  问题:
     *      在使用了ModelAndView对象后,已经很爽了。但是在单元方法中
     *      我们还需要创建ModelAndView对象并将请求转发或者重定向的
     *      路径存储进入,返回给DispatcherServlet使用,而我们真正
     *      想写的是资源路径以及响应方式
     *  解决:
     *      我们在单元方法中直接返回字符串资源路径及其响应方式关键字。
     *      由DispatcherServlet底层帮我们创建ModelAndView来接收
     *      单元方法的返回值。
     *  注意:
     *      虽然我们在单元方法中直接返回的字符串数据,但是DispatcherServlet
     *      并不是直接使用字符串数据而是仍然调用ModelAndView视图解析器完成请求转发或者重定向。
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    @RequestMapping("demoString")
    public String demoString(){
        //处理请求
        System.out.println("目前的请求转发或者重定向的方式");
        //响应结果
            //请求转发
                //return "forward:/req.jsp";
            //重定向
                return "redirect:/redirect.jsp";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    自定义视图解析器

    准备步骤
    在这里插入图片描述
    先将lib中的web.xml删掉,重新创建一个,接着创建springmvc.xml文件在src中。

    使用:
    1.在springmvc.xml文件中进行配置
    2.在单元房法中按照指定的格式返回资源路径

    在springmvc.xml中
    在这里插入图片描述
    在这里插入图片描述
    前提:只在请求转发中有效。
    当我们return后面没有加forword:,则默认会用ModelandView,反之,会用自定义的视图解析器。

    WEB-INF中的jsp页面需要通过,在单元方法中跳转,即

    在这里插入图片描述

    用自定义视图解析器的前提:

    取决于请求转发的路径是否为WEB-INF下的,是的话则不需要加forword:。

    使用restful声明公共单元方法请求转发WEB-INF下的资源

    用来解决controller中,只能请求转发一个资源路径的问题。
    方法:根据请求,请求转发WEB-INF下的资源的单元方法是肯定要声明的。我们可以声明一个公共的单元方法,该单元方法不参与请求的逻辑处理,只负责根据请求转发WEB-INF下的资源。

    代码
    在这里插入图片描述
    当我们在浏览器页面中,输入我们想要的jsp页面,然而我们的controller中没有return该页面中的值,就会自动去找我们的公共单元方法。

    WEB-INF下的静态资源放行配置

    在这里插入图片描述
    红框中是直接去项目的根路径中找,如果我们把js放到WEB-INF中,不放在根路径(Web目录)中,就会出现报错,此时我们需要通过资源放行配置。
    在这里插入图片描述

  • 相关阅读:
    【译】defer-panic-and-recover
    论文笔记 Where Would I Go Next? Large Language Models as Human Mobility Predictor
    淘宝/天猫API:item_search_best-天猫畅销榜
    rhce作业
    基于intel D4系列深度相机 (D455)的单点测距和两点距离测量(代码讲解超详细)
    【嵌入式开发学习】__如何将BootLoader与APP合并成一个固件
    限流与下载接口请求数控制
    Netty使用及常用组件(二)
    css怎样设置文本格式两端对齐
    (c语言)简易计算器
  • 原文地址:https://blog.csdn.net/Thrive_LCX/article/details/136386250