1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

servlet informationen

  • maciek
  • 5. Januar 2006 um 10:38
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • KeinWunder
    Punkte
    490
    Beiträge
    90
    • 8. Januar 2006 um 21:06
    • #21

    kennst du das Buch Refactoring von Martin Fowler?
    http://www.amazon.de/exec/obidos/AS…3373574-9602464

    darin gibt es einen Katalog wie man das Design verbessern kann
    immer in kleinsten Schritten, bis man zum gewünschten Ergebnis kommt

    diesen Ansatz find ich ziemlich gut

  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 8. Januar 2006 um 22:42
    • #22
    Zitat von KeinWunder

    kennst du das Buch Refactoring von Martin Fowler?
    http://www.amazon.de/exec/obidos/AS…3373574-9602464

    darin gibt es einen Katalog wie man das Design verbessern kann
    immer in kleinsten Schritten, bis man zum gewünschten Ergebnis kommt

    diesen Ansatz find ich ziemlich gut

    Alles anzeigen


    hmmm ... nope, kenn ich nicht. Hört sich aber ganz interessant an. Sind da auch ansätze für servletbasierte Architekturen drinnen? Ich werd mal schauen, ob das in der Firma vielleicht in der Bibliothek verfügbar ist. Ansonst können wir das vielleicht bestellen ... das Buch kriegt man nicht zufällig auch als Onlineausgabe?

  • KeinWunder
    Punkte
    490
    Beiträge
    90
    • 8. Januar 2006 um 22:49
    • #23

    is eher allgemein gehalten, also nix spezielles für Servlet-basierte Anwendungen, aber ich denke es wird dir trotzdem weiter helfen

    E-Book hab ich gefunden:
    http://files.nixp.ru/books/programm…ting%20Code.pdf

  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 8. Januar 2006 um 23:52
    • #24
    Zitat von KeinWunder

    is eher allgemein gehalten, also nix spezielles für Servlet-basierte Anwendungen, aber ich denke es wird dir trotzdem weiter helfen

    E-Book hab ich gefunden:
    http://files.nixp.ru/books/programm…ting%20Code.pdf


    danke. Ich werd morgen mal genauer reinschauen.

  • maciek
    Punkte
    2.805
    Beiträge
    434
    • 13. Januar 2006 um 11:03
    • #25
    Zitat von Usher

    Wenn jetzt also während eines Requests (d.h. UserA fordert eine Seite an, und bekommt sie geliefert) ein anderer Request ebenfalls eintrifft (zeitgleich fordert UserB eine Seite an), kann folgendes passieren:
    1) UserA speichert Session-Daten (oder Request-Daten, was auch immer) in statischer Variable
    2) UserB speichert Session-Daten in derselben statischen Variable (Wert wird überschrieben)
    3) noch während des Requests von UserA wird der Wert der stat. Var. irgendwo im Programm ausgelesen (d.h. UserA sieht die Session von UserB)
    4) UserB sieht ebenfalls UserB's Session

    Punkt 3 = fatal.

    Alles anzeigen


    ich hab versucht mich in den letzten paar Tagen noch weiter mit dem Problem, dass sich die Servlet-Threads gegenseitig die Informationen überschreiben, auseinander zu setzen.

    Auf der Suche nach einem eindeutigen key für jeden Servlet-Request, bin ich auf die Idee gekommen, dass ja jedes Servlet in einem eigenen Thread abgearbeitet wird. Eigener Thread = Name (ID) des Threads.

    Und so funktioniert's:
    -) Servlet ruft den SessionHandler auf[INDENT]-) key wird anhand der ID (Name) des Threads generiert, der das Servlet ausführt[/INDENT]
    -) Servlet setzt request für seinen key
    -) die Postparameter werden verarbeitet
    [INDENT]-) ein beliebiges Objekt erstellt neuen SessionHandler
    [INDENT]-) key ist gleich, da Objekt im gleichen Thread läuft wie das Servlet[/INDENT]
    -) das Objekt holt sich request (Session)[/INDENT]
    -) nach der Abarbeitung der Postparameter löscht das Servlet seinen gespeicherten Request
    [INDENT]-) der Request wird ja nicht mehr gebraucht
    -) damit ist eine Art garbage collection gegeben[/INDENT]

    Aufpassen muss man natürlich, dass die Objekte, die diese Funktionalität nutzen direkt im Servlet-Thread laufen.

    Was haltet Ihr davon? Anbei ist der Code des SessionHandlers:

    Java
    import java.util.*;
    import java.lang.*;
    
    
    import javax.servlet.http.*;
    
    
    public class SessionHandler {
    
    
      private static HashMap sessions = new HashMap();
      private String key;
    
    
      public SessionHandler() {
        /*
         * get the Name of the currently executing thread
         */
        try {
          Thread thisThread = Thread.currentThread();
          key = thisThread.getName();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    
    
      /**
       * store the request for the client
       * @param request HttpServletRequest
       */
      public void setRequest(HttpServletRequest request) {
        /*
         * check whether the key already exists
         */
        if (sessions.containsKey(key)) {
          printDebug("renewing", "request");
          System.out.println("[sessionHandler] ERROR: can not overwrite key: "+ key);
        } else {
          printDebug("adding", "request");
        }
    
        sessions.put(key, request);
      }
    
      /**
       * removes the thread which calls this method from the session vars
       */
      public void removeRequest() {
        printDebug("removing", "request");
        sessions.remove(key);
      }
    
      /**
       * returns the IP address of the client of the current user
       * @return String
       */
      public String getClientAddress() {
        String ipAddress = "";
    
        if (sessions.containsKey(key)) {
          HttpServletRequest request = (HttpServletRequest) sessions.get(key);
          ipAddress = request.getRemoteAddr();
          printDebug("returning", "ipAddress: "+ipAddress);
        } else {
          System.out.println("[sessionHandler] ERROR: key "+ key + " not found to return ipAddress.");
        }
    
    
        return ipAddress;
      }
    
      /**
       * return the active session for the current user
       * @return HttpSession
       */
      public HttpSession getSession() {
        if (sessions.containsKey(key)) {
          printDebug("returning", "session");
          HttpServletRequest request = (HttpServletRequest) sessions.get(key);
          return request.getSession(true);
        } else {
          System.out.println("[sessionHandler] ERROR: key "+ key + " not found to return session.");
        }
    
    
        return null;
      }
    
      private void printDebug(String action, String what) {
        System.out.println("[sessionHandler] " + action + " " + what + " for key: "+ key);
      }
    }
    Alles anzeigen
  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum