/**
* 传递参数的四种方式:
* 1.使用Model方式(采用!!!)
* 2.通用ModelAndView方式
* 3.HttpServletRequest方式(不建议使用)
* 4.通过返回值传参(不建议使用)
* 跳转方式: 1.重定向 2.请求转发
* @author 嗯
*/
@Controller
public class Demo{
/*
* 1.使用Model方式(采用!!!)
*/
@RequestMapping("/data1")
public String demo1(Model model){
model.addAttribute("data","数据:李四");//设置数据到前台
User u = new User();
u.setUsername("张三");
//添加模型数据,key的值为对象的类型首字母小写 ex:User-->user
model.addAttribute(u);
return "test.jsp";
}
/*
* 2.通用ModelAndView方式
*/
@RequestMapping("/data2")
public ModelAndView demo2(){
ModelAndView mav = new ModelAndView();//模型和视图对象
mav.addObject("data","数据:张三");//设置数据到前台
User u = new User();
u.setUsername("李四");
//添加模型数据,key的值为对象的类型首字母小写 ex:User-->user
mav.addObject(u);
//添加跳转的路径
mav.setViewName("/test.jsp");
return mav;
}
/*
* 3.HttpServletRequest方式(不建议使用)
*/
@RequestMapping("/data3")
public void demo3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
request.setAttribute("data", "数据:hello");
request.getRequestDispatcher("test.jsp").forward(request, response);
}
/*
* 4.通过返回值传参(不建议使用):
* SpringMVC会自动创建一个ModelAndView对象,并且调用添加模型 mav.addObject("user", user);
* 并且访问路径就是视图的名称 /data4 mav.setViewName("/data4");
* 注意:需配置视图解析器解决:ViewResolver
*/
@RequestMapping("/data4")
public User demo4(){
User u = new User();
u.setUsername("王五");
return u;
}
/*
* 请求转发(forward):
* 上面4个案例都是转发,转发的值都是放到request请求作用域,下一个页面可以取出
* Url地址不会改变
*/
@RequestMapping("/data5")
public String demo5(Model model,HttpSession session){
model.addAttribute("data", "数据:使用model传递");//可以取出数据
User u = new User();
u.setUsername("张三");
model.addAttribute(u);
session.setAttribute("s", u);//可以取出数据
//return "/test.jsp";//返回路径
return "forward:/test.jsp";//-->相当于手动指定了跳转的路径
}
/*
* 重定向(redirect):
* 重定向就是发出一个全新的请求,
* 如果把值放到request请求,下一个页面不能取出
* 如果把值放到session会话请求,下一个页面可以取出
* url地址会改变
*/
@RequestMapping("/data6")
public String demo6(Model model,HttpSession session){
// model.addAttribute("data","张三");//不可以取出数据
session.setAttribute("s", "张三session");//可以取出数据
return "redirect:/test.jsp";
}
}
SpringMVC配置视图解析器:
会自动添加到返回的路径中,针对requestMapping中的路径不会添加
SpringMVC默认:InternalResourceViewResolver : 支持默认视图,采用forward,redirect。
视图名规则:不写前缀默认为"转发"
视图名字符串前缀:
forward:/xxx.jsp ->采用转发
redirect:/xxx.jsp ->采用重定向
等等。。。。。