springMVC中的HttpSession与Model
突然发问:相信很多人在做WEB开发的时候,在传属性的时候都用到过这两个,但是这两个有什么区别?使用场景?

1.1 spring的@MODELATTRIBUTE
这里有好几种向spring的Model添加数据的方式。数据或者对象通常通过在controller上的注释方法添加到spring中的model中去。下边这个例子中,@ModelAttribute用来将MyCommandBean的实例以key值为myRequestObject添加到model中去
@Controller
public class MyController {
@ModelAttribute("myRequestObject")
public MyCommandBean addStuffToRequestScope() {
System.out.println("Inside of addStuffToRequestScope");
MyCommandBean bean = new MyCommandBean("Hello World",42);
return bean;
}
@RequestMapping("/dosomething")
public String requestHandlingMethod(Model model, HttpServletRequest request) {
System.out.println("Inside of dosomething handler method");
System.out.println("--- Model data ---");
Map modelMap = model.asMap();
for (Object modelKey : modelMap.keySet()) {
Object modelValue = modelMap.get(modelKey);
System.out.println(modelKey + " -- " + modelValue);
}
System.out.println("=== Request data ===");
java.util.Enumeration reqEnum = request.getAttributeNames();
while (reqEnum.hasMoreElements()) {
String s = reqEnum.nextElement();
System.out.println(s);
System.out.println("==" + request.getAttribute(s));
}
return "nextpage";
}
// ... the rest of the controller
}
在一个请求的request中,任何使用@ModelAttribute注解的方法会在controller的handler方法(像上边例子汇总的requestHandlingMethod 方法)之前被调用。在这些handler方法执行前,这些方法把数据增加到java.util.map中最终添加到spring Model中去。这可以通过一个简单的实验证明,我创建了两个jsp页面:index.jsp和nextpage.jsp。index.jsp中的链接用来发送request到web应用中来触发Mycontroller中的requestHandlingMethod()方法。requestHandlingMethod()方法返回“nextpage”作为下一个视图逻辑上的名字,在这个例子中我们解析为nextpage.jsp。
当这个小的web站点用这种方式执行的时候,controller里边的System.out.println方法表明了@ModelAttribute方法是如何在handler方法之前运行的。它同样也展示了这个MyCommandBean被创建和添加到springModel中去的过程。
Inside of addStuffToRequestScope
Inside of dosomething handler method
--- Model data ---
myRequestObject -- MyCommandBean [someString=Hello World, someNumber=42]
=== Request data ===
org.springframework.web.servlet.DispatcherServlet.THEME_SOURCE
==WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sun Oct 13 21:40:56 CDT 2013]; root of context hierarchy
org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVER
==org.springframework.web.servlet.theme.FixedThemeResolver@204af48c
org.springframework.web.servlet.DispatcherServlet.CONTEXT
==WebApplicationContext for namespace 'dispatcher-servlet': startup date [Sun Oct 13 21:40:56 CDT 2013]; root of context hierarchy
org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping
==dosomething.request
org.springframework.web.servlet.HandlerMapping.bestMatchingPattern
==/dosomething.*
org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER
==org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@18fd23e4
2.1 session的概念
session即 会话,是客户为实现特定应用目的与系统的多次请求交互。它具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从 注册进入系统到注销退出系统 之间所经过的时间。
modelAttribute与sessionAttribute区别?
- modelAttribute:常量定义,比如key,value的映射。像下拉框,多选框等等
- sessionAttribute:跟用户会话相关的常量,如用户基本信息等
3.1 示例
显示当前登录用户的状态信息(二者效果一样)
controller
session.setAttribute("admin",admin);
session.setAttribute("loginUser",username);
页面
<a href="#">[[${session.admin.account}]]</a>
<a href="#">[[${session.loginUser}]]</a>
(session需要加上)
controller
model.addAttribute("msg", "账号或密码错误");
页面
<a href="javascript:;">[[${msg}]]</a>
(直接用)
4.1 为什么springmvc框架要使用model这个对象呢?
在之前原生的Servlet中就有了Session,为什么还要用到Model?
request他只是一个请求,他的作用就是从客户端发起一个请求,并且携带客户端发起的这个请求所带的参数,在业务层中进行参数的获取并且做出相对应的处理,到这里这个request请求对象的工作就应该结束了,剩下的就是客户端对这个请求和参数做出处理结果并且生成响应response返回客户端。
所以不应该用request进行存值,来达到模型层和视图层的一个连接,所以才使用model或是modelandview这个专门的对象来进行模型层的存在和视图层的取值
model会在模型层进行存值,在视图层中,他会去检查model对象中是否用这个属性,有他就会渲染出来,request请求结束后就会自动清除model的数据
这样一来具体的Model我们可以写在具体的Controller里的方法上,与视图层一一绑定。
springMVC中的HttpSession与Model的更多相关文章
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- SpringMVC中的Model和ModelAndView的区别
1.主要区别 Model是每次请求中都存在的默认参数,利用其addAttribute()方法即可将服务器的值传递到jsp页面中:ModelAndView包含model和view两部分,使用时需要自己实 ...
- 详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumen ...
- SpringMVC中Controller
详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] 目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodR ...
- SpringMVC中的session用法及细节记录
前言 初学SpringMVC,最近在给公司做的系统做登录方面,需要用到session. 在网上找了不少资料,大致提了2点session保存方式: 1.javaWeb工程通用的HttpSession 2 ...
- SpringMVC中参数绑定
SpringMVC中请求参数的接收主要有两种方式, 一种是基于HttpServletRequest对象获取, 另外一种是通过Controller中的形参获取 一 通过HttpServletReque ...
- SpringMVC中@Controller和@RequestMapping用法和其他常用注解
一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...
- 详解SpringMVC中Controller的方法中参数的工作原理
Spring MVC中Controller的处理方法的参数可以是Integer,String,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非 ...
- 详解SpringMVC中Controller的方法中参数的工作原理——基于maven
转自:http://www.tuicool.com/articles/F7byQn 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...
随机推荐
- Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
算法提高 盾神与砝码称重 时间限制:1.0s 内存限制:256.0MB 提交此题 查看参考代码 问题描述 有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码.盾神为 ...
- Java实现 蓝桥杯 算法提高 秘密行动
试题 算法提高 秘密行动 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面.这座大厦有一个神奇的特点,每层的高度都不一样, ...
- java实现第八届蓝桥杯生命游戏
生命游戏 题目描述 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...
- 关于uniapp获取当前距离屏幕顶部的距离
onPageScroll(e){ console.log(e); }
- 循序渐进VUE+Element 前端应用开发(7)--- 介绍一些常规的JS处理函数
在我们使用VUE+Element 处理界面的时候,往往碰到需要利用JS集合处理的各种方法,如Filter.Map.reduce等方法,也可以设计到一些对象属性赋值等常规的处理或者递归的处理方法,以前对 ...
- tensorflow2.0学习笔记第一章第二节
1.2常用函数 本节目标:掌握在建立和操作神经网络过程中常用的函数 # 常用函数 import tensorflow as tf import numpy as np # 强制Tensor的数据类型转 ...
- 4k壁纸
4k
- HashMap常问面试题整理
去面试时,hashmap总是被经常问的问题,下面总结了几道关于hashmap的问题. 1.hashmap的主要参数都有哪些? 2.hashmap的数据结构是什么样子的?自己如何实现一个hashmap? ...
- 停电后,在UPS电源下服务器自动关机脚本
一年总有那么几次莫明停电,公司的服务器经不起这样的折腾 写了一个断电后UPS备用电源自动关机的脚本 原理就是检测路由器网关是否能ping通,长时间持续ping不通视为停电了 路由器不要接到ups上 用 ...
- 我深爱的Java,对不起,我出轨了!!!呸!渣男!
我对Java情有独钟 大学三年来,我主学的编程语言一直是Java,为了学好它,我付出了很多心血.现在回想,确实是Java改变了我,造就了我. 因为Java,我自愿在学校组织学弟学妹,给他们讲解Java ...