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.mzph.cn/news/713084.shtml

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

相关文章

前台自动化测试:基于敏捷测试驱动开发(TDD)的自动化测试原理

一、自动化测试概述 自动化测试主要应用到查询结果的自动化比较,把借助自动化把相同的数据库数据的相同查询条件查询到的结果同理想的数据进行自动化比较或者同已经保障的数据进行不同版本的自动化比较,减轻人为的重复验证测试。多用户并发操作需要自动…

【开源】JAVA+Vue.js实现APK检测管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

springBoot整合Redis(二、RedisTemplate操作Redis)

Spring-data-redis是spring大家族的一部分,提供了在srping应用中通过简单的配置访问redis服务,对reids底层开发包(Jedis, JRedis, and RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅&…

Android:BitmapFactory.decodeStream Bitmap的内存优化OutOfMemory异常以后Crash闪退

自己项目中使用如下方法,有的手机上会奔溃报错,原因是BitmapFactory.decodeStream部分没有使用options参数改变内存大小 改成如下形式后正常了;正确解决方案:设置inSampleSize 一)Android BitmapFactory.decodeStream(…

C++利用汇编挖掘编程语言的本质..

1.谬论 很多非一手的资料特别是中文资料其实并不可靠 因为很多作者都是直接通过转载他人的作品 也不管他人作品真与假 而且有一部分的作品中的言论和官方描述相去甚远 有的则是翻译的过程中出现了问题 比如sizeof很多人认为是一个函数 其实他并不是一个函数 而是一个运算符 是…

档案数字化验收流程

档案数字化验收流程通常包括以下步骤: 1. 确定验收标准:制定档案数字化验收标准,明确要求检查的内容、质量要求、验收标准等。 2. 准备验收环境:为档案数字化验收准备合适的环境,包括验收场所、设备、人员等。 3. 准备…

vscode 引入外部依赖包

背景 我要在vscode中写一些antlr代码生成的cpp代码,但是在引入头文件#include "antlr4-runtime.h"的时候,出现报错,显示没有这个头文件,显然这是我们没有导入相关的包,因此我首先尝试了将antlr4的依赖源码在…

Semantic human matting

1.introduction 数据集包括,时尚模特数据集,超过18.8w张模特图,从中选出35311张图片,DIM数据集,仅包含人类的图像,202个前景图像,背景来自coco数据集和互联网,背景图不含人类&#x…

python 基础知识点(蓝桥杯python科目个人复习计划56)

今日复习内容:做题 例题1:最小的或运算 问题描述:给定整数a,b,求最小的整数x,满足a|x b|x,其中|表示或运算。 输入格式: 第一行包括两个正整数a,b; 输出格式&#…

小乌龟操作Git

1、选择小乌龟作为git客户端 最近使用idea来操作git的时候频频出现问题,要么是提交代码的时候少了某些文件,导致克隆下来无法运行,要么是提交速度太慢。 反正是在idea中操作git体验非常不好,所以决定来换一种方式来操作git。从网…

蓝桥杯算法题汇总

一.线性表:链式 例题:旋转链表 二.栈: 例题:行星碰撞问题 三.队列 三.数组和矩阵 例题:

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

C语言 vs Rust应该学习哪个?

C语言 vs Rust应该学习哪个? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!&am…

linux系统如何安装nginx

首先下载nginx安装包 wget -c http://nginx.org/download/nginx-1.23.1.tar.gz然后解压安装包 tar -zxvf nginx-1.23.1.tar.gz如果服务器没有wget,可以安装一下,有的话可以跳过 yum install -y wget 然后安装相关依赖 yum install -y gcc-c zlib zl…

最新企微hook开源版

免费的企微框架 支持文本消息,图片消息,视频消息,文件消息。 其他可自行下载测试。 有兴趣可以进群交流。720192224 。群内不定期开源气味hook源码 BOOL WxWorkSendData(string data) { WX_GETOBJDATA obj { 0 }; //参数结构…

MATLAB练习题:排队论问题的模拟

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 下面我们来看一道排队论的题目。假设某银行工作时间内只有一个…

Kubernetes/k8s的核心概念

一、什么是 Kubernetes Kubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“k8s”&#xff…

如何解决代理ip服务器连接问题

在当今的数字化时代,互联网连接已成为生活和工作中不可或缺的一部分。然而,在尝试访问互联网资源时,用户有时会遇到“代理服务器可能有问题,或地址不正确(你尚未连接)”的错误提示。这种情况通常表明计算机的网络设置存在问题&…

python统计分析——广义线性模型的评估

参考资料:用python动手学统计学 残差是表现数据与模型不契合的程度的重要指标。 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入绘图的库 import matplotlib.pyplot as plt i…

面经 | Java创建线程的三种方式

利用JUC包创建线程的三种方式: 通过继承Thread类创建线程类实现Runnable接口创建线程类通过Callable和Future接口创建线程 继承Thread类创建线程 class Thread1 extends Thread {Overridepublic void run() {System.out.println("启动线程1");} }实现R…