Session监听类HttpSessionListener介绍及在listener里取得request
Session监听类HttpSessionListener介绍及在listener里取得request
servlet-api.jar中提供了监听类HttpSessionListener,主要方法有两个,sessionCreated、sessionDestroyed,根据方法名就能明白是监听session的创建和销毁.
首先不可避免的要在sessionCreated方法中想要取得request对象(进而取得用户ip,浏览器等属性),但是HttpSessionEvent显然直接取不到request对象。
研究了下,发现spring(主要是context jar包)提供了监听类:RequestContextListener,可直接配在web.xml中,通过这个监听器,可以直接拿到request上下文。示例如下:
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
System.out.println(request.getHeader("user-agent"));
--------------------------------
另外,在sessionCreated虽然能取得request对象,但千万不能写request.getSession(true)类似的方法,这样会引起死循环,理由是sessionCreated监听session被创建时,此时的session还没有完全被建立,因为用request.getSession(true)并不能拿到我们想要的那个session实例(大家都知道request.getSession(true) 表示获取session对象,若session不存在则会再创建)。
于是就会悲剧的陷入:监听方法中用request取得session,没拿到,创建session,监听方法又生效,生效后继续取得session,没拿到,创建session... 这样的循环中。
综上,session实例应从HttpSessionEvent拿。
Session监听类HttpSessionListener介绍及在listener里取得request的更多相关文章
- [Java聊天室server]实战之二 监听类
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- Session监听事件的处理
设置Session监听 在web.xml文件中: <listener> <listener-class>cjq.login.listener.UpdateLogOutTime ...
- Android手势监听类GestureDetector的使用
在使用自定义视图的时候,对触屏事件的处理是比不可少的,有能力的可以自己写代码处理,这样更加的灵活.如果不想这么麻烦,Android提供了一个手势监听类GestureDetector,可以供我们使用.G ...
- Ogre 监听类与渲染流程
Ogre中有许多监听类,我们可以简单理解成C#中的事件,这些类作用都不小,说大点可能改变流程,说小点修改参数等,下面列举一些常用的监听类. FrameListener:由Ogre中的Root负责维护, ...
- jsp&servlet——session监听
session监听,需要实现HttpSessionAttributeListener接口 attributeAdded:监听添加session attributeRemoved:监听删除session ...
- 基于Java+Selenium的WebUI自动化测试框架(四)-----设置监听类
基于上一篇的内容,这里我们开始写监听类Listener.我这里写监听类的思路是,继承TestListenerAdapter这个类,然后对其中的方法进行重写.网上也有很多资料,建议先学习一下,然后写出来 ...
- java web session监听销毁跳转
1.了解如何使用HttpSessionListener监听session的销毁. 2.了解如何使用HttpSessionBindingListener监听session的销毁. 一. 使用HttpSe ...
- java中的四种监听类用法
在此列举四种方法: 自身类实现ActionListener接口,作为事件监听器 通过匿名类处理 通过内部类处理 通过外部类处理 下面依次介绍: 第一种:自身类实现ActionListener接口,作为 ...
- kafka监听类
package com.datad.dream.service; import com.alibaba.fastjson.JSON; import com.datad.dream.dao.KafkaI ...
随机推荐
- Android项目中实现native调用
转载自搜狗测试公众号,本人学习使用,侵权删 最近小编在做公司输入法项目中java与native交互部分的测试,先简单学习了java代码调用native代码的实现原理,本次与大家一起分享jni协议,了解 ...
- goto和函数调用
goto: 函数调用: 作用域 label在函数内定义,所以函数内 跳转操作 无条件 调用时先保存现场,复制实际参数,然后才是跳转 生存期 由于不是左值,它没有生存期,仅在编译期有意义. ...
- python爬虫(2):图片,翻译爬虫
import urllib.request#urllib.request.urlopen可以传入url或者Request对象#req=urllib.request.Request("http ...
- 【JZOJ6433】【luoguP5664】【CSP-S2019】Emiya 家今天的饭
description analysis 首先可以知道不符合要求的食材仅有一个,于是可以容斥拿总方案数减去选不合法食材的不合法方案数 枚举选取哪一个不合法食材,设\(f[i][j]\)表示到第\(i\ ...
- 编辑bbs文章 获取前端标题内容 和前端内容的方法
- 阿里小程序Serverless 操作指南
小程序云 小程序云(Mini Program Cloud)是阿里云面向小程序场景提供的一站式云服务,帮助开发者实现一云多端的业务战略,提供了有服务器和无服务器两种模式.云应用是有服务器模式,提供了包括 ...
- PHP FILTER_VALIDATE_FLOAT 过滤器
定义和用法 FILTER_VALIDATE_FLOAT 过滤器把值作为浮点数来验证. Name: "float" ID-number: 259 实例 <?php $var=1 ...
- 「FJOI2018」领导集团问题 解题报告
「FJOI2018」领导集团问题 题意:给你一颗\(n\)个点的带点权有根树,选择一个点集\(S\),使得点集中所有祖先的点权$\le \(子孙的点权,最大化\)|S|$(出题人语死早...) 一个显 ...
- mybatis源码探究(-)MapperProxyFactory&MapperProxy
在MyBatis中MapperProxyFactory,MapperProxy,MapperMethod是三个很重要的类. 弄懂了这3个类你就大概清楚Mapper接口与SQL的映射, 为什么是接口,没 ...
- JAVA学习之进制转换练习
public static void main(String[] args) { toBin(60); toBa(60); toHex(60); } /** 十进制-->二进制 */ publi ...