Spring MVC数据绑定和响应——页面跳转(二)返回值为String类型的页面跳转

发布于:2024-07-04 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、不携带数据

        接下来通过一个案例演示返回值为String类型时,不携带数据的页面跳转,案例具体实现步骤如下。

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

@Controller
public class PageController {
    @RequestMapping("/register")
    public void showPageByVoid() {
        System.out.println("showPageByVoid running");}
}

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

showPageByString running

        控制台打印上图所示信息后,浏览器页面进行跳转。访问地址后,执行了showPageByString()方法,方法执行后成功跳转到WEB-INF文件夹下的register.jsp页面。如果此时注释掉Spring MVC配置文件spring-mvc.xml中的视图解析器,在浏览器中访问showPageByString()方法,请求会转发到映射路径为register对应的showPageByVoid()方法中。

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

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

forward:需要转发到的资源路径
redirect:需要重定向到的资源路径

接下来,通过一个案例演示返回指定前缀的字符串的页面跳转,具体实现步骤如下。

        1、修改文件PageController.java,新增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.test.com";	}

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

showPageByForward running

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

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

showPageByRedirect running

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

三、携带数据

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

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

    @RequestMapping("/showPageByRequest")
    public String showPageByRequest(HttpServletRequest request){
        System.out.println("showPageByRequest running");
        request.setAttribute("username","request");
        return "register";
    }
    @RequestMapping("/showPageByModel")
    public String showPageByModel(Model model){
        System.out.println("showPageByModel running");
        model.addAttribute("username","model");
        User user = new User();
        user.setPassword("password");
        model.addAttribute("user",user);
        return "register";

2、修改文件User.java,在register.jsp的表单中添加value属性,用于接收转发传递过来的数据。

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

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

showPageByRequest running

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

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

showPageByModel running

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