Java Online Kullanici Listesi ve Mesaj Gonderimi

Java da daha dogrusu J2EE web mimarileri icerisinde sisteme giris yapan yani birer session acan kullanicilari takip etmek icin session listener mimarisini kullanabiliriz. Bununla ilgili daha onceki konularda Session Listener incelenmisti.
Oncelikle bir Session Listener class i yaziyoruz ve bu class i web.xml icerisine tanimliyoruz.
SessionListener.java

    package com.bit.util.userManagement;
     
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
     
    public class SessionListener implements HttpSessionListener {
     
        public void sessionCreated(HttpSessionEvent se) {
            HttpSession session = se.getSession();
            Users.addUser(session.getId());
            System.out.println("Yeni session yaratildi = " + session.getId());
        }
     
        public void sessionDestroyed(HttpSessionEvent se) {
            HttpSession session = se.getSession();
            Users.removeUser(session.getId());
            System.out.println("Session silindi = " + session.getId());
        }
    }

web.xml icerigine asagidaki satirlari eklemeliyiz.

    <listener>
        <listener-class>com.bit.util.userManagement.SessionListener</listener-class>
    </listener>

Kullanici bilgilerini tutmak icin bir Users class i olusturuyorum. Bu class icerisinde users adinda bir bir HashMap bulunacak. Bu HashMap giris yapan her kullanicinin bilgisini key ler vasitasiyla saklayacak. Ancak bu HashMap in ortak bir havuz niteligi gormesi icin static olmasi gerekiyor. Aksi durumda her kullanici icin ayri birer instance yaratacak ve mesajlar kendi instance larinda kalacaktir.

    package com.bit.util.userManagement;
    import java.util.*;
     
    public class Users {
     
        private static Map&lt;String, HashMap&gt; users = new HashMap();
     
        public static void addUser(String sessionId) {
            users.put(sessionId, new HashMap());
        }
        public static void removeUser(String sessionId) {
            users.remove(sessionId);
        }
        public static void addValue(String sessionId, String key, String value) {
            users.get(sessionId).put(key, value);
        }
        public static String getValue(String sessionId, String key) {
            return (String)users.get(sessionId).get(key);
        }
    }

Kullaniciya mesaj gondermek icin bir UserMessages class i olusturuyorum bu class ile istedigimiz kullaniciya mesaj gonderebilecek ve okumasini saglayabilecegiz. Bu aslinda static olan users HashMap ine ulasmaktadir.

 

    package com.bit.util.userManagement;
     
    public class UserMessages {
        public static void setMessage(String sessionId, String message){
            Users.addValue(sessionId, "message", message);   
        }
        public static String getMessage(String sessionId){
            return (String)Users.getValue(sessionId, "message");
        }
     
    }



Simdi mesajlarimizi bu sinif ile alip gonderebiliriz. Eger kullanicinin isim bilgisinide almak istiyorsak asagidaki ornekteki gibi login sirasinda kullaniciya bir bilgi atayabiliriz.

    package com.bit.login;
     
    import com.bit.util.userManagement.Users;
     
    public class Login {
        public static boolean loginUser(String sessionId, String userName, String password){
            if(userName.equals("melih") &amp;&amp; password.equals("123456")){
                //Bu adimda static context icerisine userName ekleniyor.
                Users.addValue(sessionId, "userName", userName);
                return true;
            }
            else
                return false;
        }
    }



Son olarak uygulamamizi bir jsp sayfasinda test edelim. Bunun icin Demo.jsp adinda bir jsp sayfasi olusturuyoruz.

     
    <%@page contentType="text/html" 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>JSP Page</title>
        </head>
        <body>
            <%
            boolean sonuc = com.bit.login.Login.loginUser(session.getId(), "melih", "123456");
            com.bit.util.userManagement.UserMessages.setMessage(session.getId(),"Deneme");
            String mesaj = com.bit.util.userManagement.UserMessages.getMessage(session.getId());
            out.println("Mesaj = " + mesaj);
            %>
        </body>
    </html>
No comments yet.

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>