在SpringMVC中操作Session、Request、Response对象
示例
@Service
public class UserServiceImpl implements UserService { @Autowired
private UserMapper userMapper; @Override
public void addOne(UserInput input) throws Exception {
Integer id = userMapper.insert(input);
setSessionAttribute("userId", id, Integer.class);
} @Override
public void rollbackAdd() throws Exception {
Integer id = getSessionAttribute("userId", Integer.class);
userMapper.remove(id);
} private <T> void setSessionAttribute(String key, T value, Class<T> valueClass) {
RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
ra.setAttribute(key, value, RequestAttributes.SCOPE_SESSION);
} @SuppressWarnings("unchecked")
private <T> T getSessionAttribute(String key, Class<T> valueClass) {
RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
Object value = ra.getAttribute(key, RequestAttributes.SCOPE_SESSION);
return (T) value;
} }
主要是利用到了RequestContextHolder这个类。
除此以外,还能通过RequestAttributes对象,分别获得Session、Request、Response对象
/**
* 获取HttpServletRequest对象
*/
public static HttpServletRequest instance() {
RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
return request;
} /**
* 获取HttpServletResponse对象
*/
public static HttpServletResponse instance() {
RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
HttpServletResponse response = ((ServletRequestAttributes) ra).getResponse();
return response;
} /**
* 获取HttpSession对象
*/
public static HttpSession instance() {
RequestAttributes ra = RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = ((ServletRequestAttributes) ra).getRequest();
HttpSession session = request.getSession();
return session;
}
避免了在控制层用HttpServletRequest入参,然后将request转递到业务层已获取HttpSession的“粗暴做法”
在SpringMVC中操作Session、Request、Response对象的更多相关文章
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序 http://www.360doc.com/content/14/03 ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- 137.在Django中操作session
在Django中操作session 在django中session默认情况下是存储在服务器的数据库中的,在表中会根据sessionid来提取指定的session数据,然后再把这个sessionid放到 ...
- SpringMVC中的session用法及细节记录
前言 初学SpringMVC,最近在给公司做的系统做登录方面,需要用到session. 在网上找了不少资料,大致提了2点session保存方式: 1.javaWeb工程通用的HttpSession 2 ...
- .net core中的Session以及HttpContext对象使用小结
session用于识别用户并保持用户信息,就是一个会话 ,在浏览器不关闭的前提下,可以保存用户的信息,比如登录的保存用户信息从一个网页跳转到另一个网页,你的用户信息就可以用session. .net ...
- Server,Servlet,ServletConfig,ServletContext,Session,Request,Response
Server流程 解析URL->找到应用->找到Servlet->实例化Servlet->调用init->调用service->返回响应->调用destroy ...
- spring学习之springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAn ...
- SpringMVC中servletFileUpload.parseRequest(request)解析为空获取不到数据问题
原因分析 首先我们来看下Spring mvc 中文件上传的配置 <bean id="multipartResolver" class="org.springfram ...
- Java-Spring-获取Request,Response对象
转载自:https://www.cnblogs.com/bjlhx/p/6639542.html 第一种.参数 @RequestMapping("/test") @Response ...
随机推荐
- MyBatis Generator 自动生成的POJO对象的使用(二)
四.Example Class使用说明 示例类指定如何构建动态where子句. 表中的每个非BLOB列都可以选择包含在where子句中. 示例是演示此类用法的最佳方法. 示例类可用于生成几乎无限制的w ...
- springboot注册到consul中报错:Spring MVC found on classpath, which is incompatible with Spring Cloud
今天在做springboot整合成springCloud并注册到consul中时,发现若注册到consule中成功 则不能启动swagger,且不能提供任何API服务,要是能提供API服务则不能注册到 ...
- 这个一个对ES6多个异步处理的并发继发思想的总结和理解
1.首先我们需要理解的是js中for循环.forEach循环.map循环的一些差异性,直接说了为后面说到的提供一些依据 1.1 for循环最基本,也是最容易理解的. 1.2 forEach和map用法 ...
- iOS音频学习笔记一:常见音频封装格式及编码格式
(1) pcm格式 pcm是经过话筒录音后直接得到的未经压缩的数据流 数据大小=采样频率*采样位数*声道*秒数/8 采样频率一般是22k或者44k,位数一般是8位或者16位,声道一 ...
- iOS Touch Id 开发
Touch Id Touch Id是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术.大家用得最多的可能是手机的解屏操作,不用在和以前一样输入手机的四位数密码进行验证.一方面不用担心 ...
- py网络编程学习笔记
一.异常处理 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 而错误分为两种: 1 ...
- [#Linux] CentOS 7 安装微信详细过程
微信安装 微信安装过程如下: 1,下载最新版本tar.gz压缩包 wget https://github.com/geeeeeeeeek/electronic-wechat/releases/down ...
- Linux/Aix日常报错整理
[root@localhost ~]# umount /mnt umount.nfs: /mnt: device is busy umount.nfs: /mnt: device is busy 问题 ...
- java - day013 - 流, FileInputStream, BufferedInputStream,
流 Stream 把数据的读写,抽象成数据在管道中流动. 流是单向的 输入流, 只能用来读取数据 输出流, 只能用来输出数据 流只能顺序读写数据 流只能一次性从头到尾读写数据 流动过的数据,不能反复流 ...
- ubuntu 启动图形界面 sudo init 5
Linux系统最早期的时候只有命令行界面,所有的工作都需要用Linux命令来完成. 随着系统的发展,以及图形界面系统的出现,Linux也出现了图形界面,使得Linux系统不再是只有计算机的专业人士才可 ...