Witam
Próbuję opanować prostą komunikację applet - servlet. Przesyłanie standartowych obiektów (int, String etc.) działa bez problemu, ale nie udaje mi się przesłać własnej klasy. Jedyne co udało mi się znaleźć, to że klasa musi implementować interfejs Serializable, ale to nie wystarcza. Servlet uruchamiam na Sun Java System Application Server Enterprise Edition 8.1
Zamieszczam kod, który działa. W momencie kiedy próbuję zastępować przesyłane stringi obiektami mojObiekt, wywala IOException :/ Z góry dzięki za pomoc.
servlet:
mojServlet.java
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class mojServlet extends HttpServlet
{
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException
{
try
{
ObjectInputStream in = new ObjectInputStream( req.getInputStream() );
String str = (String)in.readObject();
str += " ... doszlo";
ObjectOutputStream out = new ObjectOutputStream( res.getOutputStream() );
out.writeObject(str);
out.close();
}
catch (ClassNotFoundException e) {}
}
}
applet
mojApplet.java
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class mojApplet extends javax.swing.JApplet
{
JLabel lab;
public void init()
{
Container c = getContentPane();
lab = new JLabel();
c.add(lab);
}
public void start()
{
try
{
URL urel = new URL("http", "localhost" ,1054, "/servlet/mojServlet");
URLConnection urlc = urel.openConnection();
urlc.setDoOutput(true);
ObjectOutputStream out = new ObjectOutputStream( urlc.getOutputStream() );
out.writeObject("tekst ...");
out.close();
ObjectInputStream in = new ObjectInputStream( urlc.getInputStream() );
String str = (String)in.readObject();
lab.setText(str);
}
catch(IOException e) {}
catch(ClassNotFoundException e) {}
}
}
serializowana klasa
public class mojObiekt implements Serializable
{
private int x;
mojObiekt(int y)
{
x = y;
}
}