私は次の問題を抱えています:
ArrayListを.serファイルとして保存しています。ファイルが存在しない場合、例外をスローするのではなく、ロード時に作成されます。
次に、ArrayListに何かを追加して、もう一度保存します。しかし、ArrayListを開くと、空になっています。間違いはどこにありますか?
サーブレット内の巨大なコメントの前にArrayListをスローすると、すべてが正常に機能しているため、空のarraylistを作成し、すべての情報を含むオブジェクトを追加できます。しかし、この更新されたArrayListの保存が問題のようです。
問題がどこにあるのか、なぜそれが起こるのかはわかりません。サーブレットの巨大なコメントの周りだと思います。ここ:
ArrayList<Lieferinhalte> auftraege = new ArrayList();
Lieferinhalte l = new Lieferinhalte();
l.setID(id);
l.setVon(start);
l.setNach(end);
l.setMail(mail);
l.setLink(link);
open o = new open();
auftraege = o.getAuftraege();
auftraege.add(l);
/*-----------> PROBLEM<-------------*/
File file = new File("C:\\Users\\Christoph\\workspace\\ServletTest\\auftraege.ser");
speichern s = new speichern();
s.abspeichern(auftraege);
open o2 = new open();
auftraege = o2.getAuftraege();
out.println(docType + "<HTML>\n"+
"<HEAD><TITLE>HalloWelt</TITLE></HEAD>\n"+
"<BODY>" +
"Servlet funktioniert! <br /><br />");
理解するための残りのコードは次のとおりです。
サーブレット、最初の文字列は、このサーブレットをロードするjspファイルから情報を取得します。
package servlet;
import java.io.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginCheck extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String id = request.getParameter("ID");
String start = request.getParameter("Start");
String end = request.getParameter("End");
String mail = request.getParameter("Mail");
String link = request.getParameter("Link");
String docType =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 "+
"Transitional//EN\">\n";
ArrayList<Lieferinhalte> auftraege = new ArrayList();
Lieferinhalte l = new Lieferinhalte();
l.setID(id);
l.setVon(start);
l.setNach(end);
l.setMail(mail);
l.setLink(link);
open o = new open();
auftraege = o.getAuftraege();
auftraege.add(l);
/*-----------> PROBLEM<-------------*/
File file = new File("C:\\Users\\Christoph\\workspace\\ServletTest\\auftraege.ser");
speichern s = new speichern();
s.abspeichern(auftraege);
open o2 = new open();
auftraege = o2.getAuftraege();
out.println(docType + "<HTML>\n"+
"<HEAD><TITLE>HalloWelt</TITLE></HEAD>\n"+
"<BODY>" +
"Servlet funktioniert! <br /><br />");
for(int i = 0; i < auftraege.size(); i++) {
String id2 = auftraege.get(i).ID;
String start2 = auftraege.get(i).von;
String end2 = auftraege.get(i).nach;
String mail2 = auftraege.get(i).mail;
String link2 = auftraege.get(i).link;
out.println("Die ID war: " + id2 + "<br />" +
"Der Startpunkt war: " + start2 + "<br />" +
"Der Endpunkt war: " + end2 + "<br />" +
"Die Mail war: " + mail2 + "<br />" +
"Der Link war: " + link2 + "<br />");
}
out.println("<a href='index.jsp'>Hier</a> geht es zurück zur Eingabemaske!" +
"</BODY></HTML>");
}
}
貯蓄クラス:
package servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
public class speichern {
public void abspeichern(ArrayList<Lieferinhalte> a) {
OutputStream outputStream = null;
try
{
// Byteorientierten Ausgabekanal Öffnen
outputStream = new FileOutputStream("auftraege.ser");
// Objektausgabekanal für Serialisierung Öffnen
ObjectOutputStream objectOutput = new ObjectOutputStream(outputStream);
// Objekte serialisiert in Datei ausgeben
objectOutput.writeObject(a);
// Ausgabekanal schließen
objectOutput.close();
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
outputStream.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
ロードクラス:
パッケージサーブレット;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;
public class open {
ArrayList<Lieferinhalte> a;
open() {
try
{
// Serialisiertes Objekt
FileInputStream inputStream = new FileInputStream("auftraege.ser");
// Deserialisierung
ObjectInputStream objectInput = new ObjectInputStream(inputStream);
// String auslesen
this.a = (ArrayList<Lieferinhalte>) objectInput.readObject();
} catch (IOException e)
{
speichern s = new speichern();
ArrayList<Lieferinhalte> auftraege = new ArrayList();
s.abspeichern(auftraege);
open o = new open();
this.a = o.a;
} catch (ClassNotFoundException e)
{
speichern s = new speichern();
ArrayList<Lieferinhalte> auftraege = new ArrayList();
s.abspeichern(auftraege);
open o = new open();
this.a = o.a;
}
}
ArrayList<Lieferinhalte> getAuftraege(){
return a;
}
}
そして、arraylistに保存されるべきオブジェクトのクラス:
package servlet;
public class Lieferinhalte {
String link = "";
String ID ="";
String von ="";
String nach ="";
String mail ="";
void setLink(String a) {
this.link = a;
}
void setID(String a) {
this.ID= a;
}
void setVon(String a) {
this.von = a;
}
void setNach(String a) {
this.nach = a;
}
void setMail(String a) {
this.mail = a;
}
}