Servlet 监听器实例

1、简单介绍一下监听器

所谓监听器就是监听事件,然后针对相应的事件进行处理

监听器举例:ServletcontextListener、HttpSessionListener、HttpSessionAttributeListener

2、设计一个统计在线人数的实例

import java.util.LinkedList;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineListener implements HttpSessionAttributeListener,
		ServletContextListener, HttpSessionListener {
	private ServletContext application=null;
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		HttpSession hs=arg0.getSession();
		String user=(String) hs.getAttribute("username");
		LinkedList<String> online = (LinkedList<String>) application.getAttribute("online");
		online.remove(user);
		application.setAttribute("online", online);
	}

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		application=arg0.getServletContext();
		application.setAttribute("online", new LinkedList<String>());
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub
		HttpSession hs=arg0.getSession();
		LinkedList<String> online = (LinkedList<String>) application.getAttribute("online");
		String name=arg0.getName();
		if(name.equals("username")){
			online.add((String)arg0.getValue());
		}
		application.setAttribute("online", online);
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {
		// TODO Auto-generated method stub

	}

}
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.doGet(req, resp);
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.doPost(req, resp);
		PrintWriter out=resp.getWriter();
		String user=(String) req.getParameter("username");
		if(user!=null && !user.equals("")){
			req.getSession().setAttribute("username", user);
		}

		LinkedList<String> online= (LinkedList<String>) getServletContext().getAttribute("online");
		resp.setContentType("text/html;charset=utf-8");
		out.println("<html>");
		out.println("<head><title>Login</title></head>");
		out.println("<body>");
		out.println("<b><font size=\"+4\">");
		out.println("<font color=\"#FF0000\">The curent user's list is:<br/>");
		for(int i=0;i<online.size();i++){
			out.println(i+1+"."+online.get(i)+"<br/>");
		}
		out.println("<hr/>");
		out.println("<a href=\""+resp.encodeURL("logout")+"\">Logout</a>");
		out.println("</b></font>");

		out.println("</body>");
		out.println("</html>");
		out.flush();
		out.close();
	}

}
import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogoutServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.doGet(req, resp);
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		//super.doPost(req, resp);
		req.getSession().invalidate();
		LinkedList<String> online=(LinkedList<String>) getServletContext().getAttribute("online");
		resp.setContentType("text/html;charset=utf-8");
		PrintWriter out=resp.getWriter();
		out.println("<html>");
		out.println("<head><title>Log out</title></head>");
		out.println("<body>");
		out.println("<b><font size=\"+4\">");
		out.println("<font color=\"#FF0000\">The curent user's list is:<br/>");
		for(int i=0;i<online.size();i++){
			out.println(1+i+"."+online.get(i)+"<br/>");
		}
		out.println("<hr/><a href=\"index.html\">home page</a>");
		out.println("</font></body>");
		out.println("</html>");
	}

}
<listener>
 	<listener-class>OnlineListener</listener-class>
 </listener>

 <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>LoginServlet</servlet-class>
 </servlet>
 <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login</url-pattern>
 </servlet-mapping>

 <servlet>
        <servlet-name>logout</servlet-name>
        <servlet-class>LogoutServlet</servlet-class>
 </servlet>
 <servlet-mapping>
        <servlet-name>logout</servlet-name>
        <url-pattern>/logout</url-pattern>
 </servlet-mapping>
<html>
<head><title>index</title></head>
<body>
	<form action="login" method="post">
		username:<input type="text" name="username"/>
		<input type="submit" value="login"/><br/><br/>
	</form>
</body>
</html>

时间: 2024-10-27 12:27:16

Servlet 监听器实例的相关文章

Java Web开发——Servlet监听器

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改变

java基础篇---Servlet监听器

在写此篇前,看了一下园友写的,感觉其基础知识归纳的十分全面,我在此就不累赘的写了,链接地址(http://www.cnblogs.com/sherryueda/p/4273169.html), 我就写一下关于监听器的具体应用: 功能是负责监听WEB的各种操作,当相关的事件触发之后将产生事件,并对此事件进行处理,在WEB中可以对application.session.request三种操作进行监听. 对application监听: 对application监听,实际上就是对ServletConte

servlet监听器Listener(理论+例子)

Listener采用了观察者模式(24种模式之一),Listener是servlet的监听器,他可以监听客户端的请求.服务器端的操作等, 通过监听器,可以自动激发一些操作.比如:监听在线用户数量 当增加一个HttpSession时,就会激发sessinCreated(HttpSessionEvent sce)方法,这样就可以给在线人数+1了. 常见的监听器接口: ServletContextAttributeListener 监听对servletContext属性的操作,比如删除.增加.修改属性

servlet监听器;

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改变

Servlet监听器(转)

Java Web开发--Servlet监听器 一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对

(转)JavaWeb开发——Servlet监听器

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改变

Servlet监听器Listener

Listener实在servlet2.3中加入的,主要用于对Session,request,context等进行监控. 使用Listener需要实现响应的接口.触发Listener事件的时候,tomcat会自动调用Listener的方法. 在web.xml中配置标签,一般要配置在<servlet>标签前面,可配置多个,同一种类型也可配置多个 <listener> <listener-class>com.xxx.xxx.ImplementListener</list

【Servlet】1、Servlet监听器及相关接口

Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前.发生后可以做一些必要的处理. 接口: 目前Servlet2.4和JSP2.0总共有8个监听器接口和6个Event类,其中HttpSessionAttributeListener与 HttpSessionBindingListener 皆使用HttpSessionBindingEvent;HttpSessionListener和 HttpSessionActivationListener则都使用HttpSessionEve

JavaWeb开发——servlet监听器 listener

一.Servlet监听器的概念 Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext.HttpSession和ServletRequest等域对象的创建与销毁事件, 以及监听这些域对象中属性发生修改的事件. 监听对象: 1.ServletContext:application,整个应用只存在一个 2.HttpSession:session,针对每一个对话 3.ServletRequest:request,针对每一个客户请求 监听内容:创建.销毁.属性改