springmvc怎么处理返回值?springmvc如何执行?

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执行流程图:

springmvc怎么处理返回值?springmvc如何执行?.png

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工具网。

推荐阅读:

怎样用git管理两个服务器?git如何工作?

JAVA写程序如何实现两个矩阵的乘法运算?实例介绍

java接口可以创建对象吗?java接口如何实现?