Webçå¬å¨
çå¬å¨ç主è¦ä½ç¨å°±æ¯çå¬ï¼å½ç®æ åçååçæ¶åå°±ä¼è§¦åä¸å®çæ¹æ³ï¼è¿ä¹å°±æ¯æè°çäºä»¶è§¦åæºå¶ãå¨è¿ç§æºå¶ä¸è¦æä¸ä¸ªè¦ç´ ï¼ä¹å°±æ¯äºä»¶ï¼äºä»¶æºï¼å¤çäºä»¶çæ¹æ³ãè¿ä¸è¦ç´ ä¹é´æ¯ç¸äºå¶çº¦çã䏿¦äºä»¶å¤çæ¹æ³è¢«è§¦åå¿ å®æäºä»¶åçï¼ä¹å°±å¯ä»¥å¾å°è§¦å çäºä»¶ï¼éè¿äºä»¶ä¹å°±å¯ä»¥å¾å°äºä»¶æºï¼ä¹å°±è°è§¦åäºäºä»¶ï¼è¿æ ·æ®å¯ä»¥å°è¿ä¸ä¸ªè¦ç´ èç³»å¨ä¸èµ·äºãä¸ä¸ªäºä»¶æºå¯ä»¥æå¤ä¸ªè§¦åäºä»¶ï¼èä¸ä¸ªè§¦åäºä»¶çåçå°æå¤ä¸ªæ¹æ³æ¥è°ç¨ï¼è¿ä¹å°±æ¯æè°çä¸å¯¹å¤å ³ç³»ï¼éè¿ä¸å¯¹å¤å ³ç³»æä»¬å¾å®¹æä»å¤ç«¯å¾å°ä¸ç«¯ï¼ç¸åä»ä¸ç«¯æ æ³å¾å°å¤ç«¯ï¼è¿ä¸ªéç大家齿¯å¾æ¸ æ¥çï¼æä»¥ä¹å°±å¯ä»¥å¾å¥½ççè§£äºä»¶å¤çæ¹æ³å¯ä»¥å¾å°äºä»¶å¯¹è±¡ï¼äºä»¶å¯¹è±¡åå¯ä»¥å¾å°äºä»¶æºã
1. webçå¬å¨çå¼åæ¥éª¤
é¦å 建ç«ä¸ä¸ªç±»å®ç°listenneræ¥å£
public class ContextTestListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
//å
·ä½å®ç°ç±»
}
public void contextDestroyed(ServletContextEvent sce) {
//å
·ä½å®ç°ç±»
}
}
å ¶æ¬¡ï¼å¨web.xmlä¸é ç½®çå¬å¨
<listener> <listener-class>com.jason.listener.ContextTestListener</listener-class> </listener>
2. webçå¬å¨çåç±»ï¼å¦å¾æç¤ºï¼ç®ååå¦ä¸å ç§çå¬å¨
ServletContextï¼Sessionï¼Requestç
3. åç§çå¬å¨ç详ç»ä»ç»åç¨æ³ç¤ºä¾
(1) ä¸ServletContextç¸å ³ççå¬å¨æ¥å£ä¸ºServletContextListenerï¼ServletContextAttributeListenerï¼è¯¥çå¬å¨éå¯¹çæ¯æ´ä¸ªwebåºç¨ç¨åºççå½å¨æï¼å ¶è崿大çãä¸è¬ç¨æ¥å¨åºç¨ç¨åºåå§åæ¶è¯»åæ°æ®åºè¿æ¥å¯¹è±¡ï¼åå§ååºç¨ç¨åºç¨åºçé ç½®çã å ¶æ¥å£å®ä¹å¦ä¸ï¼
public interface ServletContextListener {
public void contextInitialized(ServletContextEvent sce)ï¼
public void contextDestroyed(ServletContextEvent sce)ï¼
}
å ¸ååºç¨ï¼éæ±ç»è®¡ä¸ä¸ªç½é¡µè¯·æ±ç访é®éï¼è¯¥webåºç¨åæ¢æ¶ï¼å°è®¿é®éæ°å¼åå°é ç½®æä»¶ä¸ï¼æ¹åºç¨ç¨åºéæ°å¯å¨ï¼æ°å¼ä»ä¸æ¬¡è®¿é®éå¼å§ã
<1> å®ç°ServletContextListeneræ¥å£ï¼å¨åå§åè¯æ¹æ³ä¸è¯»åé ç½®æä»¶ä¸è®¿é®éçä¿¡æ¯ï¼å¨éæ¯æ¹æ³ä¸åå¨è®¿é®éçä¿¡æ¯ãå 为å¨åºç¨ç¨åºå¯å¨æ¶ï¼ä¼è°ç¨contextInitializedæ¹æ³ï¼å¨åºç¨ç¨åºåæ¢æ¶ï¼ä¼è°ç¨contextDestroyedæ¹æ³ã该ä¾ååºç¨äºpropertiesçæä½ï¼ä¸çæproperties请googleä¸ç¨æ³,ç¹å«æ³¨æè¯»åæä»¶åå卿件çåæ³ï¼ä»£ç å®ç°å¦ä¸:
public class ContextTestListener implements ServletContextListener {
private static final String COUNT_NAME = "count";
private static final String PROPERTIES_NAME = "WEB-INF/count.properties";
/*
* (non-Javadoc)
*
* @see
* javax.servlet.ServletContextListener#contextInitialized(javax.servlet
* .ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
InputStream inputstream = context.getResourceAsStream(PROPERTIES_NAME);
Properties prop = new Properties();
try {
prop.load(inputstream);
} catch (IOException e) {
throw new RuntimeException(e);
}
int count = Integer.parseInt(prop.getProperty(COUNT_NAME));
context.setAttribute(COUNT_NAME, count);
}
/*
* (non-Javadoc)
*
* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.
* ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
Object countAttr = context.getAttribute(COUNT_NAME);
if(countAttr != null){
int count = (Integer) context.getAttribute(COUNT_NAME);
InputStream inputstream = context.getResourceAsStream(PROPERTIES_NAME);
Properties prop = new Properties();
try {
prop.load(inputstream);
prop.setProperty(COUNT_NAME, String.valueOf(count));
} catch (IOException e) {
throw new RuntimeException(e);
}
String filepath = context.getRealPath("/");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filepath + PROPERTIES_NAME);
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
}
try {
prop.store(fos, "add the count");
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
System.err.println("Cant close stream :" + e.getMessage());
}
}
}
}
}
}
<2> å®ä¹TestCountServletï¼ä½ä¸ºè¯·æ±è®¿é®ç½é¡µç请æ±URLï¼å ¶å®ç°ä»£ç å¦ä¸ï¼è®°å½æ¹æ³éï¼åæ¶å跳转å°è®¿é®é页é¢ï¼ä»£ç å¦ä¸ï¼
package com.jason.servlet;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestAccountServlet
*/
public class TestAccountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = request.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if(count == null){
count = 1;
}else{
count ++;
}
context.setAttribute("count",count);
// do other things
response.sendRedirect(request.getContextPath() + "/count.jsp");
}
}
<3>webxmlä¸çé ç½®ï¼webxmlä¸é ç½®äºçå¬å¨ï¼servletåwelcoen页é¢ï¼å 容å¦ä¸ï¼
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>WebListener</display-name>
<listener>
<listener-class>com.jason.listener.ContextTestListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>TestAccountServlet</display-name>
<servlet-name>TestAccountServlet</servlet-name>
<servlet-class>com.jason.servlet.TestAccountServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestAccountServlet</servlet-name>
<url-pattern>/TestAccountServlet</url-pattern>
</servlet-mapping>
</web-app>
<4> å¨WEB-INF ç®å½ä¸ï¼å»ºç«count.propertiesï¼å 容å¦ä¸ï¼
count=0
<5>建ç«indexåcount页é¢ï¼index页é¢å¦ä¸ï¼
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset= UTF-8">
<title>index page</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/TestAccountServlet">visit it to test </a>
</body>
</html>
å¨index页é¢ä¸æ³¨æ${pageContext.request.contextPath}ï¼å¨jsp页é¢è°ç¨servletçURLæ¶ï¼å¦ææ²¡è®¾å®basepathï¼åé¢ä¸å®è¦å ä¸contextpathçè·¯å¾ï¼å¦åï¼servletçå°åæ¯ä¸å¯¹çãæè ä¹å¯ä»¥ç´æ¥ç¨<cï¼out value=â/TestAccountServletâ/ãï¼å 为jstl ä¸è¯¥æ ç¾ç´æ¥å¨å ¶å颿·»å contextpathè·¯å¾ãcount页é¢çå 容å¦ä¸ï¼
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset= UTF-8">
<title>count here </title>
</head>
<body>
visit countï¼${applicationScope.count}
<%
System.out.println(application.getAttribute("count"));
%>
</body>
</html>
å©ç¨${applicationScope.count}è·åæ°å¼ï¼è¯¥ç¨åºè¿è¡ï¼æ¯ç¹å»è®¿é®ä¸æ¬¡count页é¢ï¼å ¶è®¿é®éå 1.
ï¼2ï¼ ä¸Sessionç¸å ³ççå¬å¨ææä¸ªå个HttpSessionListenerï¼HttpSessionAttributeListener ï¼HttpSessionBindListeneråHttpSessionActivationListener
<1>HttpSessionListener æ¯çå½å¨æçå¬å¨ï¼å¦ææ³å¯¹Session对象å建æç»ææ¶ï¼åç¸åºçå¨ä½å¯å®ç°HttpSessionListenerï¼è¯¥æ¥å£çå®ä¹å¦ä¸ï¼
public interface HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) ï¼
public void sessionDestroyed(HttpSessionEvent se) ï¼
}
å ³äºè¯¥çå¬å¨çç¨æ³ï¼ä¾å¦æä»¬é²æ¢ç¨æ·éæ°ç»å½æ¶ï¼å¸¸å¸¸å¨æ°æ®åºä¸å®ä¹åæ®µç¶æï¼æ¥è¡¨æè¯¥ç¨æ·æ¯å¦ç»å½ï¼å¨æ³¨éæ¶ï¼æä»¬å°å ¶ç¶æä¿®æ¹ï¼ä½å¥½å¤æ åµä¸ï¼æä»¬ç´æ¥å ³éæµè§å¨ï¼é ææ°æ®åºç¶ææ²¡æ³æ´æ°ï¼åæ¶ï¼ç¨æ·ç»å½session乿忴»æéï¼æ¤æ¶æä»¬å¸æå¨session鿝æ¶ï¼æ¹åæ°æ®åºç¶æï¼æä»¬å¯ä»¥å¨HttpSessionListenerçå¬å¨çsessionDestroyedï¼seï¼æ¹æ³ä¸å¨sessionä¸è·åè¯¥ç¨æ·ï¼æä½æ°æ®åºï¼å°è¯¥ç¨æ·çç»å½ç¶æè®¾ç½®ä¸ºæªç»å½ã
/**
* Application Lifecycle Listener implementation class OnlinePepoleListener
*
*/
public class OnlinePepoleListener implements HttpSessionListener {
/**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent se) {
// TODO Auto-generated method stub
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent se) {
// TODO Auto-generated method stub
HttpSession session = se.getSession();
String user = (String)session.getAttribute("login");
//ä¿®æ¹æ°æ®åºç¨æ·ç»å½ç¶æä¸ºæªç»å½
}
}
å ¸ååºç¨ï¼ç»è®¡å½åç¨æ·å¨çº¿æ°
ï¼1ï¼index页é¢
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="login.jsp" method="post">
userNameï¼<input type="text" name="username" />
<br />
<input type="submit" value="login" />
</form>
</body>
</html>
2.login页é¢
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
// åå¾ç»å½çç¨æ·å
String username = request.getParameter("username");
// æç¨æ·åä¿åè¿session
session.setAttribute("username", username);
// æç¨æ·åæ¾å
¥å¨çº¿å表
List onlineUserList = (List) application.getAttribute("onlineUserList");
// ç¬¬ä¸æ¬¡ä½¿ç¨åï¼éè¦åå§å
if (onlineUserList == null) {
onlineUserList = new ArrayList();
application.setAttribute("onlineUserList", onlineUserList);
}
onlineUserList.add(username);
// æå
response.sendRedirect("result.jsp");
%>
</body>
</html>
3.result页é¢
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page isELIgnored="false"%>
<%@page import="java.util.List"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h3>æ¨å¥½ï¼${username} [<a href="logout.jsp">注é</a>]</h3>
å½åå¨çº¿ç¨æ·ï¼
<table>
<%
List onlineUserList = (List) application.getAttribute("onlineUserList");
for (int i = 0; i < onlineUserList.size(); i++) {
String onlineUsername = (String) onlineUserList.get(i);
%>
<tr>
<td><%=onlineUsername%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
4ãlogout页é¢
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
// åå¾ç»å½çç¨æ·å
String username = (String) session.getAttribute("username");
// 鿝session
session.invalidate();
// ä»å¨çº¿å表ä¸å é¤ç¨æ·å
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(username);
// æå
response.sendRedirect("index.jsp");
%>
</body>
</html>
5ãçå¬å¨ä»£ç
package com.jason.listener;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* Application Lifecycle Listener implementation class OnlineUserListener
*
*/
public class OnlineUserListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
System.out.println("æ°å»ºsession:"+event.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// åå¾ç»å½çç¨æ·å
String username = (String) session.getAttribute("username");
// ä»å¨çº¿å表ä¸å é¤ç¨æ·å
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(username);
System.out.println(username+"å·²ç»éåºï¼");
}
}
6 webçé ç½®
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>OnlinePepoleListener</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.jason.listener.OnlineUserListener</listener-class>
</listener>
</web-app>
䏿¦çå¬å¨åç°è°ç¨äºsessionDestoryedæ¹æ³å°±ä¼æå ¶ç¨æ·ä»å¨çº¿äººæ°ä¸deleteï¼å¨ä¸é¢ä¸¤ç§æ åµä¸ä¼åçsessionDestoryedäºä»¶
a.æ§è¡session.invalidate()æ¹æ³æ¶
logout.jspä¸è°ç¨äº session.invalidate()æ¹æ³
b.sessionä¼è¯è¶ æ¶
sessionçé»è®¤è¶ æ¶äºä»¶æ¯30åéï¼30åéåèªå¨éæ¯session
2ãHttpSessionBindingListener
HttpSessionBindingListenerè½ç¶å«åçå¬å¨ï¼ä½ä½¿ç¨æ¹æ³ä¸HttpSessionListenerå®å ¨ä¸åãæä»¬å®é çä¸ä¸å®æ¯å¦ä½ä½¿ç¨çãæ°å»ºç±»OnlineUserBindingListenerï¼å®ç°HttpSessionBindingListeneræ¥å£ï¼æé æ¹æ³ä¼ å ¥usernameåæ°ï¼HttpSessionBindingListenerå æä¸¤ä¸ªæ¹æ³valueBound(HttpSessionBindingEvent event)åvalueUnbound(HttpSessionBindingEvent event)ï¼åè ä¸ºæ°æ®ç»å®ï¼åè ä¸ºåæ¶ç»å®æè°å¯¹sessionè¿è¡æ°æ®ç»å®ï¼å°±æ¯è°ç¨session.setAttribute()æHttpSessionBindingListenerä¿åè¿sessionä¸ã
å¨login.jspä¸åè¿ä¸æ¥ï¼
<%@page import="com.test.OnlineUserBindingListener"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.*"%>
<%
request.setCharacterEncoding("UTF-8");
// åå¾ç»å½çç¨æ·å
String username = request.getParameter("username");
// æç¨æ·åæ¾å
¥å¨çº¿å表
session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));
// æå
response.sendRedirect("result.jsp");
%>
è¿å°±æ¯HttpSessionBindingListeneråHttpSessionListenerä¹é´çæå¤§åºå«ï¼HttpSessionListeneråªéè¦è®¾ç½®å°web.xmlä¸å°±å¯ä»¥ç嬿´ä¸ªåºç¨ä¸çææsessionãHttpSessionBindingListenerå¿ é¡»å®ä¾ååæ¾å ¥æä¸ä¸ªsessionä¸ï¼æå¯ä»¥è¿è¡çå¬ãä»çå¬èå´ä¸æ¯è¾ï¼HttpSessionListenerè®¾ç½®ä¸æ¬¡å°±å¯ä»¥ç嬿æsessionï¼HttpSessionBindingListeneré叏齿¯ä¸å¯¹ä¸çãæ£æ¯è¿ç§åºå«æå°±äºHttpSessionBindingListenerçä¼å¿ï¼æä»¬å¯ä»¥è®©æ¯ä¸ªlistener对åºä¸ä¸ªusernameï¼è¿æ ·å°±ä¸éè¦æ¯æ¬¡åå»sessionä¸è¯»åusernameï¼è¿ä¸æ¥å¯ä»¥å°æææä½å¨çº¿å表ç代ç é½ç§»å ¥listenerï¼æ´å®¹æç»´æ¤ã
package com.test;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
public class OnlineUserBindingListener implements HttpSessionBindingListener {
String username;
public OnlineUserBindingListener(String username){
this.username=username;
}
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// æç¨æ·åæ¾å
¥å¨çº¿å表
List onlineUserList = (List) application.getAttribute("onlineUserList");
// ç¬¬ä¸æ¬¡ä½¿ç¨åï¼éè¦åå§å
if (onlineUserList == null) {
onlineUserList = new ArrayList();
application.setAttribute("onlineUserList", onlineUserList);
}
onlineUserList.add(this.username);
}
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ServletContext application = session.getServletContext();
// ä»å¨çº¿å表ä¸å é¤ç¨æ·å
List onlineUserList = (List) application.getAttribute("onlineUserList");
onlineUserList.remove(this.username);
System.out.println(this.username + "éåºã");
}
}
è¿éå¯ä»¥ç´æ¥ä½¿ç¨listenerçusernameæä½å¨çº¿å表ï¼ä¸å¿ å廿 å¿session䏿¯å¦åå¨usernameã
valueUnboundçè§¦åæ¡ä»¶æ¯ä»¥ä¸ä¸ç§æ åµï¼
a.æ§è¡session.invalidate()æ¶ã
b.sessionè¶ æ¶ï¼èªå¨éæ¯æ¶ã
c.æ§è¡session.setAttribute("onlineUserListener", "å ¶ä»å¯¹è±¡");æsession.removeAttribute("onlineUserListener");å°listenerä»sessionä¸å 餿¶ã
å æ¤ï¼åªè¦ä¸å°listenerä»sessionä¸å é¤ï¼å°±å¯ä»¥çå¬å°sessionç鿝ã
å ¸åäºä¾ï¼å¼ºè¡æç¨æ·è¸¢åºä¾å
1ãçå¬å¨ä»£ç å¦ä¸ï¼
package com.jason.listener;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import com.jason.domain.User;
/**
* Application Lifecycle Listener implementation class SessionAttributeListener
*
*/
public class SessionAttributeListener implements HttpSessionAttributeListener {
/**
* @see HttpSessionAttributeListener#attributeRemoved(HttpSessionBindingEvent)
*/
public void attributeRemoved(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
/**
* @see HttpSessionAttributeListener#attributeAdded(HttpSessionBindingEvent)
*/
public void attributeAdded(HttpSessionBindingEvent se) {
// TODO Auto-generated method stub
System.out.println("start");
Object obj = se.getValue();
if(obj instanceof User){
HttpSession session = se.getSession();
ServletContext application = session.getServletContext();
Map map = (Map) application.getAttribute("userMap");
if(map == null){
map = new HashMap();
application.setAttribute("userMap", map);
}
User user = (User) obj;
map.put(user.getUserName(), session);
}
}
/**
* @see HttpSessionAttributeListener#attributeReplaced(HttpSessionBindingEvent)
*/
public void attributeReplaced(HttpSessionBindingEvent arg0) {
// TODO Auto-generated method stub
}
}
2.loginservlet
package com.jason.servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.jason.domain.User;
/**
* Servlet implementation class LoginServlet
*/
public class LoginServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUserName(username);
user.setPassword(password);
HttpSession session= request.getSession();
session.setAttribute("user", user);
response.sendRedirect(request.getContextPath()+"/user.jsp");
}
}
3ãkickoutServelt
package com.jason.servlet;
import java.io.IOException;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* Servlet implementation class KickUserServlet
*/
public class KickUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String username = request.getParameter("username");
Map map = (Map) request.getServletContext().getAttribute("userMap");
HttpSession session = (HttpSession) map.get(username);
if(session != null){
session.invalidate();
map.remove(username);
}
request.getRequestDispatcher("/listUser.jsp").forward(request, response);
}
}
6.index页é¢
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath }/LoginServlet">
ç¨æ·åï¼<input type="text" name="username" /><br/>
å¯ç : <input type="password" name="password" /><br/>
<input type="submit" value="ç»é" /><br/>
</form>
</body>
</html>
2 user 页é¢
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
æ¬¢è¿æ¨ï¼${user.userName}
<a href="listUser.jsp" >user list</a>
</body>
</html>
3 userlist页é¢
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
æ¬¢è¿æ¨ï¼${user.userName}
<br/>
å½åç»éç¨æ·æï¼<br/>
<%
Map onlineUserMap = (Map) application.getAttribute("userMap");
System.out.println(onlineUserMap.size());
%>
<c:forEach var="me" items="${userMap}">
${me.key} <a href="${pageContext.request.contextPath}/KickUserServlet?username=${me.key}" >踢æ»ä½ </a>
</c:forEach>
</body>
</html>
ï¼3ï¼ä¸HttpServletRequestççå¬å¨æServletRequestListenerï¼ServletRequestAttributeListenerå弿¥å¤ççç¸å ³çå¬å¨ï¼è¯¥çå¬å¨æ¯3.0æ°å çã
å ³äºServletRequestListenerï¼æ´å¤åºç¨äºç»è®¡è®¿é®éç
è¿éå°±ä»ç»è¿äºã