一、字符串
controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testString")
public String testString(Model model){
//模拟从数据库查询出 User 对象
User user = new User();
user.setUname("String 对象");
user.setAge(30);
user.setBirthday(new Date());
//model 对象
model.addAttribute("user",user);
return "success";
}
}
二、void
Servlet 原始 API 可以作为控制器中方法的参数:
@RequestMapping("/testReturnVoid")
public void testReturnVoid(HttpServletRequest request,HttpServletResponse response)
throws Exception {
}
在controller 方法形参上可以定义 request 和 response,使用 request 或 response 指定响应结果:
(1)使用 request 转向页面,如下:
request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
(2)也可以通过 response 页面重定向:
response.sendRedirect("testRetrunString")
(3)也可以通过 response 指定响应结果, 例如响应 json 数据:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json 串");
三、ModelAndView
ModelAndView 是 SpringMVC 为我们提供的一个对象,该对象也可以用作控制器方法的返回值。
该对象中有两个方法:
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(Model model){
System.out.println("testModelAndView 方法执行了。。。。");
// 创建ModelAndView对象
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView方法执行了...");
// 模拟从数据库中查询出User对象
User user = new User();
user.setUsername("ModelAndView");
user.setAge(30);
// 把user对象存储到mv对象中,也会把user对象存入到request对象
mv.addObject("user",user);
// 跳转到哪个页面
mv.setViewName("success");
return mv;
}
注意:我们在页面上上获取使用的是 requestScope.username
取的,所以返回 ModelAndView 类型时,浏览器跳转只能是请求转发。