SpringMVC(八)----Controller方法的返回值

一、controller方法返回值

主要需要指定两个东西:指定返回到哪个页面, 指定返回到页面的数据

有三种形式:

1.1 ModelAndView 

  • modelAndView.addObject("itemList", list); 指定返回页面的数据
  • modelAndView.setViewName("itemList");   指定返回的页面

1.2 String(推荐使用)

  • 返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
  • 返回的字符串以forward:开头为请求转发
  • 返回的字符串以redirect:开头为重定向

1.3 返回void(使用它破坏了springMvc的结构,所以不建议使用)

  • 可以使用request.setAttribut 来给页面返回数据
  • 可以使用request.getRquestDispatcher().forward()来指定返回的页面
  • 如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称

a. 返回void的例子



在类上添加了窄化映射/items,所以,在这里的所有请求都要加上/items.

b. forward请求转发

Controller方法执行后继续执行另一个controller方法,如下商品修改提交后转向到商品修改页面,修改商品的id参数可以带到商品修改方法中。

forward方式相当于“request.getRequestDispatcher().forward(request,response)”,转发后浏览器地址栏还是原来的地址。转发并没有执行新的request和response,而是和转发前的请求共用一个request和response。所以转发前请求的参数在转发后仍然可以读取到。



修改之后,还是跳回到这个页面了。


c. Redirect重定向

Contrller方法返回结果重定向到一个url地址,如下商品修改提交后重定向到商品查询方法,参数无法带到商品查询方法中。
//重定向到queryItem.action地址, request无法带过去
return "redirect:queryItem.action";
redirect方式相当于“response.sendRedirect()”,转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的request和response。
由于新发起一个request原来的参数在转发时就不能传递到下一个url,如果要传参数可以/item/queryItem.action后边加参数,如下:

/item/queryItem?...&…..


相对路径: 相对于当前目录, 也就是在当前类的目录下, 这时候可以使用相对路径跳转
绝对路径: 从项目名后开始.
在springMvc中不管是forward还是redirect后面凡是以/开头的为绝对路径,不以/开头的为相对路径

例如:

forward:/items/itemEdit.action 为绝对路径

forward:itemEdit.action为相对路径

model底层是request实现的,但是model对request进行了扩展。重定向的时候request存储的数据会丢失,但是model中存储的数据不会丢失。

源码

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值