Komunikacja aplet-servlet - jaki format danych?

Komunikacja aplet-servlet - jaki format danych?
WC
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 7 lat
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>.

Kopiuj
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:

Kopiuj
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?

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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ł.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
WC
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 7 lat
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?

Kopiuj
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:

Kopiuj
//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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.