
本文共 2631 字,大约阅读时间需要 8 分钟。
Controller 方法的返回值(上)
在我们之前写的Controller的方法中,返回值都写的是ModelAndView,其实还可以返回其他类型的对象,在实际应用中需要根据不同的情况来使用不同的返回值:
- ModelAndView
- String
- void
- 自定义类型
一、返回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页面:


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

注:show.jsp, welcome.jsp 都是放在 WEB-INF 这层目录下的,只有 login.jsp 是放在 webaoo 这一层下的。
测试:直接访问 WEB-INF 文件夹下的 welcome.jsp 页面的结果如下:

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}
发表评论
最新留言
关于作者
