controller的返回值可以有三种类型
1,String,返回的string默认为逻辑视图的名称,视图解析器会根据逻辑视图名称找物理视图
string的跳转方式为请求转发,
(1)服务器认为只发送一次请求
(2)跳转的地址不发生改变
(3)只能访问同一个项目下面的URL
(4)效率相对高
(5)转发是服务器行为,重定向是客户端行为
(6)请求转发可以传递数据
2,返回值是void类型,当返回值时void类型
默认返回请求URL/方法名.jsp
会报错404找不到页面
我试了一下给结尾加上了一个占位符,请求跳转到了占位符.jsp
这时候要使用servletAPI的request或者response做请求转发
或重定向
,或者直接作出响应给浏览器
后面可以加上return;加上之后之后的代码不再执行
(1),请求转发,ps:
request.getRequestDispatcher("/jsp/success.jsp").forward(request,response)
这里的URL要写上前面的路径,因为自己做调转,视图解析器不起作用
(2),重定向,ps:
response.sendRedirect(request.getContextPath()+"/success.jsp")
这里是之所以要获取项目路径,是因为重定向重新发送了请求,所以要加上request.getContextPath()
另外若果跳转的页面在web_inf下面,不能直接重定向
web_inf下面的资源都是不可以直接访问的
(3),直接对浏览器作出反应
ps:
response.setContentType(“text/html;charset=utf-8”);
response.getWriter().print(“哈哈哈哈哈哈!”)
3,返回类型为ModelAndView,springMVC提供的一个对象,代表了MVC Web程序中Model与View的对象,不过它只是方便您一次返回这两个对象的holder,Model与View两者仍是分离的概念,(引用其他博主的话)可以用来指定返回的具体页面还可以存值,
@RequestMapping("/view")
public ModelAndView modelAndView(){
ModelAndView mv=new ModelAndView();
System.out.println(“返回值为ModelAndView类型”);
mv.setViewName(“success”);
mv.addObject(“aaa”,“zwp”);
return mv;
}
在string类型的返回值中除了直接返回逻辑视图名称还可以使用
SpringMVC框架提供的转发和重定向forward,redirect关键字
这里使用和在void是差别的,这里和servletAPI并不相关,降低程序之间的耦合性
用法:
return “forward:/jsp/success.jsp”
return “forward:/jsp/success.jsp”
这里请求转发还是要写实际URL,但是重定向不用加项目名,SpringMVC已经给我们自动加上