2015-01-13 7 views
7

Wie erreiche ich den aktuellen ServletContext von meiner Vaadin 7 App aus?Zugriff auf `ServletContext` in einer Vaadin 7 App?

Ich mag die ServletContext Objekt verwenden setAttribute, getAttribute, removeAttribute und getAttributeNames Methoden einig globalen Zustand für meine Vaadin App zu verwalten.

Auch wenn zu diesem Zweck, diese Methoden für Vaadin Anwendungen ungeeignet ist, bitte erklären.

+0

Verwandte Frage: [Haken für meine Vaadin Web App starten und stoppen?] (Http://stackoverflow.com/q/36588743/642706) –

Antwort

20

tl; dr

VaadinServlet.getCurrent().getServletContext() 

VaadinServlet

Die VaadinServlet Klasse erbt eine getServletContext Methode.

Um das Objekt VaadinServlet zu erhalten, rufen Sie die statische Klassenmethode getCurrent auf.

Von den meisten überall in Ihrem Vaadin App, tun Sie etwas wie folgt aus:

ServletContext servletContext = VaadinServlet.getCurrent().getServletContext(); 

CAVEAT
nicht in Hintergrund-Threads funktioniert. In Threads, die Sie starten, gibt dieser Befehl NULL zurück. Wie dokumentiert:

In anderen Fällen (z. B. aus Hintergrundthreads, die auf andere Weise gestartet wurden), wird das aktuelle Servlet nicht automatisch definiert.

@WebListener (ServletContextListener)

By the way, sind Sie wahrscheinlich, wie zum globalen Zustand, wenn die Web-App entfaltet (Einführungen) in dem Behälter zu handhaben wollen.

Sie können die Bereitstellung Ihrer Vaadin Web-App mit der @WebListener Annotation Ihrer Klasse verbinden, die die ServletContextListener Schnittstelle implementiert. Beide Methoden dieser Schnittstelle, contextInitialized und contextDestroyed sind eine ServletContextEvent, aus dem übergeben Sie das ServletContext Objekt zugreifen kann durch getServletContext aufrufen.

@WebListener ("Context listener for doing something or other.") 
public class MyContextListener implements ServletContextListener 
{ 

    // Vaadin app deploying/launching. 
    @Override 
    public void contextInitialized (ServletContextEvent contextEvent) 
    { 
     ServletContext context = contextEvent.getServletContext(); 
     context.setAttribute(…) ; 
     // … 
    } 

    // Vaadin app un-deploying/shutting down. 
    @Override 
    public void contextDestroyed (ServletContextEvent contextEvent) 
    { 
     ServletContext context = contextEvent.getServletContext(); 
     // … 
    } 

} 

Dieser Haken als Teil Ihrer Vaadin app aufgerufen wird initialisiert, bevor das Servlet Vaadin Ausführen (oder jede andere Servlet/Filter im Web-app). Um das Dokument über die Methode contextInitialized zu zitieren:

Empfängt die Benachrichtigung, dass der Initialisierungsvorgang der Webanwendung gestartet wird. Alle ServletContextListeners werden über die Kontextinitialisierung benachrichtigt, bevor Filter oder Servlets in der Webanwendung initialisiert werden.