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

自定义视图解析器

准备步骤
在这里插入图片描述
先将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目录)中,就会出现报错,此时我们需要通过资源放行配置。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505503.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把Anaconda添加进环境变量的方法(解决pip识别不到环境的问题)

找到你的Anaconda的安装根目录 比如我的是在:C:\ProgramData\Anaconda3 那么只需要将以下目录添加进环境变量即可: C:\ProgramData\Anaconda3C:\ProgramData\Anaconda3\ScriptsC:\ProgramData\Anaconda3\Library\binC:\ProgramData\Anaconda3\condabin…

取送货问题(Pickup and Delivery Problem)

取送货问题及其变体 广义取送货问题(General Pickup and Delivery Problems,GPDP)可以分为两类: Vehicle Routing Problems with Backhauls,VRPB:从配送中心(depot)取货运输货物到客…

备战蓝桥杯---动态规划的一些思想1

话不多说,直接看题: 目录 1.双线程DP 2.正难则反多组DP 3.换个方向思考: 1.双线程DP 可能有人会说直接贪心:先选第1条的最优路径,再选第2条最优路径。 其实我们再选第1条时,我们怎么选会对第2条的路径…

在线开源免费问卷调查系统

在线开源免费问卷调查系统 平台简介 本项目旨在提供一个简单易用的问卷调查平台,帮助用户创建、分享问卷,并收集、分析调查数据。我们希望能够为各行各业的调查需求提供一种高效、便捷的解决方案。 项目特点 用户友好:清晰直观的用户界面…

华为数通方向HCIP-DataCom H12-821题库(多选题:21-40)

第21题 管理员在配置 VRRP 时,下面哪些不是必须配置的? A.抢占模式 B.抢占延时 C.虚拟IP 地址 D.虚拟路由器的优先级 【参考答案】ABD 【答案解析】 VRRP的作用之一是提供一个虚拟的IP地址,用作默认网关,用来实现冗余和故障转移。因此,配置虚拟IP地址是必须的。华为设备vr…

深入sizeof与strlen

一、sizeof与strlen的对比 sizeofstrlensizeof是单目操作符strlen是库函数,使用需要包含头文件string.hsizeof计算操作数所占用的内存,单位是字节strlen是求字符串长度,统计的是\0之前字符的个数不关注内存中存放什么数据 关注内存总是否有\0…

数据结构开篇

目录 一. 如何学好数据结构二. 基本概念和术语2.1 区分数据、数据元素、数据项、数据对象2.2 数据结构2.2.1 逻辑结构2.2.2 存储结构 2.3 数据类型和抽象数据类型2.4 抽象数据类型的实现 \quad 一. 如何学好数据结构 勤于思考;多做练习;多上机;善于寻求帮助;不怕困难&#xff…

基于springboot+vue的计算机课程管理平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

python爬虫之selenium知识点记录

selenium 一、前期准备 1、概述 selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。 我们可以利用selenium提供的各项功能。 帮助我们完成数据的抓取。 2、学习目标 掌握 selenium发送请求,加载网页的方法 掌…

划分开始结束位置设置标记

划分开始结束位置 初始音轨如下图所示 在想开始地方单击左键,长按直到你想要的结束位置松开。就可以划分开始和结束位置 设置标记 方式1 :直接点击该图标 方式二:使用快捷键M 设置标记点可以自定义名称方便检索标记点

React多个echarts图表在一个页面的使用

前景 很多情况下图标都是一个,我们大概率会像下面代码一样的做法 大概流程就是获取到数据后执行初始化,因为先初始化后异步请求再设置state里面的数据回导致无法正常显示echarts(除非再次调用setOption)下面就记录下自己解决过程源码 https://github.com/superBiuBiuMan/react-…

VMware安装Centos7详细过程

1.硬件软件准备 软件:VMware16 硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码I5CPU双核、硬盘500G、内存4G以上。 镜像:centos7,镜像下载地址centos安装包下载_开源镜像站-阿里云 2…