Spring MVC 是 Spring 框架的一部分,它角色划分清晰,分工明细,是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,那springmvc怎么处理返回值?下面来我们就来给大家讲解一下。
一,ModelAndView
@RequestMapping("/threadRequest*") public ModelAndView threadRequest() { ModelAndView mv = new ModelAndView(); mv.setViewName("index"); mv.addObject("user", "王五"); return mv; }
通过ModelAndView构造方法可以指定返回的页面名称,也可以通过setViewName()方法跳转到指定的页面 ,
使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。
调用addObject()方法将值设置到一个名为ModelMap的类属性,ModelMap是LinkedHashMap的子类,
二,Model
Model是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。
model.addAttribute("pojo", pojo);
三,ModelMap
Model 是一个接口, 其实现类为ExtendedModelMap,继承了ModelMap类。
四,Map
@RequestMapping("/show") public Map < String, String > getMap() { Map < String, String > map = new HashMap < String, String > (); map.put("key1", "value-1"); map.put("key2", "value-2"); return map; }
五,View
可以返回pdf excel
六,String
@RequestMapping("/RequestMethod") public String index(Model model) { String retVal = "user/index"; List < User > users = userService.getUsers(); model.addAttribute("users", users); return retVal; }
1、如果返回值为null,那么以请求名作为视图名进行跳转
2、如果指定返回值,那么按照指定返回值作为视图名进行跳转,可以通过model,modeMap携带数据。
3、如果返回值带有forward或者redirect前缀,那么将会进行相应的请求或重定向,不过不能通过mvc的数据模型携带数据,可以通过ServletApi携带数据。
七,Void
@RequestMapping("/index") public void firstRequest(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws ServletException, IOException { UserInfo info=new UserInfo(); info.setUser_id(1); info.setUser_name("张三"); /** * Json格式传递 */ response.setCharacterEncoding("UTF-8"); String value=JSON.toJSONString(info); response.getWriter().write(value); }
八,Object
@RequestMapping("/fourthRequest") @ResponseBody //响应体返回数据时,除了手动装换JSON格式字符串以外可以使用jackson public Object fourthRequest() { List < UserInfo > userList = new ArrayList < > (); UserInfo info = new UserInfo(); info.setUser_id(1); info.setUser_name("张三"); UserInfo info2 = new UserInfo(); info2.setUser_id(2); info2.setUser_name("李四"); userList.add(info); userList.add(info2); return userList; }
1.当方法返回值为Null时,默认将请求路径当做视图 /jsp/thread/secondRequest.jsp 如果说没有试图解析器,如果返回值为Null携带数据只能用JSON
2.当方法返回值为String类型字符串时,就是视图的逻辑名称
3.当返回对象或者集合数据时,要使用Json格式字符串,可选fastJson手动转换,也可以使用jackson自动转换
springmvc如何执行?
springmvc执行流程图:
1. 用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
2. 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
3. DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
4. HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
5. Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
6. HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
7. DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
8. ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
9. DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
10. 视图负责将结果显示到浏览器(客户端)。
这样就完成了springmvc的执行流程,springmvc容易理解,上手快并且容易理解,它的使用频率还是很高的!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。
推荐阅读: