# Bean übertragen von Servlet zu Servlet



## Tec (18. Nov 2004)

Ich habe ein Servlet in welchem eine Instanz eines Beans erzeugt wird. Das Bean wird in diesem Servlet auch schön mit SET-Methoden beladen. Nun möchte ich von diesem Servlet aus ein anderes Servlet aufrufen und dieses andere Servlet soll nun ebenfalls auf dieses erzeugte Bean zugreifen können um mit GET-Methoden die Informationen auslesen zu können. Wie stelle ich das am besten an? Hat jemand ein Stück Beispielscode zufällig rumliegen?

Servlet1 (mit erzeugter Bean-Instanz) -----ruft auf---->Servlet2 (will auf das Bean von Servlet 1 zugreifen)


----------



## Bleiglanz (18. Nov 2004)

request.setAttribute


----------



## Tec (19. Nov 2004)

Hab hier mal den Code vom Servlet1, sieht also so aus:


```
Servlet1:

public void doGet (.......
BeanClass myBean = new BeanClass();   // Beaninstanz
HttpSession session = request.getSession(true);
session.setAttribute("beanid", myBean);
RequestDispatcher disp = getServletContext().getRequestDispatcher("/webapp/servlet2");  // leite an Servlet weiter
disp.forward (request, response);

}
```

Nun möchte ich im Servlet2 Zugriff auf das Bean "myBean" haben. Wie komme ich dort nun (doGet, doPost ?) ran?


----------



## foobar (20. Nov 2004)

```
public void doPost(HttpservletRequest req, HttpServletResponse) throws ServletException, IOException
{
   BeanClass bean = (BeanClass)req.getAttribute("beanid");
}
```


----------



## Tec (20. Nov 2004)

Super das wars, danke dir vielmals!


----------



## Tec (22. Nov 2004)

So hab nun ein neues Problem. Mein schönes Bean wird wunderbar übertragen nur existieren die Daten da drinnen auch für andere Clients welche auf die Seite zugreifen. Statt ein neues leeres Bean zu erzeugen wenn ein anderer Client zugreift, nimmt er das erste erzeugte Bean. Woran liegts?


----------



## foobar (22. Nov 2004)

Du kannst die Bean auch an die Session binden:

```
public void doPost(HttpservletRequest req, HttpServletResponse) throws ServletException, IOException
{
   BeanClass bean = (BeanClass)req.getSession().getAttribute("beanid");
}
```


----------



## Tec (23. Nov 2004)

Danke schön für die Hilfe, ich habs nun mit folgendem Code in den Griff bekommen:


```
HttpSession session = request.getSession(true);
Bean myBean = (Bean) session.getAttribute("beanid");
if (myBean == null)
  myBean = new Bean();

session.setAttribute("beanid",myBean);
```

Somit können andere Clients nicht auf dieselben Daten zugreifen. Das war ein hauptproblem, ein Client erzeugt ein Bean und füllt dieses mit Daten, der andere Client greift auch auf die Seite zu und bekommt genau die Daten des Beans ab.


----------



## Bleiglanz (24. Nov 2004)

> Somit können andere Clients nicht auf dieselben Daten zugreifen. Das war ein hauptproblem, ein Client erzeugt ein Bean und füllt dieses mit Daten, der andere Client greift auch auf die Seite zu und bekommt genau die Daten des Beans ab.


Was heisst "verschiedene Clients" in deiner Terminologie?

Wenn du die Bean an die Session bindest, dann dürfte genau das nicht der Fall sein!

Schon mal mit einem zweiten extra gestarteten Browserfenster oder von einem anderen Rechner aus getestet?

Stichwort: application Scope ( = ServletContext)


----------



## Tec (24. Nov 2004)

Damit meine ich einen anderen Browser, z.B. 2x Konqueror oder 2x Firefox.


----------

