一.通过HttpServletRequest内置对象传值
1.格式:request.setAttribute(“user”,user)
2.取值方法:
- jsp写脚本:<%User user=(User) request.getAttribute(“user”)%>或<%= request.getAttribute(“user.name”)%>
- EL表达式:${ user.name },代替java表达式,这样写使jsp更简单
- Struts标签:如 (获取上下文中的属性值,格式为
<s:property value="#request.属性名" />
,范围前一定要加#,如果是action中的值,不用写#,直接取即可<s:property value="user.name" />)
request只有在转发页面中才能获取设置的user对象的值(springMVC返回逻辑视图,默认使用的转发机制来跳转的),user对象保存在request作用域中
二.通过HttpSession内置对象传值
1.格式:session.setAttribute(“user”,user)
2.取值方法:
- jsp写脚本:<%=session.getAttribute(“user.name”)%>或在java类中直接用session.getAttribute(“user.name”)
- EL表达式:${ user.name },代替java表达式,这样写使jsp更简单
- Struts标签:如 (获取上下文中的属性值,格式为
<s:property value="#request.属性名" />
,范围前一定要加#,如果是action中的值,不用写#,直接取即可<s:property value="user.name" />)
session相当于全局的变量,只要工程启动,只用session不过期,在任何地方都能取得,user对象保存在sessin作用域中,session默认的过期时间是30分钟,过期无效,可以去修改这个值
三.springMVC中使用Model或ModelMap传值
1.格式:
public String showItemInfo(@PathVariable Long itemId,Model model){
User user= new User();
...
model.addAttribute("user", user);
return "login";
}
Model是接口,ModelMap是类,ModelMap实现了Model接口,所以用Model和ModelMap传值使用方法一样,两者均可传值,只需要将上面的Model换成ModelMap即可
2.取值方法:
- EL表达式:${ user.name }
作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据
四.springMVC中使用ModelAndView传值
1.格式:
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
User user= new User();
...
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("user", user);
modelAndView.setViewName("/WEB-INF/jsp/login.jsp");
return modelAndView;
}
2.取值方法:
- EL表达式:${ user.name }
作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据
【总结】
1.request和session区别
request的生命周期是request请求域,一个请求结束,则request结束
session的生命周期是session会话域,打开一个浏览器请求一个网站的页面后,Session开始,当session超过时间限制后,session注销而失效;或是人为使用session.invalidate();使用session失效;或是关闭浏览器后,session还存在,但是这里已经无法获取session了,过一会它还是失效(通常保存用户信息,判断是否登录)
2.根本没有response.setAttribute()这个方法
有request.setAttribute()方法,请求时可以设置参数,那返回时应该也能返回参数啊,于是查request.setAttribute()和response.setAttribute()的区别,但是查了半天,也没找到相关文档,于是查spring的API,找到HttpServletResponse接口,哦。。。在接口中根本没有这个方法
3.Model、 ModelMap、 ModelAndView区别
Model、ModelMap:
- 传值,即传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据
ModelAndView:
- 传值,即传递控制方法处理结果数据到结果页面,也就是说我们把需要在结果页面上需要的数据放到ModelAndView对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据
- 设置转向地址(这也是和Model、ModelMap的主要区别)