当前位置: 首页 > news >正文

SpringMVC转发和重定向

转发和重定向

1. View Resolver

Spring MVC 中的视图解析器(View Resolver)负责解析视图。可以通过在配置文件中定义一个 View Resolver 来配置视图解析器:

  • 配置文件版:spring-web.xml

    <!-- for jsp -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" />
    </bean>
    
  • 代码配置版:SpringWebConfig.java

    @Bean
    public InternalResourceViewResolver internalResourceViewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/jsp/");viewResolver.setSuffix(".jsp");return viewResolver;
    }
    

对于一个已知的『逻辑视图名』,DispatcherServlet 会将请求转发到 prefix + view_name + suffix 的页面。

补充:InternalResourceViewResolver 是最常用的视图解析器(用于 .jsp 场景),但不是唯一的一个,Spring MVC 还有其他的视图解析器,例如:ThymeleafViewResolver

2. Model 和 ModelAndView

Spring MVC 提供了一个 Model 接口,它功能类似于 java.util.Map 接口。ModelMapModel 接口的实现类。

如果 Controller 的处理方法中有 ModelModeMap 作为参数,那么 Spring MVC 会(在 Controller 方法外)创建 ModelMap 对象,并传入 Controller 方法。ModelMap 对象将作为模型数据的存储容器。

ModelMap 对象起到的就是一个『结果参数』的作用。

Controller 方法中,我们可以从 ModelMap 对象中,存、取数据。

如果处理方法的返回结果是 ModelAndView ,则其既包含模型数据信息,也包含视图信息。

在 JSP 页面,可以直接通过 EL 表达式从模型对象中,取出模型数据以供页面展示。

Servlet 3.0 以下版本 EL 表达式功能默认时关闭的,记得要打开它。

3. 转发、重定向

如果你的 Controller 的『下一步』是跳转页面显示,那么你只需要在请求处理方法中返回逻辑视图名即可。

如果你的『下一步』操作是触发另一个 .do(或其它什么后缀),那么你需要使用转发和重定向。

Spring MVC 中实现转发和重定向非常简单:

  • 转发

    // 注意,
    return "forward:<url>";/* 或 */
    mav.setViewName("forward:<url>");
    return mav;
    
  • 重定向

    return "redirect:<url>";
    /* 或 */
    mav.setViewName("redirect:<url>");
    return mav;
    

这里有 2 点注意:

  1. forward:redirect: 后的 : 后面没有空格。

  2. 这里的 <url> 是『方法映射路径』,即 .do 一类,也就是你的另一个 @Controller 中的某个 @RequestMapping 中的那个值,而不是逻辑视图名

例如:

return "forward:/department/main.do";

注意,return "main";return "forward:/main-page"; 的最终执行的『效果』是一样的,但是执行的过程,走过的『路径』并不同。

4. 跳转异常页面

了解

全局异常处理后续专项讲解

在 Webapp 中,一旦发生了异常可以层层上抛,直到抛给 Spring MVC 的 DispacherServlet 。而 DispacherServlet 可以根据开发者所配置的配置一个『全局异常处理器』,来决定跳转哪个页面,展示何种信息。

默认情况下,Spring MVC 所使用的异常处理器是:SimpleMappingExceptionResolver (它是注解驱动帮我们配出来的那 19 个 JavaBean 之一),它所处理的效果正是我们当前所看到的内容:在一个临时页面上显示异常堆栈信息。

自定义的异常处理器需要实现 Spring MVC 提供的 HandlerExceptionResolver 接口,在其中 .resolveException 方法中可以根据自定义的逻辑返回 ModelAndView 对象,以决定跳转页面和展示信息。

使用自定义的异常处理器,需要在 Spring MVC 配置文件中做出配置:

<bean id="customHandleException" class="com.hemiao.web.exception.MyHandlerExceptionResolver"/>

相关文章:

SpringMVC转发和重定向

转发和重定向 1. View Resolver Spring MVC 中的视图解析器&#xff08;View Resolver&#xff09;负责解析视图。可以通过在配置文件中定义一个 View Resolver 来配置视图解析器&#xff1a; 配置文件版&#xff1a;spring-web.xml <!-- for jsp --> <bean class&q…...

勒索病毒最新变种.rmallox勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益突出&#xff0c;其中勒索病毒便是近年来备受关注的网络安全威胁之一。在众多勒索病毒中&#xff0c;.rmallox勒索病毒以其独特的传播方式和强大的加密能力&#xff0c;给广大用户带来了极大的困扰。本文…...

复试专业课问题

1、数据结构&#xff1a;详细描述归并排序的过程 归并排序是用分治思想&#xff0c;分治模式在每一层递归上有三个步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将n个元素分成个含n/2个元素的子序列。解决&#xff08;Conquer&#xff09;&#xff1a;用…...

比特币革命:刚刚开始

作者&#xff1a;Marius Farashi Tasooji 编译&#xff1a;秦晋 要充分理解比特币及其含义&#xff0c;首先必须理解什么是价值&#xff0c;什么是货币。以及是什么赋予资产价值&#xff1f; 这个问题看似愚蠢&#xff0c;但实际上非常有趣。我们的生活是由我们消费或出售的物品…...

淘宝店商家电话提取软件操作经验

淘宝爬虫工具是一种用于自动化获取淘宝网站数据的程序。以下是一个简单的淘宝爬虫工具的代码示例&#xff1a; import requests from bs4 import BeautifulSoupdef get_taobao_data(keyword):url fhttps://s.taobao.com/search?q{keyword}headers {User-Agent: Mozilla/5.0…...

【进阶六】Python实现SDVRPTW常见求解算法——遗传算法(GA)

基于python语言&#xff0c;采用经典蚁群算法&#xff08;ACO&#xff09;对 带硬时间窗的需求拆分车辆路径规划问题&#xff08;SDVRPTW&#xff09; 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4. 代码片段…...

【Android】App通信基础架构相关类源码解析

应用通信基础架构相关类源码解析 这里主要对Android App开发时&#xff0c;常用到的一些通信基础类进行一下源码的简单分析&#xff0c;包括&#xff1a; Handler&#xff1a;处理器&#xff0c;与某个Looper&#xff08;一个线程对应一个Looper&#xff09;进行关联。用于接…...

06-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表&#xff0c;用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…&#xff0c;无需添加所有的集群地址&#xff0c;kafka会根据提供的地址发现其他的地址&…...

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别

Git、TortoiseGit、SVN、TortoiseSVN 的关系和区别 &#xff08;一&#xff09;Git&#xff08;分布式版本控制系统&#xff09;:&#xff08;二&#xff09;SVN&#xff08;集中式版本控制系统&#xff09;&#xff08;三&#xff09;TortoiseGit一、下载安装 git二、安装过程…...

4月5日排序算法总结(1)

冒泡排序 利用每趟都确定出一个最大值或者最小值 如果需要排一个从小到大的数组&#xff0c;那么我们每一趟都要确定一个最大值放在最后&#xff0c;一共有n个数&#xff0c;我们最多需要排列n-1趟就可以了&#xff0c;我们可以改进自己的代码&#xff0c;利用一个flag标记&a…...

Pandas追加写入文件的时候写入到了第一行

# 原代码 def find_money(file_path, account, b_account, money, type_word, time):file pd.read_excel(file_path)with open(money.csv, a, newline, encodingutf-8) as f:for i in file.index:省略中间的代码if 省略中间的代码:file.loc[[i]].to_csv(f,indexFalse)find_sam…...

04---webpack编写可维护的构建配置

01 构建配置抽离成npm包&#xff1b; 意义&#xff1a;通用性&#xff1a; 业务开发者无需关注构建配置 统一团队构建脚本可维护性&#xff1a;构建配置合理的拆分 质量&#xff1a;冒烟测试 单元测试 持续集成构建配置管理的可选方案&#xff1a;1 通过多个配置文件管理不同…...

【云计算】云数据中心网络(一):VPC

云数据中心网络&#xff08;一&#xff09;&#xff1a;VPC 1.什么是 VPC2.VPC 的组成2.1 虚拟交换机2.2 虚拟路由器 3.VPC 网络规划3.1 VPC 数量规划3.2 交换机数量规划3.3 地址空间规划3.4 不同规模企业地址空间规划实践 4.VPC 网络高可靠设计4.1 单地域单可用区部署4.2 单地…...

自动驾驶中的多目标跟踪_第一篇

自动驾驶中的多目标跟踪:第一篇 多目标跟踪(multi-object/multi-target tracking)的任务包括估计场景中目标的数目、位置&#xff08;状态&#xff09;或其他属性&#xff0c;最关键的是需要在一段时间内持续地进行估计。 附赠自动驾驶学习资料和量产经验&#xff1a;链接 应…...

AI爆款文案 巧用AI大模型让文案变现插上翅膀

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…...

Python入门的60个基础练习(一)

01-Hello World python的语法逻辑完全靠缩进&#xff0c;建议缩进4个空格。如果是顶级代码&#xff0c;那么必须顶格书写&#xff0c;哪怕只有一个空格也会有语法错误。下面示例中&#xff0c;满足if条件要输出两行内容&#xff0c;这两行内容必须都缩进&#xff0c;而且具有相…...

微软云学习环境

微软公有云 - Microsoft Azure 本文介绍通过微软学习中心Microsoft Learn来免费试用Azure上的服务&#xff0c;也不需要绑定信用卡。不过每天只有几个小时的时间。 官网 https://docs.microsoft.com/zh-cn/learn/ 实践 比如创建虚拟机&#xff0c;看到自己的账号下多了Learn的…...

大厂面试:找出数组中第k大的数的最佳算法

一.前置条件 假如数组为a,大小为n&#xff0c;要找到数组a中第k大的数。 二.解决方案 1.使用任意一种排序算法&#xff08;例如快速排序&#xff09;将数组a进行从大到小的排序&#xff0c;则第n-k个数即为答案。 2.构造一个长度为k的数组&#xff0c;将前k个数复制过来并降序…...

爬取高校专业信息的Python爬虫简介与实践

1. 介绍 在当前高校专业信息繁多的情况下&#xff0c;选择适合自己的专业成为了许多学生面临的挑战。为了帮助学生更好地了解各高校专业情况&#xff0c;我们开发了一个Python爬虫程序&#xff0c;用于爬取高校专业信息并保存到Excel文件中。本文将详细介绍该爬虫的实现过程以…...

redis 集群模式(redis cluster)介绍

目录 一 redis cluster 相关定义 1&#xff0c; redis cluster 是什么 2&#xff0c;redis 集群的组成 3&#xff0c;集群的作用 4&#xff0c;集群架构图 二 Redis集群的数据分片 1&#xff0c;哈希槽是什么 2&#xff0c;哈希槽如何排布 3&#xff0c;Redis集…...

python实现网络爬虫

网络爬虫是一个自动从互联网上抓取数据的程序。Python有很多库可以帮助我们实现网络爬虫&#xff0c;其中最常用的是requests&#xff08;用于发送HTTP请求&#xff09;和BeautifulSoup&#xff08;用于解析HTML或XML文档&#xff09;。 以下是一个简单的Python网络爬虫示例&a…...

LeetCode 836. 矩形重叠

解题思路 相关代码 class Solution {public boolean isRectangleOverlap(int[] rec1, int[] rec2) {int x1 rec1[0];int y1 rec1[1];int x2 rec1[2];int y2 rec1[3];int a1 rec2[0];int b1 rec2[1];int a2 rec2[2];int b2 rec2[3];return Math.min(y2,b2)>Math.max…...

为说阿拉伯语的国家进行游戏本地化

阿拉伯语是由超过4亿人使用的语言&#xff0c;并且是二十多个国家的官方语言。进入这些国家的市场并非易事——虽然他们共享一种通用语言&#xff0c;但每个国家都有自己独特的文化&#xff0c;有自己的禁忌和对审查的处理方式。这就是为什么视频游戏公司长期以来都远离阿拉伯语…...

【Python系列】读取 Excel 第一列数据并赋值到指定列

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

二叉树——存储结构

二叉树的存储结构 二叉树一般可以使用两种结构存储&#xff0c;一种是顺序结构&#xff0c;另一种是链式结构。 一、顺序存储 二叉树的顺序存储是指用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素&#xff0c;即将完全二叉树上编号为i的结点元素存储…...

LangChain - OpenGPTs

文章目录 MessageGraph 消息图认知架构AssistantsRAGChatBot 持久化配置新模型新工具astream_events总结 关键链接&#xff1a; OpenGPT GitHub 存储库YouTube 上的 OpenGPT 演练LangGraph&#xff1a;Python、JS 两个多月前&#xff0c;在 OpenAI 开发日之后&#xff0c;我们…...

pe格式从入门到图形化显示(四)-节表

文章目录 前言一、什么是Windows PE格式节表&#xff1f;二、解析节表并显示1.节表数据结构以及字段描述2.节表的属性3.解析4.显示 前言 通过分析和解析Windows PE格式&#xff0c;并使用qt进行图形化显示 一、什么是Windows PE格式节表&#xff1f; PE格式的节表&#xff08…...

路由策略与路由控制之双点双向重发布(OSPF-ISIS)实验

双点双向重发布在路由协议中&#xff0c;特别是在OSPF&#xff08;开放式最短路径优先&#xff09;与IS-IS&#xff08;中间系统到中间系统&#xff09;等协议之间&#xff0c;指的是在两个协议间或者两个进程间进行路由信息共享的机制。这种机制涉及到在两个不同的协议区域使用…...

9proxy—数据采集工具全面测评

9Proxy数据采集工具Unlock the web with 9Proxy, the top residential proxy provider. Get unlimited bandwidth, affordable prices, and secure HTTPS and Socks5 configurations.https://9proxy.com/?utm_sourceblog&utm_mediumcsdn&utm_campaignyan 前言 在当今数…...

上海晶珩树莓派工业智能机械臂,亮相2024年embedded world博览会!

上海晶珩树莓派工业智能机械臂&#xff0c;亮相2024年embedded world博览会&#xff01; 工业智能机械臂是上海晶珩&#xff08;EDATEC&#xff09;团队基于树莓派工业相机ED-AIC2000和树莓派工业触摸屏ED-HMI2320开发的创新应用案例。 工业智能机械臂具备卓越的定位能力&…...