同步请求的返回值类型 :
void : 啥也不返回
String :表示逻辑视图名
ModelAndView:该对象既有逻辑视图名,还可以携带去页面要展示的数据
同步请求:如何将controller层的数据携带到页面上。
1.使用ModelAndView作为方法的返回值类型
2.使用Map、Model、ModelMap、类型的参数 在前端页面用el表达式取值即可
注意:无论使用ModelAndView还是放到Map ,中springmvc底层都会把数据放发request域中
从域中取值
${username} 全域查找 默认从最小的域查找pageScope-->requestScope-->sessionScope-->ApplicationScope.
${requestScope.username}
@RequestMapping("testResponse") public ModelAndView testResponse(){ ModelAndView mv = new ModelAndView("result")
Book book = new Book(); book.setBookName("活着"); book.setPrice(89); mv.addObject("books", book);
//插入的数据也可以是调用的数据库的数据 return mv; }
2.Map类型的参数 。使用的时候 用String类型的返回值即可
@RequestMapping("testResponse") public String testResponse(Map<String,Object> map){ map.put("userName", "张三"); return "result"; } //在前端页面用el表达式取出即可
3.Model参数 和使用ModelMap 一样 使用的时候 用String类型的返回值即可
@RequestMapping("testResponse") public String testResponse(Model model){ model.addAttribute("username","张三"); return "result"; }
二、异步请求:Json
返回异步请求的数据 ,几乎各种数据都可以异步返回
Map-------------------->转化之后成为 json对象
对象、 --------------------->转化为json对象
对象列表(对象List) ------->转化后成为json数组
true
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据
controller 如何返回json数据:
1.导入json的包
2.在controller加一个@responseBody注解
3.在springmvc.xml中配置<mvc:annotation-driven/>
1.使用Map方式发送json数据
@RequestMapping("/json1") @ResponseBody public Map testJson1(){ Map map = new HashMap(); map.put("username","李四"); map.put("age","19"); return map; //此处的map 是new创建出来的 不是接收参数的那个map 那是同步请求操作用的 异步用new }
{"age":"19","username":"李四"}
Map类型的通过转化之后 自动转化为 对象的格式!!
2.对象类型的转化json 也转化成json对象的格式
@RequestMapping("/json2") @ResponseBody public Book testJson2(){ Book book = new Book(); book.setBid(1); book.setName("春暖花开"); book.setPrice(200.22); return book; }
{"bid":1,"name":"春暖花开","price":200.22}
3.对象列表(list) 转化为json之后 转化为json数组的形式
@RequestMapping("/json3") @ResponseBody public List<Book> testJson3(){ List<Book> list = new ArrayList<Book>(); //往List列表放两个对象 Book book = new Book(); book.setBid(1); book.setName("春暖花开"); book.setPrice(200.22); list.add(book); Book book1 = new Book(); book1.setBid(2); book1.setName("天龙八部"); book1.setPrice(250.22); list.add(book1); return list; }
[{"bid":1,"name":"春暖花开","price":200.22},{"bid":2,"name":"天龙八部","price":250.22}]
三、使用原生API
只需要在目标方法的参数上直接声明即可
@RequestMapping("/testRawApi") public String testRawApi(HttpServletRequest request, HttpServletResponse response, HttpSession session){ System.out.println(request); System.out.println(response); System.out.println(session); return "index"; }