SpringMVC中Model和HttpServletRequest的区别是什么?HttpServletRequest可以完全替换Model吗?

时间:2016-08-25 03:18:53

标签: spring spring-mvc

我正在使用来开发我的网站项目,但是我想将参数传递给jsp页面,我发现了一个问题,想要得到一个答案:

SpringMVC中ModelHttpServletRequest的区别用法是什么?HttpServletRequest可以完全替换模型吗?

我发现我可以使用它们来传递参数,我发现它们似乎有相同的效果。现在我想知道何时使用Model以及何时使用HttpServletRequest,我觉得Model似乎是一个重复的类,可以完全由HttpServletRequest替换吗?

例如,如果我想通过将用户列表和当前日期传递给jsp页面,我可以通过三种不同方式完成:

  • 仅使用模型
@RequestMapping(value = "queryUserPage")
public String queryUserPage(int pageNo,int pageSize,Model model) {
    PageBean<UserModel> pageBean = new PageBean<UserModel>();
    pageBean.setPageNo(pageNo);
    pageBean.setPageSize(pageSize);
    pageBean.setResultList(userService.queryUserPage(pageBean));
    model.addAttribute("pageBean", pageBean);
    model.addAttribute("currentTime",new Date());
    return "settings/userManagement.jsp";
}

- 仅使用 HttpServletRequest

@RequestMapping(value = "queryUserPage")
public String queryUserPage(int pageNo,int pageSize,HttpServletRequest request) {
    PageBean<UserModel> pageBean = new PageBean<UserModel>();
    pageBean.setPageNo(pageNo);
    pageBean.setPageSize(pageSize);
    pageBean.setResultList(userService.queryUserPage(pageBean));
    request.setAttribute("pageBean", pageBean);
    request.setAttribute("currentTime",new Date());
    return "settings/userManagement.jsp";
}

- 同时使用 HttpServletRequest 模型

@RequestMapping(value = "queryUserPage")
public String queryUserPage(int pageNo,int pageSize,HttpServletRequest request,Model model) {
    PageBean<UserModel> pageBean = new PageBean<UserModel>();
    pageBean.setPageNo(pageNo);
    pageBean.setPageSize(pageSize);
    pageBean.setResultList(userService.queryUserPage(pageBean));
    request.setAttribute("pageBean", pageBean);
    model.addAttribute("currentTime",new Date());
    return "settings/userManagement.jsp";
}

所有这3种方法都可以,但我不知道使用模型而不是使用 HttpServletRequest 的优势。任何人都可以告诉我何时使用< strong>模型以及何时使用 HttpServletRequest 模型的优势是什么?是否可以完全替换为 HttpServletRequest

提前致谢!

1 个答案:

答案 0 :(得分:2)

选择留给开发人员。但是你需要记住的一些事情。

如果您使用HttpServletRequest,则必须明确映射变量并从前端获取变量(request.getAttribute)。

没有这样的事情,这是更好的,它只是你的愿望。因为都是请求范围。 但是如果你使用 Model ,你会有几个好处。

  • 无需映射,因为它会按路径名称{@ModelAttribute)自动查找。
  • 只需使用注释(@Valid)即可完成验证。

像这样,你也可以找到b / w @RequestParam@ModelAttributeHttpServletRequest的差异。

有时Model也会HttpServletRequest

只有HttpServletRequestServletContainer处理ModelDispatcherServlet stack.trigger("focus")处理。

最后它留给开发者,他/她可以根据他们的需要。