Avatar billede remonce Nybegynder
06. maj 2007 - 17:50 Der er 2 kommentarer

Kommunikationsproblemer mellem applet og servlet

Hej alle.

Jeg er ved at lave et projekt i Netbeans. Jeg har en applet hvori man kan få vist nogle data, fra en måling, med en JFreeChart. Via appletten kan man gemme måledata i en database vha. en servlet. Dette virker indtil videre fint. Når jeg så vil prøve at hente en gammel måling går det dog galt.

Kommunikationen mellem applet og servlet foregår via en URLConnection. De data der bliver sendt afsted sendes som objekter.

Den exception jeg får er en IOException:
"java.io.IOException: Server returned HTTP response code: 500 for URL: http://localhost:8084/tf52web/HandleAppletRequest
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1174)"

Her er et snip af koden til appletten der skal kontakte servletten og bede om gamle data:

if (e.getSource() == OldMes){
            try{
                URLConnection conn = getConnection();
                OutputStream out = conn.getOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(out);
                option = "2";
                maaleNavn = mesNum.getText();
                kilde = "test";
                metaData = new ArrayList<String>();
                metaData.add(option);
                metaData.add(maaleNavn);
                metaData.add(kilde);
                oos.writeObject(metaData);
                oos.flush();
                oos.close();
                InputStream in = conn.getInputStream();
                ObjectInputStream ois = new ObjectInputStream(in);
                data = (ArrayList<String>)ois.readObject();
                int n = 0;
                for (int i = 0; i < data.size(); i++){
                    x = data.get(i+n);
                    y = data.get(i+n+1);
                    n++;
                    serie.add(Double.parseDouble(x), Double.parseDouble(y));
                }
                ois.close();
               
            } catch (IOException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
                ex.printStackTrace();
            }
        }

Netbeans siger at fejlen kommer ved "InputStream in = conn.getInputStream();"

Her ses den kode der håndtere requests fra appletten. Det er case 2: der er problemer med.

        try {
            Class.forName( JDBC_DRIVER ); // load database driver class
            connection = DriverManager.getConnection(DATABASE_URL,"brugernavn","xxxxx");
            statement = connection.createStatement();
            String textfilnavn = getServletContext().getRealPath("data.txt");
            fil = new File(textfilnavn);
            input = new Scanner(fil);
                   
            InputStream in = request.getInputStream();
            ObjectInputStream ois = new ObjectInputStream(in);
            metaData = (ArrayList<String>)ois.readObject();
            option = (String)metaData.get(0);
            navn = (String)metaData.get(1);
            //System.out.println(navn);
            kilde = (String)metaData.get(2);
            if(option.equals("1")){
                java.util.Date time = new java.util.Date();
                OutputStream out = response.getOutputStream();
                ObjectOutputStream oos = new ObjectOutputStream(out);
                oos.writeObject(time);
            }
int i;
            i = Integer.parseInt(option);
            switch(i){
                case 1:{
                    sql ="INSERT INTO metadata(Navn,Kilde) VALUES ('"+navn+"','"+kilde+"')"; //Gem
                    statement.executeUpdate(sql);
                    //Så længe der er flere x,y
                    while(input.hasNext()){
                        sql = "INSERT INTO data(Navn,X,Y) VALUES('"+navn+"','"+input.nextLine()+"','"+input.nextLine()+"')";
                        statement.executeUpdate(sql);
                    }                   
                }
                break;
               
                case 2:{
                    String X,Y;
                    sql = "SELECT X,Y FROM data WHERE navn='"+navn+"'";  //Hent gamle data
                    rs = statement.executeQuery(sql);
                    saveData = new ArrayList<String>();
                    OutputStream out = response.getOutputStream();
                    ObjectOutputStream oos = new ObjectOutputStream(out);
                    int n = 0;
                    while(rs.next()){
                        X = rs.getString("X");
                        saveData.add(n,X);
                        n++;
                        Y = rs.getString("Y");
                        saveData.add(n,Y);
                    }
                    System.out.println((saveData.get(2)).toString());
                    oos.writeObject(saveData);
                }
                break;
                /*case 3:{
                    sql = "DELETE FROM metadata WHERE Navn = '"+navn+"'";  //Slet måleserie via metadata-tabellen
                    statement.executeUpdate(sql);
                }
                break;*/
            }
           
        } catch ( SQLException sqlException ) {
            sqlException.printStackTrace();
            System.exit( 1 );
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch ( ClassNotFoundException classNotFound ) {
            classNotFound.printStackTrace();
            System.exit( 1 );
        } // end catch
        finally // ensure statement and connection are closed properly
        {
            try {
                statement.close();
                connection.close();
            } // end try
            catch ( Exception exception ) {
                exception.printStackTrace();
                System.exit( 1 );
            } // end catch
        } // end finally
    }

Håber det er til at se sig ud :|

På forhånd tak
Avatar billede arne_v Ekspert
06. maj 2007 - 18:44 #1
hvad er response ?
Avatar billede remonce Nybegynder
06. maj 2007 - 18:47 #2
Øverst i dokumentet bruger jeg setContentType-metoden på responseobjektet:

response.setContentType("application/x-java-serialized-object");

Ellers gør jeg ikke mere ved selve responseobjektet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester