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

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

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.kler.cn/a/381549.html

相关文章:

  • Linux:code:network:devinet_sysctl_forward;IN_DEV_FORWARD
  • Go快速开发框架2.6.0版本更新内容快速了解
  • 产品初探Devops!以及AI如何赋能Devops?
  • 从零开始k8s-部署篇(未完待续)
  • 使用Docker部署一个Node.js项目
  • PVE虚拟化平台之开启虚拟机IP显示方法
  • Python Matplotlib 子图绘制
  • 省级-能源结构数据(电力消费水平)(2000-2022年)
  • 【go从零单排】go三种结构体:for循环、if-else、switch
  • 【大数据学习 | HBASE】habse的表结构
  • vue前端面试题及答案2024
  • 飞书API-获取tenant_access_token
  • Melty 主体流程图
  • ctfshow文件包含web78~81
  • 八、1.STM32之DMA实验--DMA数据转运
  • 从传统服务器到虚拟化:虚拟机 VM 如何改变计算游戏规则?
  • 【spring】Cookie和Session的设置与获取(@CookieValue()和@SessionAttribute())
  • 企业HR如何选对一款智能招聘软件?
  • 加锁失效,非锁之过,加之错也|京东零售供应链库存研发实践
  • 【网络原理】深入理解关于HTTP协议和报文的格式以及重要的属性
  • web信息收集
  • FlaskFastAPIgunicornunicorn并发调用
  • 提高交换网络可靠性之链路聚合
  • RK3568开发板静态IP地址配置
  • oracle常用查询sql
  • EtherCAT转ModbusTCP相关技术