返回值类型
1.String
直接返回给视图解析器处理,拼接前缀后缀,访问对应的页面。
2. void
不做任何处理的情况下,会发生404。
可以在对应的Controller方法中获取Servlet原生resquest和response进行转发或者重定向。
也可以使用输出流直接向浏览器响应:
response.getWriter().print("hello");
响应中文乱码问题:
在输出之前设置字符集
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
3. ModelAndView
ModelAndView对象存储数据与Model对象一样会将数据存到Request域中去。
setView(“success”);方法也会将字符串通过视图解析器解析进行跳转。
其实返回字符串的底层实现就是封装了一个ModelAndView对象。
springMVC提供的转发重定向
1. forward请求转发
/**
* 使用forward关键字进行请求转发
* "forward:转发的JSP路径",不走视图解析器了,所以需要编写完整的路径
* @return
* @throws Exception
*/
@RequestMapping("/delete")
public String delete() throws Exception {
System.out.println("delete方法执行了...");
// return "forward:/WEB-INF/pages/success.jsp";
return "forward:/user/findAll";
}
2. redirect
redirect与原生的servlet重定向有不一样的地方。
不需要再去加http://ip/端口/项目,底层自动帮我们加了。
这里需要注意,与原生的Servlet一样,重定向还是不能访问WEB-INF目录下的内容。
/**
* 重定向
* @return
* @throws Exception
*/
@RequestMapping("/count")
public String count() throws Exception {
System.out.println("count方法执行了...");
return "redirect:/add.jsp";
// return "redirect:/user/findAll";
}
ResponseBody 响应体
配合ajax,与json技术演示。
前端发送ajax请求,发送json数据。
$("#btn").click(function () {
$.ajax({
url : "testBody",
type:"post",
contentType : "application/json;charset=UTF-8",
data :'{"name":"eddie","password":"123456"}',
dataType : "json",
success : function (data) {
//返回的新的json对象(取决于后端返回什么),取出对应的数据
alert(data.name + data.password)
}
});
});
后端导入 jackson包后,使用RequestBody注解,即可把请求过来的json数据封装到一个对象中去。
通过ResponseBody注解,可以将User对象返回成json字符串,传到前端。
@RequestMapping(path="/testBody")
@ResponseBody
public User testBody(@RequestBody User user) {
System.out.println("ajax begin");
System.out.println(user);
user.setName("eddievim");
user.setPassword("666");
return user;
}