在开始先要知道我们可以通过HttpSessionListener接口监听HTTP会话的创建,销毁的信息;通过HTTPSessionActivationListener监听HTTP会话的active,passivate情况;通过HttpSessionBindingListener监听HTTP会话中对象的绑定信息;通过HttpSessionAttributeListener监听HTTP会话中属性的设置情况 。
下面写个具体的例子:
监听HTTP会话程序
测试会话监听的程序index.jsp
当访问上面页面时就会出现一个登录框,输入后进入display.jsp显示刚才输入的内容
会话信息显示的程序 display.jsp
单击管理即进入管理页面session.jsp,单击注销就会进入 会话注销页面 logout.jsp使 HTTP会话无效
会话管理程序 session.jsp
注销会话的程序 logout.jsp
强制移除会话的程序 end.jsp
部署文件 web.xml
对请求的监听
在Servlet2.4规范中,新加了一个技术,就是可以监听客户端的请求。一旦能够在监听程序中获取客户端的请求,就可以对请求进行统一处理。比如做一个WEB管理程序,如果在梧桐访问,就可以不登录,如果是远程访问,那么就需要登录。这样我们就可以 监听客户端的请求,从请求中获得客户端地址,并通过这个地址做出对应的处理。
我们在上面例子的基础上再扩展一下!
package eflylab;
import javax.servlet.*;
public class MyRequestListener
implements ServletRequestListener,ServletRequestAttributeListener
{
//ServletRequestListener
public void requestDestroyed(ServletRequestEvent sre)
{
logout("request destroyed");
}
public void requestInitialized(ServletRequestEvent sre)
{
//在这个方法里,获得客户端请求对象,然后通过这个请求对象获得访问
//的客户端IP地址。如果该地址是“127”开的,那么就认为它是从本机访问
//就在请求中设置一个isLogin的属性,并且这个属性的值为Boolean(true)
//对象,如果不是从本机访问,那么就必须把这个属性设置成Boolean(false)对象
logout("request init");//日志
ServletRequest sr=sre.getServletRequest();
if(sr.getRemoteAddr().startsWith("127"))
sr.setAttribute("isLogin",new Boolean(true));
else
sr.setAttribute("isLogin",new Boolean(false));
}//ServletRequestListener
//ServletRequestAttributeListener
public void attributeAdded(ServletRequestAttributeEvent event)
{
logout("attributeAdded('" + event.getName() + "', '" +
event.getValue() + "')");
}
public void attributeRemoved(ServletRequestAttributeEvent event)
{
logout("attributeRemoved('" + event.getName() + "', '" +
event.getValue() + "')");
}
public void attributeReplaced(ServletRequestAttributeEvent event)
{
logout("attributeReplaced('" + event.getName() + "', '" +
event.getValue() + "')");
}//ServletRequestAttributeListener
private void logout(String msg)
{
java.io.PrintWriter out=null;
try
{
out=new java.io.PrintWriter(new java.io.FileOutputStream("c:\\request.txt",true));
out.println(msg);
out.close();
}
catch(Exception e)
{
out.close();
}
}
}
import javax.servlet.*;
public class MyRequestListener
implements ServletRequestListener,ServletRequestAttributeListener
{
//ServletRequestListener
public void requestDestroyed(ServletRequestEvent sre)
{
logout("request destroyed");
}
public void requestInitialized(ServletRequestEvent sre)
{
//在这个方法里,获得客户端请求对象,然后通过这个请求对象获得访问
//的客户端IP地址。如果该地址是“127”开的,那么就认为它是从本机访问
//就在请求中设置一个isLogin的属性,并且这个属性的值为Boolean(true)
//对象,如果不是从本机访问,那么就必须把这个属性设置成Boolean(false)对象
logout("request init");//日志
ServletRequest sr=sre.getServletRequest();
if(sr.getRemoteAddr().startsWith("127"))
sr.setAttribute("isLogin",new Boolean(true));
else
sr.setAttribute("isLogin",new Boolean(false));
}//ServletRequestListener
//ServletRequestAttributeListener
public void attributeAdded(ServletRequestAttributeEvent event)
{
logout("attributeAdded('" + event.getName() + "', '" +
event.getValue() + "')");
}
public void attributeRemoved(ServletRequestAttributeEvent event)
{
logout("attributeRemoved('" + event.getName() + "', '" +
event.getValue() + "')");
}
public void attributeReplaced(ServletRequestAttributeEvent event)
{
logout("attributeReplaced('" + event.getName() + "', '" +
event.getValue() + "')");
}//ServletRequestAttributeListener
private void logout(String msg)
{
java.io.PrintWriter out=null;
try
{
out=new java.io.PrintWriter(new java.io.FileOutputStream("c:\\request.txt",true));
out.println(msg);
out.close();
}
catch(Exception e)
{
out.close();
}
}
}
在MyRequestListener中,实现了对客户端请求和请求中参数设置的监听。要实现这二个监听功能,需要实现ServletRequestListener和ServletRequestAttributeListener接口 。
如果在本机访问 ,
则直接调用http://127.0.0.1:8088/test/display.jsp页面,如果在另外机子上访问,则出现登录界面 index.jsp