session和model的区别

  1. session 里放的数据可以在其他页面使用,比如用户信息,

后端放入session:

  1. request.getSession().setAttribute("manage", manage);
  1. session生命周期内,前端的很多页面都可以使用
  2. <c:if test="${sessionScope.manage !=null}">
  3. <p>热泪欢迎${sessionScope.manage.getUsername()}</p>
  4. </c:if>
  1. model的数据,只能在接下来的页面使用,其他页面就不能使用,比如从数据库获得的list<对象>信息,在下一个页面,循环遍历展示

后端放入model

  1. model.addAttribute("item_categoryList", item_categoryList);

前端

  1. <c:forEach items="${item_categoryList}" var = "item_category">
  2. <tr>
  3. <td>${item_category.id}</td>
  4. <td>${item_category.name}</td>
  5. </tr>
  6. </c:forEach>
  1. 存入session后,取出数据使用get()方法,像是对象,而model使用点,有点类似json字符串

springmvc session和model解析

关于springMVC中的session,有2种使用方法,第一种是直接传递httpsession,第二种是使用@SessionAttributes(“userId”) 注解

这里附带一个帖子,别人写的特别好,是我看过的觉得最好的:http://www.cnblogs.com/waytofall/p/3460533.html

他里面详细的解析了这个注解的作用,httpsession的就不多说了,这里主要解释这个注解的原理

按照原文的解释,也试了原文的例子,确实效果是那样

也就是说这个注解会在把model中对应的的属性名自动保存在session中

而且,下次的请求到别的业务类时,如果这个业务类也标记了这个session注解,他会自动去找session中这个属性名并且填充到model对象中去

可以在地址中的例子的基础上添加一个业务类,尝试着不标记这个注解能不能拿到,和标记了之后在model中就可以拿到了

关于清除的,就只能从httpsession对象的remove的方法去清除了

model以下时个人看法和理解

model的作用跟request的setAttribute(arg0, arg1) 是一样的,都是把值或是对象进行一个保存,然后可以在视图上进行取值,同样都可以使用ognl表达式取值

那问题来了,为什么springmvc框架要使用model这个对象呢?

我个人的理解就是

request他只是一个请求,他的作用就是从客户端发起一个请求,并且携带客户端发起的这个请求所带的参数,在业务层中进行参数的获取并且做出相对应的处理,到这里这个request请求对象的工作就应该结束了,剩下的就是客户端对这个请求和参数做出处理结果并且生成响应response返回客户端。

所以不应该用request进行存值,来达到模型层和视图层的一个连接,所以才使用model或是modelandview这个专门的对象来进行模型层的存在和视图层的取值

model会在模型层进行存值,在视图层中,他会去检查model对象中是否用这个属性,有他就会渲染出来,request请求结束后就会自动清除model的数据

以上是个人对model和request的理解,快1点了,收拾收拾睡觉了