Komunikacja aplet-servlet - jaki format danych?

0

Piszę aplet. Ma łączyć się z bazą danych za pomocą serwletu. Jak rozwiązać wymianę danych między klientem a serwerem?

Operacje na bazie na serwlecie:

  1. Pobierz uczniów z ID klasy i ocenami z każdego przedmiotu
  2. Pobierz przedmioty**
  3. Dodaj lub zmień ucznia
  4. Dodaj lub zmień klasę
  5. Dodaj lub zmień przedmiot
  6. Popraw uczniowi ocenę(y)
  7. Mogą być też inne, np. popraw oceny wielu uczniom

Tabele są następujące:

Uczniowie

  • ID
  • imie
  • nazwisko
  • ID_klasy

Klasy

  • ID
  • nazwa

Przedmioty

  • ID
  • nazwa

Oceny

  • ID
  • ID_ucznia
  • ID_przedmiotu
  • ocena

Na serwlecie wykorzystuję mechanizm Persistence. Przykładowo wszystkie dane o uczniach lądują do List<Uczen>.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("DziennikPU");
EntityManager em = emf.createEntityManager();
q = em.createQuery("SELECT u FROM Uczen u");
List<Uczen> uczenList = q.getResultList();

ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
out.writeObject(uczenList);

Skopiowałem obiekty Uczen, Ocena, Przedmiot, Klasa do projektu apletu i wyrzuciłem adnotacje. Niestety, przy próbie odbioru danych pojawia się błąd:

ObjectInputStream in = new ObjectInputStream(con.getInputStream());
uczenList = (List<Uczen>)in.readObject();

//java.lang.ClassNotFoundException: org.eclipse.persistence.indirection.IndirectList

Czy da się to naprawić?

Jaki format jest najlepszy do komunikacji między serwletem a apletem? XML, JSON, czysty tekst, inny format?

0

Polecam użycie mózgu. Zrób w module Common (który w wersji jar dołaczysz do appletu i servletu) obiekty DTO (google) i to DTO będziesz sobie przesyłał.

0

Losowo pojawia się błąd po stronie serwletu: ORM.Uczen cannot be cast to ORM.Uczen. Odpalam debugger, tym razem bez błędu. Co ciekawe, q.getResultList() zwraca typ Vector. Widocznie przy przesyłaniu jest konwertowany do IndirectList. Jaka może być przyczyna błędu?

List<Uczen> uczenList = q.getResultList();
for(Uczen u : uczenList) u.getOcenaList().size(); //linijka potrzebna, aby po stronie apletu działał size()

Drugi problem - nie dociera odpowiedź z serwera do apletu przy żądaniu POST:

//serwlet
String value = "OK";
ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
out.writeChars(value);

//aplet
ObjectInputStream in = new ObjectInputStream(con.getInputStream());
String resp = in.readObject().toString(); // .readUTF() też nic nie zwraca

1 użytkowników online, w tym zalogowanych: 0, gości: 1