【基于轻量型架构的WEB开发】课程 12.4 页面跳转 Java EE企业级应用开发教程 Spring+SpringMVC+MyBatis

news2024/11/24 11:00:51

12.4 页面跳转

12.4.1 返回值为void类型的页面跳转

返回值为void类型的页面跳转到默认页面

  • 当Spring MVC方法的返回值为void类型,方法执行后会跳转到默认的页面。
  • 默认页面的路径由方法映射路径和视图解析器中的前缀、后缀拼接成,拼接格式为“前缀+方法映射路径+后缀”。
  • 如果Spring MVC的配置文件中没有配置视图解析器,则会报HTTP Status 500错误。

1

  • 通过案例演示返回值为void类型的页面跳转。
  • 创建一个页面跳转类PageController,在PageController类中定义方法showPageByVoid(),用于测试Spring MVC方法返回值为void的页面跳转。
@Controller
public class PageController {
    @RequestMapping("/register")
    public void showPageByVoid() {
        System.out.println("showPageByVoid running");
    }
}

2

PageControllerjava类中的方法showPageByVoid()处理请求。

  • 上述代码的showPageByVoid()方法将会处理URL为register的请求。
  • showPageByVoid()方法中没有返回值,只有一行打印输出字符串的代码。

3

  • 启动chapter12项目,在浏览器中访问地址http://localhost:8080/chapter12/register
  • 控制台打印信息显示showPageByVoid running

  • 控制台打印上图所示的信息后,浏览器页面进行跳转,跳转的页面如图所示。

  • 注册页面显示,包含用户名和密码输入框,以及注册按钮。
  • 由上面两个图的内容可以得出,访问地址后,执行了showPageByVoid()方法,并且在执行后成功跳转到WEB-INF文件夹下的register.jsp页面。
  • 页面虽然跳转了,但浏览器地址栏没有变化,原因是Spring MVC对请求默认按转发的方式进行响应。

12.4.2 返回值为String类型的页面跳转

返回值为String类型的页面跳转-不携带数据

1

PageController.java文件中新增showPageByString()方法,用于测试返回值为String类型的页面跳转。showPageByString()方法的实现代码如下所示:

@Controller
public class PageController {
    @RequestMapping("/showPageByString")
    public String showPageByString() {
        System.out.println("showPageByString running");
        return "register";
    }
}

2

启动chapter12项目,在浏览器中访问地址http://localhost:8080/chapter12/showPageByString。访问后,控制台打印信息如图所示,显示showPageByString running。 

控制台打印上图所示信息后,浏览器页面进行跳转,跳转的页面如下图所示。

        由上面两图所示的内容可以看出,访问地址后,执行了showPageByString()方法,方法执行后成功跳转到WEB-INF文件夹下的registerjsp页面。如果此时注释掉Spring MVC配置文件spring-mvc.xml中的视图解析器,在浏览器中访问showPageByString0)方法,请求会转发到映射路径为register对应的showPageByVoid()方法中。

返回值为String类型的页面跳转的转发方式

        当方法的返回值为普通的字符串时,Spring MVC在方法执行后会默认以转发的方式响应给客户端。除了这种默认的转发方式,还可以返回指定前缀的字符串,来设定处理器执行后对请求进行转发还是重定向。设定转发和重定向的字符串格式如下:

  • forward:需要转发到的资源路径(在服务端内部完成请求资源的过程,客户端不知情)
  • redirect:需要重定向到的资源路径(在客户端完成请求资源的过程)

1

修改文件PageControllerjava,新增showPageByForward()方法和showPageByRedirect()方法,分别用于测试方法执行后转发和重定向的页面跳转。

    @RequestMapping("/showPageByForward")
    public String showPageByForward() {
        System.out.println("showPageByForward running");
        return "forward:orders.jsp";
    }

    @RequestMapping("/showPageByRedirect")
    public String showPageByRedirect() {
        System.out.println("showPageByRedirect running");
        return "redirect:http://www.itheima.com";
    }

2

启动chapter12项目,在浏览器中访问访问地址http://localhost:8080/chapter12/showPageByForward。访问后,控制台打印信息如图所示。

控制台打印上图所示的信息后,浏览器页面进行跳转,跳转的页面如图所示。

由两图所示的控制台打印信息、跳转的页面和地址栏信息可以得出,访问地址后,执行了showPageByForward()方法,方法执行后转发到项目的orders.jsp页面。

3

在浏览器中访问地址http://localhost:8080/chapter12/showPageByRedirect.
访问后,控制台打印信息如图所示。

控制台打印上图所示的信息后,浏览器页面进行跳转,跳转的页面如图所示。

由两图所示的控制台打印信息、跳转的页面和地址栏信息可以看出,访问地址后执行了showPageByRedirect()方法,方法执行后重定向到黑马程序员的官网。需要注意的是,方法返回的字符串一旦添加了“forward:”或“redirect:”前缀,那么视图解析器不再会为方法返回值拼接前缀和后缀了。

返回值为String类型的页面跳转-携带数据

接下来通过一个案例演示携带数据的页面转发,该案例使用HttpServletRequest类型形参和Model类型形参进行数据传递,案例具体实现步骤如下。

1

修改文件PageController.java,新增showPageByRequest()方法和showPageByModel()方法,showPageByRequest()方法使用HttpServletRequest传递数据,showPageByModel()方法使用Model传递数据,两个方法都使用字符串指定跳转的页面。

//只展示了showPageByRequest()方法
    @RequestMapping("/showPageByRequest")
    public String showPageByRequest(HttpServletRequest request) {
        System.out.println("showPageByRequest running");
        request.setAttribute("username", "request");
        return "register";
    }

2

修改文件Userjava,在registerjsp的表单中添加value属性,用于接收转发传递过来的数据。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<body>
<form action="${pageContext.request.contextPath}/registerUser">
    用户名:<input type="text" name="username" value="${username}"/><br/>
    密&nbsp;&nbsp;&nbsp;码:<input type="text" name="password" value="${user.password}"/><br/>
    <input type="submit" value="注册"/>
</form>
</body>
</html>

3

启动chapter12项目,在浏览器中访问地址http://localhost:8080/chapter12/showPageByRequest。访问后,控制台打印信息如图所示。

控制台打印上图所示的信息后,浏览器页面进行跳转,跳转的页面如图所示,

由两图所示的控制台打印信息,以及跳转的页面信息可以看出,访问地址后执行了showPageByRequest()方法,方法执行后HttpServletRequest中的username转发到register.jsp页面中。

4

在浏览器中访问地址http://ocalhost:8080/chapter12/showPageByModel。访问后,控制台打印信息如图所示。

控制台打印上图所示的信息后,浏览器页面进行跳转,跳转的页面如图所示

由两图所示的控制台打印信息,以及跳转的页面信息可以看出,访问地址后执行了showPageByModel()方法,方法执行后,Model中的username和user对象转发到register.jsp页面

12.4.3 返回值为ModelAndView类型的页面跳转

ModelAndView对象组成部分

使用方法的返回值可以设定跳转的逻辑视图名称,使用Model等对象实现页面跳

转时传输数据。除此之外,Spring MVC还提供了兼顾视图和数据的对象

ModelAndView,ModelAndView对象包含视图相关内容和模型数据两部分,其中视

图相关的内容可以设置逻辑视图的名称,也可以设置具体的View实例;模型数据则会

在视图渲染过程中被合并到最终的视图输出。

ModelAndView设置视图和数据模型的方法

ModelAndView方法说明

setViewName()方法setView()方法都是为ModelAndView对象设置视图的方

法,其中前者使用更方便,因此setViewName()方法比较常用。后3个方法都是向

ModelAndView对象中添加模型数据的,其中addObject(Object attributeValue)方

法添加的attributeValue,默认名称为attributeValue类型全限定名的最后一个单词且

首字母小写;addObject(String attributeName, Object attributeValue)方法可以在

页面上以${attributeName}方式取出attributeValue。

接下来通过一个案例演示返回值为ModelAndView类型的页面跳转,案例具体实现步骤如下。

1

        修改文件PageController.java,新增showModelAndView()方法,在showModelAndView()方法中使用ModelAndView封装数据和视图,完成页面跳转时传递数据。

@RequestMapping("/showModelAndView")
public ModelAndView showModelAndView() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username","heima");
User user = new User(); user.setPassword("password");
modelAndView.addObject("user",user);
modelAndView.setViewName("register");
return modelAndView;
}

2

启动chapter12项目,在浏览器中访问地址
http://localhost:8080/chapter12/showModelAndView。访问后,浏览器页面
进行跳转,跳转的页面如图所示。
从图中所示的页面可以得出,访问地址后执行了showModelAndView()方法,方法执行后,添加的模型数据都在register.jsp页面成功取出。

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

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

相关文章

订单日记助力“实峰科技”提升业务效率

感谢北京实峰科技有限公司选择使用订单日记&#xff01; 北京实峰科技有限公司&#xff0c;成立于2022年&#xff0c;位于北京市石景区&#xff0c;是一家以从事生产、销售微特电机、输配电及控制设备等业务为主的企业。 在业务不断壮大的过程中&#xff0c;想使用一种既能提…

【Ubuntu24.04】部署服务(基础)

目录 0 背景1 设置静态IP2 连接服务器3 部署服务3.1 安装JDK3.2 下载并安装MySQL8.43.2.1 从官网下载 APT Repository 配置文件3.2.2 安装 MySQL8.43.2.3 配置远程连接 3.3 下载并配置Redis3.4 上传jar包并部署应用3.5 开放端口 4 总结 0 背景 在成功安装了Ubuntu24.04操作系统…

Docker镜像分成

1. 镜像分层原理 1.1 镜像分层的定义与结构 Docker 镜像的分层存储机制是其核心特性之一&#xff0c;它允许 Docker 镜像由多个只读层组成&#xff0c;这些层叠加在一起形成一个完整的文件系统。每个层代表 Dockerfile 中的一个指令&#xff0c;并且每一层都是不可变的&#…

JavaWeb开发9

ResponseBody 类型&#xff1a;方法注解、类注解 位置&#xff1a;Controller方法上/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值类型是实体对象/集合&#xff0c;将会转换为JSON格式响应 说明&#xff1a;RestControllerControllerResponseBody; 统…

C#中日期和时间的处理

目录 前言 时间对于我们的作用 一些关于时间的名词说明 格里高利历 格林尼治时间(GMT) 协调世界时(UTC) 时间戳 DateTime 初始化 获取时间 计算时间 字符串转DateTime 存储时间 TimeSpan 初始化它来代表时间间隔 用它相互计算 自带常量方便用于和ticks进行计…

Docker + Jenkins + gitee 实现CICD环境搭建

目录 前言 关于Jenkins 安装Jenkins docker中运行Jenkins注意事项 通过容器中的Jenkins&#xff0c;把服务打包到docker进行部署 启动Jenkins 创建第一个任务 前言 CI/CD&#xff08;持续集成和持续交付/持续部署&#xff09;&#xff0c;它可以实现自动化的构建、测试和部署…

linux之文件(上)

linux之文件&#xff08;上&#xff09; 一.文件的预备知识二.C语言的文件接口和linux的系统接口2.1fopen2.2fclose2.3open2.4close2.5write2.6read 三.文件与系统3.1文件描述符3.2 标准输入&#xff0c;标准输出和标准错误3.3fd的分配规则 四.重定向4.1重定向的概念4.2重定向的…

【进度猫-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

多维视角下的知识管理:Spring Boot应用

2 开发技术 2.1 VUE框架 Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。 Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。 Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。 2.2 Mysql数据库 …

【卷积基础】CNN中一些常见卷积(1*1卷积、膨胀卷积、组卷积、深度可分离卷积)

文章目录 逐通道卷积&#xff08;Pointwise Convolution&#xff0c;1x1 卷积&#xff09;主要作用逐通道卷积的操作过程优势代码示例典型应用 膨胀卷积&#xff08;Dilated Convolution&#xff09;主要作用工作原理膨胀率 (dilation rate) 的定义代码实例膨胀卷积的优点 组卷…

算法【Java】—— 动态规划之路径问题

前言 本文章终点解析第一道题目【不同路径】和最后一道题目【地下城游戏】的动态规划思路&#xff0c;中间几道题目会很快过完&#xff0c;大家如果不熟悉动态规划的思路可以重点看一下这两道题目的解析。 不同路径 https://leetcode.cn/problems/unique-paths 解析&#xf…

Linux - 信号

文章目录 一、信号的定义二、查看信号三、产生信号1、指令2、系统调用3、由软件条件产生信号4、异常5、键盘输入 四、保存信号1、补充&#xff1a;信号其他相关概念2、信号保存在哪&#xff0c;怎么保存&#xff1f;3、信号集操作函数 五、捕获信号1、概念2、捕获信号的时机3、…

group_concat配置影响程序出bug

在 ThinkPHP 5 中&#xff0c;想要临时修改 MySQL 数据库的 group_concat_max_len 参数&#xff0c;可以使用 原生 SQL 执行 来修改该值。你可以通过 Db 类来执行 SQL 语句&#xff0c;从而修改会话&#xff08;Session&#xff09;级别的变量。 步骤 设置 group_concat_max_l…

云专线优势有哪些?对接入网络有什么要求?

云专线是一种连接企业本地数据中心与云服务提供商之间的专用网络连接方式&#xff0c;具有以下优势&#xff1a; 高安全性&#xff1a;云专线提供了物理隔离的数据传输通道&#xff0c;减少了数据在公共互联网上传输时可能遭遇的安全风险。 低延迟&#xff1a;由于是直接连接&a…

【提高篇】3.1 GPIO(二,结构与工作模式介绍)

目录 一,GPIO的基本结构 1.1 保护二极管 1.2 上拉、下拉电阻 1.3 施密特触发器 1.4 P-MOS 管和 N-MOS 管 P-MOS管和N-MOS管的区别 1.5 片上外设 1.6 IDR,ODR,BSRR寄存器 1.6.1 IDR(Input Data Register) 1.6.2 ODR(Output Data Register) 1.6.3 BSRR(Bit Se…

数据迁移: 安全高效转移数据, 满足企业业务需求和技术改进

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…

Am I Isolated:一款安全态势基准测试工具

基于Rust的容器运行时扫描器作为一个容器运行&#xff0c;检测用户容器运行时隔离中的漏洞。 它还提供指导&#xff0c;帮助用户改善运行时环境&#xff0c;以提供更强的隔离保证。 容器的现状是它们并不包含&#xff08;隔离&#xff09;。 容器隔离的缺失在云原生环境中有…

战略共赢 软硬兼备|云途半导体与知从科技达成战略合作

2024年11月5日&#xff0c;江苏云途半导体有限公司&#xff08;以下简称“云途”或“云途半导体”&#xff09;与上海知从科技有限公司&#xff08;以下简称“知从科技”&#xff09;达成战略合作&#xff0c;共同推动智能汽车领域高端汽车电子应用的开发。 云途半导体与知从科…

基于卷积神经网络的农作物病虫害识别系统(pytorch框架,python源码)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示&#xff1a; 基于卷积神经网络的农作物病虫害检测&#xff08;pytorch框架&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的农作物病虫害识别系统是在pytorch框架下实现的…

2-149 基于matlab的LDPC译码性能分析

基于matlab的LDPC译码性能分析&#xff0c;LDPC&#xff08;Low-Density Parity-Check&#xff09;码作为编码技术&#xff0c;具有优秀的纠错性能和较低的编解码复杂度。为保证可靠的数据传输&#xff0c;对传输过程中可能出现的信道噪声、干扰等进行模拟和分析。分析对比了误…