【SpringMVC】| SpringMVC的视图

news2024/11/16 11:32:14

目录

SpringMVC的视图

1. ThymeleafView

2. 转发视图

3. 重定向视图

4. 视图控制器view-controller


SpringMVC的视图

(1)SpringMVC中的视图是View接口,视图的作用渲染数据,将模型Model中的数据展示给用户。

(2)SpringMVC视图的种类很多,默认有转发视图(forward)和重定向视图(redirect)。

(3)若当工程引入jstl(jstl标签库)的依赖,转发视图会自动转换为JstlView。

(4)若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,由此视图解析器解析之后所得到的是ThymeleafView。

1. ThymeleafView

当控制器方法中所设置的视图名称没有任何前缀时(有前缀也就是forward:和redirct:这两种),此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转! 

其实前面一直使用的就是这种方式!

视图解析器

发送请求,并拼接视图解析器中的前后缀 

2. 转发视图

(1)SpringMVC中默认的转发视图是InternalResourceView。

(2)SpringMVC中创建转发视图的情况:当控制器方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转!

例如:我们从two跳转到one,此时就不需要视图解析器

此时会去调forward:,直接跳转到/one路径,不会被视图解析器解析,就不会加上前后缀!

注:此时创建的就不是ThymeleafView视图,而是InternalResourceView!

注:如果用的是jsp,那么视图解析器中配置的就是InternalResourceView(没有任何前缀也是这个),就没有InternalResourceView什么事了!

    @RequestMapping("/one")
    public String one(){
        return "success";
    }
    @RequestMapping("/two")
    public String two(){
        return "forward:/one";
    }

3. 重定向视图

(1)SpringMVC中默认的重定向视图是RedirectView。

(2)当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径通过重定向的方式实现跳转。

复习:转发与重定向

①转发实际上是一次请求(相对于浏览器而言),第一次是浏览器发出请求,第二次是发生在服务器内部的;所以地址栏还是第一次发出请求的地址。重定向是两次请求,第一次访问的是servlet,第二次是访问我们重定向的地址;地址栏是重定向的地址。

②转发可以携带数据,因为是一次请求,调用的是同一个request对象。重定向不可以,数据会丢失,因为是两次请求,对应着两个不同的request对象。

③转发可以访问WEB-INF下的资源。重定向不可以访问WEB-INF下的资源。

④转发不能跨域。重定向可以跨域。

对比转发和重定向的地址栏变化

    @RequestMapping("/one")
    public String one(){
        return "success";
    }
    @RequestMapping("/two")
    public String two(){
        return "forward:/one";
    }

    @RequestMapping("/three")
    public String three(){
        return "redirect:/one";
    }

 使用转发:/two转发到/one(地址栏应该是two),然后经过视图解析解析跳转到success

使用重定向:/three重定向到/one(地址栏应该是one),然后经过视图解析解析跳转到success

4. 视图控制器view-controller

当控制器方法中,仅仅用来实现页面跳转,即只需要设置视图名称时,可以将处理器方法使mvc命名空间view-controller标签进行表示!

在springmvc.xml中增加以下配置

①path:设置处理的请求地址;
②view-name:设置请求地址所对应的视图名称。

<mvc:view-controller path="/" view-name="index"></mvc:view-controller>

以上代码就等价于:

    @RequestMapping("/")
    public String demo(){
        return "index";
    }

但是此时会出现一个新的问题:当SpringMVC中设置任何一个view-controller时,其他控制器中的请求映射将全部失效!此时需要在SpringMVC的核心配置文件中设置开启mvc注解驱动的标签:

<mvc:view-controller path="/" view-name="index"></mvc:view-controller>
<!--开启mvc的注解驱动-->
<mvc:annotation-driven/>

总结:

(1)对于html,一般配置的是Thymeleaf视图解析器,因为对于html是无法使用java代码的;例如我们写路径发送请求时,需要利用thymeleaf的命名空间去处理!

注:此时会根据thymeleaf在one路径前面加上项目的上下文路径名!

<a th:href="@{/one}"></a>

(2)对于jsp,一般的配置的是InternalResourceViewResolver视图解析器,因为对于jsp中是可以使用java代码的,我们可以通过java代码动态获取上下文的路径名!

注:此时使用pageContext.request.contextPath去动态获取上下文的路径名!

<a href="${pageContext.request.contextPath}/one"></a>

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

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

相关文章

Android单元测试(五):网络接口测试

温馨提示&#xff1a;如果你不太熟悉单元测试&#xff0c;可以先看下之前四篇基础框架使用。便于你更好的理解下面的内容。 在平日的开发中&#xff0c;我们用后台写好给我们接口去获取数据。虽然我们有一些请求接口的工具&#xff0c;可以快速的拿到返回数据。但是在一些异常情…

怎么用u盘制作pe系统启动盘

PE系统是一种小型的windows系统&#xff0c;通俗的说法也就是在电脑出现问题不能正常进入系统时的一种紧急备用系统。它容量小能量大&#xff0c;可以解决win系统中经常遇到的一些问题&#xff0c;对于经常使用电脑的用户来说&#xff0c;制作一个pe系统启动盘放在身边是很有必…

selenium python教程第1章

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的AP…

【基于MATLAB的dijkstra算法】

基于MATLAB的dijkstra算法 %姓名&#xff1a;马伟 %日期&#xff1a;2023年6月七号 %作业&#xff1a;通信网理论&#xff0c;最小路径树D算法 function [distances, paths, tree] dijkstra(graph, startNode)numNodes size(graph, 1);distances inf(1, numNodes);visited …

网络安全怎么学?学习路线资料分享

一.自己对网络安全的理解 安全其实有很多个方向&#xff0c;从大的方面来说&#xff0c;也就是测试和开发。测试&#xff0c;细分下来&#xff0c;又有渗透&#xff08;也就是所谓的web&#xff09;&#xff0c;逆向&#xff08;也就是所谓的二进制&#xff0c;主要是代码审计方…

YUM报错No module named yum处理

一、问题描述 某次GreenPlum集群部署过程中&#xff0c;现场人员反馈&#xff0c;yum命令无法使用了&#xff0c;执行报错&#xff1a;No module named yum&#xff0c;如下所示&#xff1a; 相关资料&#xff1a;YUM 二、问题分析处理 2.1 YUM的本质 yum命令本质上是属于py…

泛微信创办公平台,低代码构建丰富应用,满足多种需求

信创已经成为了国家的战略规划&#xff0c;自2022年起&#xff0c;国家已全面推动国资企业的信创改造工作&#xff0c;要求到2027年底&#xff0c;对综合办公、经营管理、生产运营等系统实现“应替尽替、能替则替”。其中&#xff0c;门户、OA、邮件、档案、党群、纪检监察等综…

7年时间,从功能测试到测试开发,和大家聊聊如何突破职业瓶颈?少走弯路

突破自己的技术瓶颈并不是一蹴而就&#xff0c;还是需要看清楚一些东西&#xff0c;这里也有一些经验和见解跟大家分享一下。同样是职场人士&#xff0c;我也有我的经历和故事。在工作期间&#xff0c;我有过2年加薪5次的小小“战绩”&#xff08;同期进入公司的员工&#xff0…

28岁,从字节退休了···

大厂一直是每个程序员都向往职业目标&#xff0c;大厂意味着薪资高、福利好、倍有面儿&#xff0c;而且发展空间也大。甚至有人调侃不想进大厂的程序员不是好程序员。 而在网上&#xff0c;也有各个网友分享自己在大厂的经历&#xff0c;在某平台还有一个近2600万浏览的话题&a…

度晓晓再战高考:百度“AI伙伴”助阵,人均学霸时代来了

6月7日&#xff0c;高考首日&#xff0c;AI 挑战高考语文的新闻刷屏。 在一场关于高考直播的中&#xff0c;百度搜索正在内测的“AI 伙伴”现场挑战高考语文考试&#xff0c;包括作文、微写作、古诗词赏析、文言文翻译、阅读填空等题型。一篇文言文作文甚至迷惑了资深语文老师庄…

永善公司招聘网络红人主播,高薪招募线上策略娱乐主播

永善公司招聘网络红人主播&#xff0c;高薪招募线上策略娱乐主播#主播#高薪职业#直播 招聘 公司直招网络主播多名&#xff01; 直播平台&#xff1a;抖音、酷狗 不收任何费用 没有经验也没有关系只要你有梦想&#xff0c;只要你肯努力并 且有一颗想发大财的野心&#xff…

父母在家千万注意别打开“共享屏幕”,银行卡里的钱一秒被转走......

打开屏幕共享&#xff0c;差点直接被转账 今天和爸妈聊天端午回家的事情&#xff0c;突然说到最近AI诈骗的事情&#xff0c;千叮咛万嘱咐说要对方说方言才行&#xff0c;让他们充分了解一下现在骗子诈骗的手段&#xff0c;顺便也找了一下骗子还有什么其他的手段&#xff0c;打…

【Clickhouse】ReplaceingMergeTree引擎final实现合并去重探索 | 京东云技术团队

前言 在OLAP实践中&#xff0c;在有数据更新的场景中&#xff0c;比如存储订单数据&#xff0c;我们经常会用到ReplaceingMergeTree引擎来去重数据&#xff0c;以获取数据的最新状态。但是ReplaceingMergeTree引擎实现数据的去重合并的操作是异步的&#xff0c;这样在实际查询…

人事项目开发记录2

项目构建 前端项目构建 Vue项目使用webpack来构建。首先确保本地已经安装了NodeJS&#xff0c;然后在CMD中执行如下命令&#xff0c;可以创建并启动一个名为vuehr的前端项目&#xff1a; 在执行“vue init webpack vuehr”命令时&#xff0c;会要求依次输入项目的基本信息&…

核心领域的数字基建梳理

数字基建&#xff1a;新基建的核心 数字基建是数字经济发展的重要底座&#xff0c;《“十四五”数字经济发展规划》的首要重要任务就是“优化升级数字基础设施”&#xff0c;并提出要建设高速泛在、天地一体、云网融合、智能敏捷、绿色低碳、安全可控的智能化综合性数字信息基…

如何有效避免项目需求蔓延?

如何有效避免项目需求蔓延&#xff1f;6种措施&#xff1a; 1、确定项目范围 &#xff08;1&#xff09;确定范围基线 在项目目标明确的基础上&#xff0c;所有干系人在完全了解项目需求后&#xff0c;建立需求范围基线&#xff08;项目范围说明书、工作分解结构WBS、WBS字典&a…

关于矿井地面电力综合自动化系统的研究与产品选型

摘要&#xff1a;煤矿供电系统是煤矿生产的重要动力保障 , 一旦电力中断 , 生产将被迫停止 , 同时停电后容易发生瓦斯积聚爆炸、淹井等恶性事故&#xff0c;现有配电室采用不同厂商的保护装 置产品&#xff0c;没有形成有效的监控配电系统&#xff0c;不便于管理和实现无人值守…

CSS中scope和scoped区别

前言 在css的发展中&#xff0c;涌现了大量的新的特性和专有名词。 scope scope 是 CSS 中的一个伪类选择器&#xff0c;表示当前规则所在元素&#xff0c;它可以用于限定元素选择器的范围。在常规的 CSS 中&#xff0c;所有的选择器都是全局的&#xff0c;即它们适用于文档…

Mybatis的parameterType造成线程阻塞问题分析 | 京东云技术团队

一、前言 最近在新发布某个项目上线时&#xff0c;每次重启都会收到机器的 CPU 使用率告警&#xff0c;查看对应监控&#xff0c;持续时长达 5 分钟&#xff0c;对于服务重启有很大风险。而该项目有非常多 Consumer 消费&#xff0c;服务启动后会有大量线程去拉取消息处理逻辑…

【网络安全】学习路线和资料分享

一.自己对网络安全的理解 安全其实有很多个方向&#xff0c;从大的方面来说&#xff0c;也就是测试和开发。测试&#xff0c;细分下来&#xff0c;又有渗透&#xff08;也就是所谓的web&#xff09;&#xff0c;逆向&#xff08;也就是所谓的二进制&#xff0c;主要是代码审计方…