SpringMVC第三弹。
SpringMVC-3-响应数据与文件上传
1. 响应数据
在使用SpringMVC响应数据时,控制器(controller)的返回值可以有三种。
字符串
controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
1
2
3
4
5
6
7
8
9
10
public String sayHello(HttpServletRequest request, HttpServletResponse response){
System.out.println("sayHello方法执行了");
User user = new User();
user.setUsername("Tobing");
user.setPassword("root");
user.setAge(19);
request.setAttribute("user",user);
return "success"; // 此处转发到success.jsp
}执行原理
void
可以使用Servlet原生的API作为控制器参数,通过request和response对象进行转发或重定向
1
2
3
4
5
6
7
8
9
10
11
12
public void sayVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("sayVoid方法执行了");
//1.使用request转向页面
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//2.通过Response页面重定向
//response.sendRedirect("sayHello");
//3.通过request直接写入响应结果
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("Hello World!!!");
}ModelAndView
SpringMVC还提供ModelAndView对象可以用作控制器返回值。
1
2
3
4
5
6
7
8
9
10
11
12
public ModelAndView testReturnModelAndView(){
System.out.println("testReturnModelAndView方法执行了");
ModelAndView mv = new ModelAndView();
User user = new User();
user.setUsername("Tobing");
user.setPassword("root");
user.setAge(19);
mv.addObject("user",user);
mv.setViewName("success"); // 设置逻辑视图名称,视图解析器会根据名称前往指定视图
return mv;
}ModelAndView对象提供addObject方法可以将Object类型的对象封装到request域中。同时提供setViewName方法设置逻辑视图名称,这时视图解析器就可以根据名前往指定视图。
转发和重定向
controller方法在使用String返回值时,支持使用forward(转发)和redirect(重定向)关键字进行响应。
1
2
3
4
5
6
7
8
9
public String testForwardOrRedirect(HttpServletRequest request){
User user = new User();
user.setUsername("actogo");
user.setPassword("root");
user.setAge(19);
//return "forward:/WEB-INF/pages/success.jsp"; // 相当于request.getRequestDispatchet("url").forward(request,response);
return "redirect:sayHello";
}
2. 响应json数据
前端页面的ajax请求,发送json数据
1 | <body> |
后端控制器使用RequestBody注解将json数据封装到指定JavaBean,使用ResponseBody注解将返回的JavaBean封装为json返回。
1 |
|