SpringMVC框架学习(七)——Controller 方法的返回值(上)

本文详细介绍了SpringMVC框架中Controller方法的多种返回值类型,包括ModelAndView、String和自定义类型等,探讨了它们的应用场景及如何在前后端交互中有效使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Controller 方法的返回值(上)

在我们之前写的Controller的方法中,返回值都写的是ModelAndView,其实还可以返回其他类型的对象,在实际应用中需要根据不同的情况来使用不同的返回值:

  1. ModelAndView
  2. String
  3. void
  4. 自定义类型
一、返回ModelAndView

如果是前后端不分的开发,Controller的方法执行完毕后,需要跳转到jsp或其他资源,且又要传递数据, 此时方法我们返回 ModelAndView,即数据模型+视图:

@Controller 
@RequestMapping("/test")
public class MyController {

    @RequestMapping(value = "/hello.do")
    public ModelAndView test(HttpServletRequest request, HttpServletResponse response, String name, String age) throws Exception {
        //装载模型数据和逻辑视图
        ModelAndView mv = new ModelAndView("show");
        //添加模型数据
        mv.addObject("name","Hello World!");
        return mv;
    }
}

Model 中,放我们的数据,然后在 ModelAndView 中指定视图名称。
但是如果只传递数据,或者只跳转jsp或其他资源的话,使用ModelAndView就显得有些多余了。

二、返回string

如果controller中的方法在执行完毕后,需要跳转到jsp或者其他资源上,此时就可以让该方法返回String类型。

1、返回一个逻辑视图名
@Controller
@RequestMapping("/test2")
public class MyController2 {
    @RequestMapping("/hello.do")
    public String test(){
        return "welcome";
    }
}

这里的字符串“welcome”是一个工程内部的逻辑视图名称,即“WEB-INF\jsp\welcome.jsp”,因为在视图解析器中配置了前后缀,这里表示方法结束后页面最终会跳转到网站根目录下的 welcome.jsp页面。

welcome.jsp页面如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
  weclome macay!
</body>
</html>

login.jsp页面的form表单如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <form action="test2/hello.do">

        <input type="submit" >
    </form>
</head>
<body>

</body>
</html>

注意:form表单中action的路径问题,若出错将404错误:

1、提交时,若是以action/开头,则表示使用绝对路径,需要在action加项目名;这里即为action="/springmvc08_war/test2/hello.do"。
2、action不是以/开头,则表示是相对路径,此时不需要在action处加项目名,直接是action=“test2/hello.do”,文中就使用的是这种。

login.jsp页面点击提交按钮将跳转至welcome.jsp页面:
在这里插入图片描述
在这里插入图片描述
这里有个问题:我想访问某个页面我直接去输入这个页面的地址 /welcome.jsp 不就可以了吗,为什么还要先去请求 SpringMVC,再由它返回呢?

解答:对于 webapp 这一层目录下面的页面,用户如果知道某个 jsp 页面可以直接访问。但是,通常情况下为了保证页面的安全,我们一般的做法是在 webapp这一层目录下只留一个引导页面(index.jsp)作为跳转,把网站相关的页面放入 WEB-INF文件夹下保护起来。因为放在 WEB-INF文件夹下的页面没有办法通过地址栏直接访问,只能通过后台的跳转来间接的访问,所以就需要请求 SpingMVC 来返回相应的页面。
在这里插入图片描述

注:show.jsp, welcome.jsp 都是放在 WEB-INF 这层目录下的,只有 login.jsp 是放在 webaoo 这一层下的。

测试:直接访问 WEB-INF 文件夹下的 welcome.jsp 页面的结果如下:
在这里插入图片描述
所以我们就没有办法直接从地址栏去访问 WEB-INF 下的 welcome.jsp 页面了,只能通过 SpringMVC 来进行页面的跳转了。

2、请求转发和重定向

String 类型的返回值除了返回一个可以被视图解析器解析的视图名以外,还可以返回 含有 redirect 或 forward 标签的字符串,如下:
redirect:重定向
forward:请求转发
具体参考下面文章:
https://blog.youkuaiyun.com/yu342107056/article/details/86421052
http://www.monkey1024.com/framework/1288

3、与Model对象一起使用

Model它是一个接口,写在controller的方法中的时候(应该写到 参数的声明部分),spring mvc会为其进行赋值。我们可以使用Model对象来传递数据,也就是说我们可以使用Model传递数据并且将方法返回值设置为String类型,通过这种方式实现与方法返回ModelAndView一样的功能。

@Controller
@RequestMapping("/test3")
public class MyController3 {
    @RequestMapping("/hello.do")
    public String test(Model model){
        model.addAttribute("name", "my name is macay");
        return "show";
    }
}

show.jsp页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 ${name}
</body>
</html>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值