javaWeb 학습 총화 (11) - 모니터 (Listener) 개발 에서 의 응용
13319 단어 자바
1. 현재 온라인 인원수 통계
자바 웹 응용 개발 에서 우 리 는 현재 온라인 사용자 수 를 통계 해 야 할 때 가 있 습 니 다. 이때 모니터 기술 로 이 기능 을 실현 할 수 있 습 니 다.
package me.gacl.web.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @ClassName: OnLineCountListener
* @Description:
* @author:
* @date: 2014-9-10 10:01:26
*
*/
public class OnLineCountListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer onLineCount = (Integer) context.getAttribute("onLineCount");
if(onLineCount==null){
context.setAttribute("onLineCount", 1);
}else{
onLineCount++;
context.setAttribute("onLineCount", onLineCount);
}
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer onLineCount = (Integer) context.getAttribute("onLineCount");
if(onLineCount==null){
context.setAttribute("onLineCount", 1);
}else{
onLineCount--;
context.setAttribute("onLineCount", onLineCount);
}
}
}
2. 사용자 정의 세 션 스캐너
웹 애플 리 케 이 션 이 만 든 Session 이 많 을 때 Session 이 너무 많은 메모 리 를 차지 하지 않도록 메모리 에 있 는 session 을 수 동 으로 없 앨 수 있 습 니 다. 그러면 이때 도 모니터 기술 을 통 해 이 루어 질 수 있 습 니 다.
package me.gacl.web.listener;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @ClassName: SessionScanerListener
* @Description: session
* @author:
* @date: 2014-9-10 10:16:42
*
*/
public class SessionScanerListener implements HttpSessionListener,ServletContextListener {
/**
* @Field: list
* HttpSession
* LinkedList
*/
/**
* private List list = new LinkedList();
* ,SessionScanerListener
* sessionCreated ,
* , session
* sessionCreated , sessionCreated
* sessionCreated session, session
* Session , session ,
* ?
* Collections.synchronizedList(List list) list list
*/
// Collections.synchronizedList(List list) LinkedList
private List list = Collections.synchronizedList(new LinkedList());
// , , list session list session
private Object lock = new Object();
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("session !!");
HttpSession session = se.getSession();
synchronized (lock){
/**
* , thread-1( 1) , lock , session,
* session thread-2( 2) ,thread-2 ,
* thread-2 run list session , list session ,
* session thread-1 , thread-2 thread-1
* thread-1 session , lock , thread-2 lock, list session
* session session , 。
*/
list.add(session);
}
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session !!");
}
/* Web
* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("web ");
//
Timer timer = new Timer();
// 30
timer.schedule(new MyTask(list,lock), 0, 1000*30);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("web ");
}
}
/**
* @ClassName: MyTask
* @Description:
* @author:
* @date: 2014-9-11 12:02:36
*
*/
class MyTask extends TimerTask {
// HttpSession list
private List list;
//
private Object lock;
public MyTask(List list,Object lock){
this.list = list;
this.lock = lock;
}
/* run
* @see java.util.TimerTask#run()
*/
@Override
public void run() {
//
synchronized (lock) {
System.out.println(" !!");
ListIterator it = list.listIterator();
/**
* list session, list session ,
* , session, sessionCreated list session,
* list session list session ,
* list session list session
* "list.add(session) while(it.hasNext()){// list }" ,
* "list.add(session)" , "while(it.hasNext()){// list }"
* , (Object lock), ,
* list session list session
* list session , list ,
* list , list session
*/
while(it.hasNext()){
HttpSession session = (HttpSession) it.next();
/**
* -session >1000*15(15 )
* session.getLastAccessedTime() session
*/
if(System.currentTimeMillis()-session.getLastAccessedTime()>1000*30){
// session
session.invalidate();
// session
it.remove();
}
}
}
}
}
다음으로 전송:https://www.cnblogs.com/crazylqy/p/4171809.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.