SpringMVC框架学习(七)——Controller 方法的返回值(上)
发布日期:2021-05-07 10:01:53 浏览次数:20 分类:精选文章

本文共 2631 字,大约阅读时间需要 8 分钟。

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" %>    Title  weclome macay!

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

<%@ page contentType="text/html;charset=UTF-8" language="java" %>    

注意: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:请求转发
具体参考下面文章:

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" %>    Title ${   name}

在这里插入图片描述

上一篇:十进制转十六进制
下一篇:JAVA初窥-DAY05

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月04日 06时00分43秒