Frage

Ich würde gerne wissen, ob es eine Möglichkeit, eine Variable oder ein Objekt zwischen zwei oder mehreren Servlets zu teilen, ich meine eine „Standard“ Art und Weise. Ich nehme an, dass dies keine gute Praxis ist, sondern ein einfacher Weg, um einen Prototyp zu bauen.

Ich weiß nicht, ob es auf den Technologien verwendet wird, hängt, aber ich werde verwenden Tomcat 5.5


Ich möchte ein Foto von Objekten einer einfachen Klasse teilen (nur öffentliche Attribute, Strings, Ints, etc). Meine Absicht ist es, ein statischen Daten wie in einem DB haben, natürlich wird es verloren, wenn der Tomcat gestoppt wird. (Es ist nur zum Testen)

War es hilfreich?

Lösung

Ich denke, was Sie suchen hier Antrag ist, Sitzungs- oder Anwendungsdaten.

In einem Servlet können Sie ein Objekt als Attribut auf das Request-Objekt, Sitzungsobjekt oder Servletkontext Objekt hinzufügen:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    String shared = "shared";
    request.setAttribute("sharedId", shared); // add to request
    request.getSession().setAttribute("sharedId", shared); // add to session
    this.getServletConfig().getServletContext().setAttribute("sharedId", shared); // add to application context
    request.getRequestDispatcher("/URLofOtherServlet").forward(request, response);
}

Wenn Sie es in dem Request-Objekt gesetzt wird es an das Servlet zur Verfügung, die bis die Anforderung weitergeleitet wird beendet:

request.getAttribute("sharedId");

Wenn Sie es in der Sitzung gestellt wird es auf alle Servlets zur Verfügung geht nach vorn, aber der Wert wird an den Benutzer gebunden werden:

request.getSession().getAttribute("sharedId");

Bis zur Sitzung gültig bis auf Inaktivität vom Benutzer basiert.

wird zurückgesetzt, indem Sie:

request.getSession().invalidate();

oder ein Servlet entfernt sie aus -umfang:

request.getSession().removeAttribute("sharedId");

Wenn Sie es im Servlet Kontext gestellt wird es verfügbar sein, während die Anwendung ausgeführt wird:

this.getServletConfig().getServletContext().getAttribute("sharedId");

Bis Sie entfernen es:

this.getServletConfig().getServletContext().removeAttribute("sharedId");

Andere Tipps

Legen Sie es in einer der drei unterschiedlichen Bereiche.

Anfrage - dauert Lebensdauer der Anfrage

session - dauert das Leben der Benutzersitzung

Anwendung - dauert bis applciation heruntergefahren wird

Sie können alle diese Bereiche über die HttpServletRequest Variable zugreifen, die in den Verfahren geführt wird, die von der HttpServlet Klasse

Abhängig vom Umfang der beabsichtigten Verwendung der Daten.

Wenn die Daten nur auf einer Pro-Benutzer-Basis verwendet werden, wie Benutzer-Login-Info, Seite Trefferanzahl usw. verwenden, um das Session-Objekt (HttpServletRequest.getSession (). Get / setAttribute (String [, Object]))

Wenn es die gleichen Daten über mehrere Benutzer (Gesamt Webseite Hits, Worker-Threads, usw.) ist verwenden die ServletContext Attribute. servlet.getServletCongfig (). getServletContext (). get / setAttribute (String [, Object])). Dies wird nur innerhalb der gleichen Krieg Datei / web applicaiton arbeiten. Beachten Sie, dass diese Daten auch nicht über den Neustart beibehalten.

Eine weitere Möglichkeit, Daten austauschen betwheen Kontexte ...

Aktien-data-between-Servlets-on-tomcat

  <Context path="/myApp1" docBase="myApp1" crossContext="true"/>
  <Context path="/myApp2" docBase="myApp2" crossContext="true"/>

Auf Myapp1:

  ServletContext sc = getServletContext();
  sc.setAttribute("attribute", "value");

Auf myApp2:

  ServletContext sc = getServletContext("/myApp1");
  String anwser = (String)sc.getAttribute("attribute");

kann nicht nur das Objekt in der Http setzen und dann von seinem Attributnamen in jedem des Servlets beziehen sich auf das?

z:

getSession().setAttribute("thing", object);

... dann in einem anderen Servlet:

Object obj = getSession.getAttribute("thing");

Hier ist, wie ich das mit Jetty.

https://stackoverflow.com/a/46968645/1287091

Verwendet den Server-Kontext, in dem ein Singleton während des Starts eines eingebetteten Jetty-Servers geschrieben und unter allen Webapps für das Leben des Servers geteilt. Können auch Objekte verwendet werden, teilen / Daten zwischen Webapps vorausgesetzt, es ist nur ein Schriftsteller auf den Kontext - sonst müssen Sie darauf achten, Gleichzeitigkeit sein

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top