Toon posts:

[Java] Servlet applicatie globale variabelen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil in m'n graag toegang hebben tot een aantal variabelen (JDBCConnectionPool etc.) vanuit verschillende Servlets. Dat moet volgens mij mogelijk zijn, ik heb gekeken naar de ServletContext class, die zegt in javadoc dit:
In the case of a web application marked "distributed" in its deployment descriptor, there will be one context instance for each virtual machine. In this situation, the context cannot be used as a location to share global information (because the information won't be truly global). Use an external resource like a database instead.
Dit suggereert dat indien een application niet "distributed" is dit wel kan. Mijn vraag is dan, hoe? Het enige wat in aanmerking kwam zijn de getAttribute en setAttribute methoden, maar bij getAttribute staat:
Returns the servlet container attribute with the given name, or null if there is no attribute by that name. An attribute allows a servlet container to give the servlet additional information not already provided by this interface.
En is dus bedoeld om niet standaard informatie van de web/jsp server te verkrijgen. Hoe moet het wel?

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Je kan in een JSP server ieder willekeurig object als een sessie/applicatie/whatever variabele opslaan.

Ik heb in een JSP project een keer een object met socket connecties en nog wat zaken als sessie variabelen gebruikt, enige wat je moet doen is zodra je het object hebt, casten naar het juiste object.

Misschien dat dat je op weg helpt. Ik heb hier even niet de Servlet api bij de hand, maar ik zou zeggen kijk daar is geod in. Zal vast iets staan.

Verwijderd

Topicstarter
Op zaterdag 16 februari 2002 12:06 schreef The - DDD het volgende:
Je kan in een JSP server ieder willekeurig object als een sessie/applicatie/whatever variabele opslaan.
Dan moet dat met Servlets ook kunnen aangezien JSPs omgezet worden naar Servlets.
Ik heb in een JSP project een keer een object met socket connecties en nog wat zaken als sessie variabelen gebruikt, enige wat je moet doen is zodra je het object hebt, casten naar het juiste object.
Dat begrijp ik ;) Alleen hoe kom je aan het object :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dat distributed is niet zo relevant denk ik, dus het kan inderdaad gewoon. Ik zou gebruik maken van een Singleton:
code:
1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton {

    private static Singleton _singleton;

    public static Singleton getSharedInstance() {
      if( _singleton == null) {
        _singleton = new Singleton();
      }

      return _singleton;
    }
}

Je kunt nu op een static wijze altijd bij je data.... Ik heb hem in dit voorbeeld niet thread-safe gemaakt, dat moet je dus nog even doen ;) . Op Javaworld staat een interessant artikel over Singletons implementaties en de thread-safety en het zo klein mogelijk maken van de monitor... Nu niet direct allemaal relevant denk ik ;) .

Merk dat de instantie hier dus lazy wordt aangemaakt :) . Als je echt zuinig wilt doen met resources kan je het zelfs nog combineren met een WeakReference, maar dat lijkt mij in dit geval nogal overdreven ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Een Singleton! Natuurlijk, had ik aan moeten denken :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Zef: Een Singleton! Natuurlijk, had ik aan moeten denken :)
Das nou het leuke van Servlets: tis gewoon 100% Java :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
En het werkt, bedankt :)
Pagina: 1