SpringMVC返回值
字符串
/**
* 测试返回字符串
* @param model model
* @return 返回的字符串,通过视图解析器调整到jsp页面
*/
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("testString方法执行了。。。");
User user = new User("zjw哈哈","123456",18);
model.addAttribute("user",user);
//相当于重定向
return "success";
}
- 方法的功能和返回类型:
方法名称为 testString,其主要功能是处理一个 HTTP 请求并返回一个字符串。这个字符串通常用于指定要渲染的视图的名称。
- 参数 - Model:
方法接受一个 Model 类型的参数。在 Spring MVC 中,Model 是一个接口,用于定义一个模型来存储控制器处理数据的结果。这些数据然后可以被传递给视图,用于渲染响应。
在这个方法中,通过调用 model.addAttribute("user", user),一个名为 "user" 的属性被添加到模型中,属性值是一个 User 对象实例。这意味着当视图被渲染时,这个 User 对象的数据将可用于显示。
- 为什么可以直接写Model参数:
在 Spring MVC 中,当一个方法声明了 Model 作为参数,Spring 框架会自动为这个方法提供一个 Model 的实例。这是框架的一部分“依赖注入”功能。控制器方法不需要自己创建 Model 实例;框架会负责这个过程,并将实例传递给方法。
Model 参数的作用是允许开发者将数据添加到模型中,这些数据随后可以被视图访问和渲染。这是一种常见的模式,用于在 MVC(Model-View-Controller)架构中在控制器和视图之间传递数据。
转发和重定向
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("testVoid方法执行了。。。");
//1、请求转发 不会再调用视图解析器,需要写完整的资源路径
// request.getRequestDispatcher("/pages/success.jsp").forward(request,response);
//2、重定向
// response.sendRedirect(request.getContextPath()+"/index.jsp");
// response.sendRedirect(request.getContextPath()+"/user/testVoid2");
//3、直接打印
//解决中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.print("hello,<br>");
writer.print("<a href='#'>zzzzz</a>。");
}
/**
* 使用关键字的方式进行转发或者重定向,不会用到视图解析器
* @return
*/
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了。。。");
//请求转发 这个也会自动识别项目名
// return "forward:/pages/success.jsp";
//重定向 不用加项目名称
// return "redirect:/index.jsp";
return "redirect:/user/testString";
}
ModelAndView
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
//创建ModelAndView
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView方法执行了。。。");
//模拟从数据库中查询出User对象
User user = new User();
user.setUsername("朱俊伟");
user.setPassword("123");
user.setAge(18);
//把user对象存储到mv对象中,也会把user对象存入到request对象中
mv.addObject("user",user);
//跳转到哪个页面
mv.setViewName("success");
return mv;
}
- 方法的功能:
方法名称为 testModelAndView,其功能是创建一个 ModelAndView 对象,向其中添加数据,然后返回这个对象。
这个方法首先创建一个新的 ModelAndView 实例。然后,它模拟从数据库中查询出一个 User 对象,并将这个对象添加到 ModelAndView 实例中。
最后,方法通过 setViewName 方法设置视图名称为 "success",这指示视图解析器要渲染的视图(例如 success.jsp)。
- ModelAndView 对象的作用:
ModelAndView 是一个便捷的方式,用于在单个返回值中同时处理模型数据和视图信息。
addObject 方法用于向 ModelAndView 对象添加属性。在这个例子中,它添加了一个名为 "user" 的属性,其值为一个 User 对象实例。这意味着当视图被渲染时,这个 User 对象的数据将可用于显示。
setViewName 方法设置了要渲染的视图的名称。在这种情况下,方法返回后,Spring MVC 的视图解析器会寻找一个名为 success 的视图来渲染响应。
- 与 Model 的对比:
在其他 Spring MVC 控制器方法中,你可能看到使用 Model 或 ModelMap 类型的参数来传递模型数据,然后方法返回一个视图名称的字符串。这种方式将模型数据和视图分开处理。
ModelAndView 提供了一种更为紧密集成的方式,允许在单个对象中同时处理模型和视图,这在某些情况下可以使代码更清晰、更易于管理。