监听程序当前无法识别连接符中请求的服务_[Servlet] 18 监听器
问题:
在 Servlet 技 术 中 我 们 学 习 了 request 、 session 、application 作用域对象,其主要作用是实现数据的在不同场景中的灵活流转。但是数据的具体流转过程我们是看不到的,比如作用域对象是什么时候创建和销毁的,数据是什么时候存取,改变和删除的。因为具体的流转过程看不到,所以也就无法再指定的时机对数据和对象进行操作,比如 session 销毁的时候,在线人数-1。
解决:
使用监听器
概念:
Servlet 监听器是 Servlet 规范中定义的一种特殊类,用于监听
ServletContext、HttpSession 和 ServletRequest 等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
ServletRequest和HttpServletRequest的区别:
HttpServletRequest和ServletRequest都是接口
HttpServletRequest继承自ServletRequest
HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。如
getHeader(), getMethod(),getSession()等等。
客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。
对象包含了客户端请求信息包括:
请求的地址,
请求的参数,
提交的数据,
上传的文件客户端的ip甚至客户端操作系统都包含在其内。
当HTTP转发给Web容器处理时,Web容器会收集相关信息,并产生HttpServletRequest对象,使用这个对象可以取得所有HTTP请求中的信息,可以在Servlet中进行处理,也可以转发给其他的Servlet/Jsp处理。
ServletRequestListener用于监听ServletRequest对象的创建和销毁,一个ServletRequest可以注册多个ServletRequestListener接口,request创建时调用requestInitialized(),request销毁时调用requestDestroyed()
监听对象:
Request
Session
Application
监听内容:
创建、销毁、属性改变事件
监听作用:
在事件发生之前,之后进行一些处理,比如统计在线人数
使用:
监听 request
监听 session
监听 application
案例:
统计网站在线人数
创建和使用步骤
一 创建一个普通java类实现指定的接口(从下列接口中选择)
1.监听request的创建和销毁:ServletRequestListener
requestInitialized(ServletRequestEvent sre)---创建
requestDestroyed(ServletRequestEvent sre)--销毁
形参:
- ServletRequestEvent可以获取当前监听到的request对象,
- 对request对象的中的资源进行操作。
1,1.监听request作用域数据的变更:ServletRequestAttributeListener
attributeAdded(ServletRequestAttributeEvent srae)--添加
attributeRemoved(ServletRequestAttributeEvent srae) --移除
attributeReplaced(ServletRequestAttributeEvent srae) --修改
形参:
- ServletRequestAttributeEvent可以获取当前被监听到的request中的数据。
- geName()返回监听到的数据的键
- getValue()返回监听的到的数据的值。
2.监听session的创建和销毁:HttpSessionListener
可用来做当前在线人数的统计功能
sessionCreated(HttpSessionEvent se)--创建
sessionDestroyed(HttpSessionEvent se)--销毁
形参:
- 获取当前被监听到的session对象
- 监听session的作用域数据的变更:
2.1 attributeAdded(HttpSessionBindingEvent event)--增加
2.2 attributeRemoved(HttpSessionBindingEvent event)--移除
2.3 attributeReplaced(HttpSessionBindingEvent event)--修改
形参:
- 获取当前监听到的session中的数据 getName()返回数据的键名
- getValue()返回数据的值
3.监听application对象的创建和销毁:ServletContextListener
可用来统计页面访问人数的操作或者投票操作
contextInitialized(ServletContextEvent sce)
contextDestroyed(ServletContextEvent sce)
形参:
- 获取application对象
2. 监听application对象的数据的变更:ServletContextAttributeListener
2.1 attributeAdded(ServletContextAttributeEvent event) --新增
2.2 attributeRemoved(ServletContextAttributeEvent event)--移除
2.3 attributeReplaced(ServletContextAttributeEvent event)--修改
形参:
- 获取当前被监听的数据 getName()返回数据的键名
- getValue()返回数据的值
二 在项目中的web.xml中配置监听器,让监听器生效
<listener><listener-class>监听器类的包名和类名</listener-class>
</listener>
示例:<listener><listener-class>com.lin.listener.MyListener</listener-class>
</listener>
在线人数的案例操作
每当有一个访问连接到服务器时,服务器就会创建一个session 来管理会话。那么我们就可以通过统计session 的数量来获得当前在线人数。
所以使用到的是HttpSessionListener √监听器。
public class MyListener implements HttpSessionListener,ServletContextListener{//监听Application对象@Overridepublic void contextInitialized(ServletContextEvent sce) {//声明计数对象int count=0;//获取Application对象ServletContext sc = sce.getServletContext();sc.setAttribute("count",count);}@Overridepublic void contextDestroyed(ServletContextEvent sce) {// TODO Auto-generated method stub}//监听Sesion对象@Overridepublic void sessionCreated(HttpSessionEvent se) {//获取Application对象中的计数器ServletContext sc = se.getSession().getServletContext();int count=(int) sc.getAttribute("count");//计数器自增++count;//然后再将计数器存储到application中sc.setAttribute("count", count);}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {//获取Application对象中的计数器ServletContext sc = se.getSession().getServletContext();int count=(int) sc.getAttribute("count");//计数器自减--count;//然后再将计数器存储到application中sc.setAttribute("count", count);}}
监听程序当前无法识别连接符中请求的服务_[Servlet] 18 监听器相关推荐
- ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务-Oracle连接错误
连接Oracle时突然报"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误 检查OracleServiceORCL服务是否启动! win10:此电脑→管理 ...
- ORA-12514 监听程序当前无法识别连接描述符中的服务
今天在用oracle的时候遇到了这样一个问题:"ORA-12514 监听程序当前无法识别连接描述符中的服务",网了看了好多别人的办法都没有解决,自己就试着解决了一下,嘿,还真解决了 ...
- ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
在安装完Oracle10g后,使用PL/SQL工具连接,提示如下的问题: ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务 解决办法是手动修改监听配置文件: # listen ...
- windows 2008 64位oracle11g部署问题(3)之ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务...
oracle11g安装完毕了,监听也起来了,发现通过客户端 本地网络服务名配置(如下图)链接oracle11g服务器,确报ORA-12514的错误,该如何解决呢? 1. 找到listener.ora监 ...
- windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 参考文章: (1)windows7 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求 ...
- ora-12514: tns: 监听程序当前无法识别连接描述符中请求的服务 问题解决
通过PlSQL Developer 访问oracle出现: ora-12514: tns: 监听程序当前无法识别连接描述符中请求的服务 通过重启服务的方式启动数据库,也不能连接上oracle数据库 ...
- oracle中srv添加监听服务,Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务...
Oracle 11g ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务 解决过程: 1. 找到listener.ora监听文件,具体位置:D:\app\Administrator ...
- oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法
早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...
- ora-12514TNS 监听程序当前无法识别连接描述符中请求服务的解决
这里写自定义目录标题 今天需要连一个新库,地址账户密码输进去之后报: ora-12514TNS 监听程序当前无法识别连接描述符中请求服务. 照着网上各种教程折腾了一天也没弄好.网上主要的解决办法是配置 ...
最新文章
- android sdk 源码解析
- android控件---自定义带文本的ImageButton
- Spring Boot 2.0与Java 9
- 这篇博士论文致谢句句诛心......
- MSsql server里日期不能直接存入date字段,要转换一下
- 基于JAVA+SpringBoot+Mybatis+MYSQL的园区招商管理系统
- windows下vbs脚本隐藏控制台
- mysql sql参数化查询_mybatis的sql参数化查询
- grub的boot loader安装在磁盘上的位置
- 长度游程编码的JAVA源代码,java游程编码
- 使用librosa库对音频信号进行采样以及分帧处理
- python判断素数(质数):for-else循环的理解与示例应用
- Unity Shader-后处理:简单的颜色调整(亮度,饱和度,对比度)
- NODE_多文件上传
- 佳能 MG3080 打印机换墨盒
- 删除打开方式中的选项
- spark代码 spark-submit提交yarn-cluster模式
- 【高中数学选修2-3】排列,组合,二项式定理,杨辉三角
- 安装完sdk后,在cmd运行adb,发现不行。
- 邻接表/图/DFS/BFS
热门文章
- 安卓获取mysql数据封装方法_android SQLite数据库封装
- 贝叶斯网络学习Python环境搭建(pgmpy)
- 【LeetCode】剑指 Offer 60. n个骰子的点数
- 【转】浅析Java中的final关键字
- 利用 Chrome 原生功能截图网页全图
- Hibernate操作数据库步骤(包括语法)
- chrome调试本地项目, 引用本地javascript文件
- BZOJ 2653 middle
- HDU 4255	 A Famous Grid 素数+BFS
- [JAVA实现]微信公众号网页授权登录,java开发面试笔试题