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