发一下牢骚和主题无关:
(1)什么是监听器?
是servlet标准当中定义的一种特殊的组件,用来监听容器发生的事件并且停止响应的处理。
容器会发生两大类事件:
a,生命周期相关的事件:容器创建或者销毁request,session,ServletContext(servlet上下文)这些对象时发生的事件。b,绑订相关的事件:
对request,session,ServletContext(servlet上下文)调用了setAttribute,removeAttribute发生的事件。
(2)如何写一个监听器?
step1, 写一个java类,实现响应的监听器接口(要看监听的事件类型: HttpSessionListener)。
step2, 在监听器接口对应的方法里面,实现监听的处理逻辑。
step3,注册(web.xml)
(3)ServletContext
1)什么是Servlet上下文?
容器在启动的时候,会为每个应用创建唯一的一个
符合ServletContext接口的一个对象。该对象会始终存在,
除非关闭容器。
2)如何获得servlet上下文?
a,GenericServlet供给了getServletContext方法。
b,ServletConfig供给了getServletContext方法。
c, FilterConfig供给了getServletContext方法。
d, HttpSession供给了getServletContext方法。
3)servlet上下文的作用?
a,绑订相关的方法
setAttribute,removeAttribute,getAttribute
request,session,ServletContext这三个对象都有绑订
相关的方法,应当优先应用生命周期短(request<session
<servlet上下文)的。
b, 拜访全局的初始化参数
step1, 应用<context-param>来配置,该参数可以被
所有的servlet,filter拜访。
step2, 应用ServletContext供给的getInitParameter方法
来获取参数值。
c, 获得实际部署时的物理路径。
String getRealPath(String path);
通过代码先懂得一下servletContext,即servlet上下文。
//获得ServletContext ServletContext sctx=getServletContext(); sctx.setAttribute("username","user1"); out.println("已将username绑定"+"到了ServletContext下面");
输出通过servletContext得到的内容:
ServletContext sctx=getServletContext(); String username=(String)sctx.getAttribute("username");
配置web.xml:
<!-- 全局初始化参数 --> <context-param> <param-name>version</param-name> <param-value>1.0</param-value> </context-param> <listener> <listener-class>web.CountListener</listener-class> </listener>
在servlet中得到该数据:
String version=sctx.getInitParameter("version"); out.println("version:"+version);
最后写一个统计在线人数的程序,利用到监听器知识,即触发某个事件时,对应的方法自动触发执行:
step1
编写servlet
import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class CountListener implements HttpSessionListener { //session对象一旦创建胜利,会执行该方法 private int count=0; public void sessionCreated(HttpSessionEvent arg0) { // TODO Auto-generated method stub count++; HttpSession session=arg0.getSession(); ServletContext sctx=session.getServletContext(); sctx.setAttribute("count", count); } //session对象被销毁会执行该方法 public void sessionDestroyed(HttpSessionEvent arg0) { // TODO Auto-generated method stub count--; HttpSession session=arg0.getSession(); ServletContext sctx=session.getServletContext(); sctx.setAttribute("count", count); } }
step2
配置全局化参数:
<listener> <listener-class>web.CountListener</listener-class> </listener>
step3,编写jsp文件
<body style="font-size:30px;"> 当前系统在线人数是: <%=application.getAttribute("count") %> <%=application.getAttribute("username") %> </br> <a href="logout.jsp">退出系统</a> </body>
step4,编写logout.jsp文件
<body> <% session.invalidate(); %> </body>
文章结束给大家分享下程序员的一些笑话语录: 马云喜欢把自己包装成教主,张朝阳喜欢把自己包装成明星,李彦宏喜欢把自己包装成的很知性,丁磊喜欢把自己包装的有创意,李开复总摆出一副叫兽的样子。看来的。其实我想说,缺啥补啥,人之常情。
---------------------------------
原创文章 By
方法和session
---------------------------------