我正在使用spring-mvc来开发我的网站项目,但是我想将参数传递给jsp页面,我发现了一个问题,想要得到一个答案:
SpringMVC中Model和HttpServletRequest的区别用法是什么?HttpServletRequest可以完全替换模型吗?
我发现我可以使用它们来传递参数,我发现它们似乎有相同的效果。现在我想知道何时使用Model以及何时使用HttpServletRequest,我觉得Model似乎是一个重复的类,可以完全由HttpServletRequest替换吗?
例如,如果我想通过spring-mvc将用户列表和当前日期传递给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 ?
提前致谢!
答案 0 :(得分:2)
选择留给开发人员。但是你需要记住的一些事情。
如果您使用HttpServletRequest
,则必须明确映射变量并从前端获取变量(request.getAttribute
)。
没有这样的事情,这是更好的,它只是你的愿望。因为都是请求范围。
但是如果你使用 Model
,你会有几个好处。
@ModelAttribute
)自动查找。@Valid
)即可完成验证。像这样,你也可以找到b / w @RequestParam
或@ModelAttribute
和HttpServletRequest
的差异。
有时Model
也会HttpServletRequest
。
只有HttpServletRequest
由ServletContainer
处理Model
。DispatcherServlet stack
由.trigger("focus")
处理。
最后它留给开发者,他/她可以根据他们的需要。