Listener执行流程(一)

2014-11-24 07:11:53 · 作者: · 浏览: 3

每次说起监听器,总是有些空的感觉,那么它到底是个什么东西呢?

一.概念

监听器也叫 Listener,是 Servlet的监听器,它可以监听客户端的请求,服务端的操作等。

监听器可以自动激发一些操作,比如监听在线的用户的数量. 当增加一个 HttpSession时,就激发 sessionCreated(HttpSessionEvent se) 方法,这样就可以给在线人数加 1。

二.执行原理

其实监听器的执行类似于触发器,当某些动作(接口中定义好的)执行时就会触发(至于到底是如何触发的就是底层的问题了)相应的Listener,执行相应的操作;当然如果没有执行对应的动作,则监听器就一直监听着,没有操作。

下面我来举个例子(监听在线用户的数量),来展示一下Listener的执行过程,先来看一下它的时序图:

\

login.jsp

[java] <%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%
String command = request.getParameter("command");
if ("login".equals(command)) {
if ("dan".equals(request.getParameter("userId"))
&& "123".equals(request.getParameter("password"))) {

//登陆成功将用户信息放到session中
session.setAttribute("user_name",
request.getParameter("userId"));

//设置超时,单位:秒
session.setMaxInactiveInterval(6000);


//重定向到主控页面
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
}
%>



登录
<SCRIPT language=java script>
function init() {
loginForm.userId.focus();
}






用户名:

密 码:





<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%
String command = request.getParameter("command");
if ("login".equals(command)) {
if ("dan".equals(request.getParameter("userId"))
&& "123".equals(request.getParameter("password"))) {

//登陆成功将用户信息放到session中
session.setAttribute("user_name",
request.getParameter("userId"));

//设置超时,单位:秒
session.setMaxInactiveInterval(6000);

//重定向到主控页面
response.sendRedirect(request.getContextPath() + "/index.jsp");
}
}
%>



登录
<SCRIPT language=java script>
function init() {
loginForm.userId.focus();
}






用户名:

密 码:




TestHttpSessionListener.java

[java] package listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class TestHttpSessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("-------------TestHttpSessionListener.sessionCreated---------------------");
}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {

}

}
package listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class TestHttpSessionListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("-------------TestHttpSessionListener.sessionCreated---------------------");
}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {

}

}

TestHttpSessionAttributeListener.java

[java] package listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;


public class TestHttpSessionAttributeListener implements
HttpSessionAttributeListener {

@Override
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("name==========" + se.getName());
System.out.println("value==========" + se.getValue());
if