Ich habe in meiner Webanwendung neben einigen JSP-Seiten auch eine Servlet-Applet-Kombination. Servlet und Applet tauschen Objekte serialisiert über ObjectInputStream und ObjectOutputStream aus. Das sieht in etwa so aus:
Einmal das Servlet:
Und hier das Applet:
Das ganze funktioniert auf den ersten Blick auch erstmal ganz gut. Die call-Servlet Methode wird in der init-Methode des Applets aufgerufen, so dass die jTable im Applet Daten aus dem Servlet anzeigen kann. Ein Problem gibt es aber nun wenn ich die Seite verlasse und die Applet-Seite erneut aufrufe. Dann wird erneut die init-Methode aufgerufen und an folgender Stelle hängt sich das Servlet auf:
oos.writeObject(transfer);
Weiß nicht so recht warum das Servlet hier abstürzt (ohne Fehlermeldung). Die Stream-Obejekte werde nach der Verwendung geschlossen und sollten so "sauber" sein. Hab ich hier irgendwo etwas vergessen?
Einmal das Servlet:
Java:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try
{
response.setContentType("application/x-java-serialized-object");
Map<String, Object> transfer = new HashMap<String, Object>();
InputStream in = request.getInputStream();
ObjectInputStream inputFromApplet = new ObjectInputStream(in);
Map returnMap = (Map) inputFromApplet.readObject();
// hier kann ich Daten aus dem Applet verarbeiten
// echo it to the applet
OutputStream outstr = response.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstr);
oos.writeObject(transfer);
oos.flush();
oos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
Und hier das Applet:
Java:
private void callServlet(String operation, String custNb, String titleNb, Integer dlvyNo)
{
try
{
Map<String,Object> returnMap = new HashMap<String,Object>();
returnMap.put("operation", operation);
// send data to the servlet
URLConnection con = getServletConnection("/App/secure/TestServlet/");
OutputStream outstream = con.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(outstream);
oos.writeObject(returnMap);
oos.flush();
oos.close();
// receive result from servlet
InputStream instr = con.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream(instr);
Map transfer = (Map) inputFromServlet.readObject();
inputFromServlet.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
Das ganze funktioniert auf den ersten Blick auch erstmal ganz gut. Die call-Servlet Methode wird in der init-Methode des Applets aufgerufen, so dass die jTable im Applet Daten aus dem Servlet anzeigen kann. Ein Problem gibt es aber nun wenn ich die Seite verlasse und die Applet-Seite erneut aufrufe. Dann wird erneut die init-Methode aufgerufen und an folgender Stelle hängt sich das Servlet auf:
oos.writeObject(transfer);
Weiß nicht so recht warum das Servlet hier abstürzt (ohne Fehlermeldung). Die Stream-Obejekte werde nach der Verwendung geschlossen und sollten so "sauber" sein. Hab ich hier irgendwo etwas vergessen?