处理器的返回值介绍
(1)Servlet将结果返回浏览器的方式
- 请求转发:带数据
- 重定向:不带数据
- 异步:json数据发给页面的js,js组织标签显示
Servlet里面编写响应浏览器的代码都要调用response
(2)springmvc的方法设计了多种返回值类型
- ModelAndView
- void
- String :请求转发,重定向,json数据
处理器的返回值-ModelAndView
(1)ModelAndView 是SpringMVC提供模型视图
(2)作用
设置数据
addObject(key,value)
这个方法相当于request.setattribute,在页面上直接使用${attributeName}取值;
设置页面
setViewName(逻辑视图)
逻辑视图:就是文件的名称
跳转的时候,视图解析器会对内容拼接前缀与后缀
@Controller
public class Demo02ReturnController {
@RequestMapping("demo01.action")
public ModelAndView test01(){
Person p1 = new Person(1,"jack","1234");
Person p2 = new Person(2,"rose","1234");
List<Person> list = new ArrayList<Person>();
list.add(p1);
list.add(p2);
ModelAndView mv = new ModelAndView();
mv.addObject("list",list);
mv.setViewName("demo04_update_person");
return mv;
}
处理器的返回值-void
(1)方法返回值类型写上void
此时,参数写上request,response,调用它们带设置参数与请求转发或者重定向。
(2)因为返回值类型为void,没有返回值,所以视图解析器不对内容拼接前缀与后缀
。
(3)没有体现springmvc的优势
@RequestMapping("demo02.action")
public void test02(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求转发
req.setAttribute("name","请求转发");
req.getRequestDispatcher("demo05.jsp").forward(req,resp);
}
处理器的返回值-String
(1)方法返回值类型写上String
方法内返回 页面名称
return语句加一个普通的字符串,其本质就是请求转发
。
(2)如果携带数据呢?
方法参数写上Model
,比ModelAndView 少了View
》Model是SpingMVC提供的一个模型类,该类不需要自己创建对象,系统自动创建。
(3)Model作用
Model可以用来向页面传递参数,其本质就是向request域对象中存数据
。
(4)后台代码
model.addAttribute(“item”, item);
就相当于request.setAttribute(“item”,item);
@RequestMapping("demo03.action")
public String test03(Model model){
//Model 可以设置数据,自动由视图解析器带到页面
model.addAttribute("data","Hello");
//逻辑视图,也就是文件名字
return "success";
}
处理器的返回值-String-转发和重定向
(1)什么是逻辑视图与物理视图
页面名称叫逻辑视图
,不是真正的页面地址
但是可以由视图解析器进行拼接,前缀+逻辑视图+后缀
,得到真正的页面地址,即物理视图
。
前缀和后缀在springmvc.xml配置文件中配置。
(2)返回值可以添加指令
》1:forward 请求转发
forward 指令:物理视图。
》2:redirect 重定向
redirect 指令:物理视图
特点:视图解析器不对指令后的内容拼接前缀与后缀
springmvc会为我们在访问路径上自动添加项目名
即使是重定向指令,springmvc也能帮我们携带数据
(3)指令也可以访问控制器方法
如果该方法所属类上也设置了@RequestMapping()路径,就应该这样写好路径。
return "redirect:/类上路径名/方法上路径名"
@RequestMapping("demo04.action")
public String test04(Model model){
//Model 可以设置数据,自动由视图解析器带到页面
model.addAttribute("data","Hello");
// return "forward:WEB-INF/jsp/success.jsp";
// return "redirect:http://www.baidu.com";//访问外网
// return "redirect:demo05.jsp";//访问内部
return "redirect:demo01.action";//访问控制器方法
}