1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

servlet informationen

  • maciek
  • 5. Januar 2006 um 10:38
  • Unerledigt
  • KeinWunder
    7
    KeinWunder
    Mitglied
    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

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • maciek
    16
    maciek
    Mitglied
    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?

    *** Make it idiot proof, and someone will build a better idiot. ***

  • KeinWunder
    7
    KeinWunder
    Mitglied
    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

    Four stages of acceptance:
    1.) this is worthless nonsense
    2.) this is interesting, but perverse, point of view
    3.) this is true, but quite unimportant
    4.) I alwas said so
    J.B.S. Haldane

  • maciek
    16
    maciek
    Mitglied
    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.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • maciek
    16
    maciek
    Mitglied
    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

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung