码大牛,成长于传智播客和黑马程序员的专家型顾问。大牛老师从本日开始推出一个固定栏目,推出关于技能、传授教化话题的干货和想法。每周二、周四,大牛老师会在微信公众年夜众号(boxuegu)和QQ(2011168841)空间同步更新。
公众年夜众号回答“0321”
不管是教课的老师还是企业事情职员,大体都明白编写程序常常采取不同的框架,乃至还有用自己写得框架做项目,如果此时你要不懂Servlet ,那么你就很难学会其他的框架。本日我们来讲的便是Servlet中的监听器,分别从定义、事理和实例给您全方位讲解。
什么是Servlet事宜监听器?
监听器便是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java工具的方法调用或属性改变,当被监听工具发生上述事宜后,监听器某个方法将立即被实行。
在Servlet规范中定义了多种类型的监听器,它们用于监听的事宜源分别为 ServletContext, HttpSession 和ServletRequest 这三个域工具。Servlet规范针对这三个工具上的操作,又把这多种类型的监听器划分为以下三种类型。
1. 监听三个域工具创建和销毁的事宜监听器;
2. 监听域工具中属性的增加和删除的事宜监听器;
3. 监听绑定到HttpSession 域中的某个工具的状态的事宜监听器。
大略的说:监听器便是一段java程序,用来监听另一个java工具方法调用和属性改变。
监听事理是什么?
记住以下四点:
1. 存在事宜源;
2. 供应监听器;
3. 为事宜源注册监听器;
4. 操作事宜源,产生事宜工具,将事宜工具通报给监听器,并且实行监听器相应监听方法。
你也可以记一下Servlet中8个监听器接口:
如何用Servlet监听器实现仿照在线踢人?
思路如下:
1. 实现登录功能
由于这里没有连接数据库,我们须要创建一个类UserDB.java,在该类中创建一个Map来存放合法用户的信息,也便是说在登录时判断该类中是否包含的输入的用户名,包含可登录成功,否则登录失落败。登录成功的用户信息存放到session中。
2. 保存用户的session
每个用户登录后都会有自己的session,我们须要在ServletContext中保存用户的session,可以监听session属性。如果session中添加了用户,我们把该用户以及它对应的session保存到ServletContext中,创建User.java用户属性类,并且该类实现HttpSessionBindingListener接口,实行绑定操作。
3. 那么用什么办法保存用户的session
由于一个用户对应一个session,以是这里我们用Map<String,HttpSession>类型的map来保存。须要把稳的是,由于任何用户登录时都须要用到这个map,而tomcat启动是会创建ServletContext,以是map该当在tomcat启动时初始化,这时创建一个监听器InitDataServletContextListener.java,实现ServletContextListener接口,用来初始化map。
4. 末了得到指定用户的session,将登录状态移除。
实现步骤:
1. 创建index.jsp页面
页面紧张包含两个链接,登录和查询所有登任命户。
2. 创建 login.jsp登录页面
该页面可以输入用户名,点击登录按钮,由于只是仿照登录,根据用户名判断,没有加人输入密码功能。
3. 创建UserDB.java类
在该类中 创建一个Map存放合法用户的数据。
4. 创建LoginServlet.java类
该类用来在登录时吸收用户名,判断其合法性,并且掌握页面跳转。
5. 创建InitDataServletContextListener.java 类
用于初始化用户数据
6. 创建User.java类
第一吸收用户属性,如用户名、密码、用户昵称,第二实现HttpSessionBindingListener接口,该类中有两个主要的方法,contextInitialized(ServletContextEvent sce)方法用于在用户登录成功时向map(用户缓存区)添加用户,contextDestroyed(ServletContextEventsce)方法是在用户登录状态被移除时,从map中删除该用户。
7. 在Web.xml 注册数据初始化监听器
8. 创建Showuser.jsp页面
(查询所有用户界面) 显示用户列表, 每条数据后有“踢出”按钮。点击该按钮,要求提交到KickServlet.java
9. 创建KickServlet.java类
该类用于实行“踢人”操作, 实际上是将Map中的某个用户根据用户名(key)删掉。
至此,踢出成功!
思考题:请您描述一下java事宜监听机制?
欢迎留言,答案将在文章下面评论区公布!
阅读更多
传授教化好助手(boxuegu)
教IT、学IT都会关注的公众年夜众号