2009-05-15 11 views
0

Mein System übergibt erfolgreich Objekte von einem Client an das Servlet. Es ist jedoch primitiv, da es für Java 1.1 entwickelt wurde. Das Nachrichtenobjekt besteht aus einem int (repräsentiert einen von etwa siebzig Typen) und einem String aus Token, die analysiert werden müssen (die Token können eine Liste, eine Liste von Objekten usw. enthalten). Nicht gut!Java: geeignete Möglichkeit, Nachrichten zwischen Client und Servlet zu übergeben?

Also, ich freue mich, dies zu Java 1.5 zu refaktorieren. Die Verwendung eines Enums anstelle eines Int ist sicherlich eine Verbesserung, aber ich bin mir nicht sicher, wie ich den Rest der Nachricht senden soll. Es ist sicherlich nicht der richtige Weg, siebzig verschiedene Klassen zu erstellen, um jeden Typ darzustellen.

Irgendwelche Hinweise darauf, wie ich dies umgestalten sollte?

Antwort

2

Es ist nicht erforderlich, eine andere Klasse für jeden Nachrichtentyp zu erstellen. Sie erstellen eine Nachrichtenklasse mit den von Ihnen benötigten Eigenschaften. Etwas wie das:

public class Message implements Serializable{ 
    private Long id; 
    private String msgText; 
    //other necessary properties 

    public Message(){ 
     this(0, "default message"); 
    } 

    public Message(Long id, String msgText){ 
     setId(id); 
     setMsgText(msgText); 
     //etc 
    } 

    //getters and setters 
} 

Und Sie erstellen dann Objekte nach Bedarf. Zum Beispiel:

Message m1 = new Message(9, "The Eagle has landed"); 
//serialize m1 to server 

Message m2 = new Message(27, "The Wren has landed"); 
//serialize m2 to the server 

und so weiter.

3

Sie möchten möglicherweise serialisierte Objekte verwenden.

Sie sollen leicht im Netzwerk weitergegeben werden.

In Ihrer Situation benötigen Sie nur eine serialisierte "Nachricht" -Klasse. Dann können Sie es lesen und in einen Stream schreiben.

Here ist ein Tutorial zur Verwendung von serialisierten Objekten. Es gibt viele da draußen.

+0

+1 weil es das richtige Konzept ist. Leider sind auf Java die meisten Serialisierer XML-basiert ... – Javier

+1

Java hat Serialisierung eingebaut, die reguläre Objekte serialisieren kann. Keine Notwendigkeit für XML. – jjnguy

+0

Danke, aber selbst mit Serialisierung und Deserialisierung müsste ich noch eine Klasse für jeden gesendeten Nachrichtentyp erstellen. Im Grunde denke ich, die Frage, die ich stellen möchte, ist, wie man eine beliebige Anzahl verschiedener Nachrichten sendet, ohne für jeden neuen Nachrichtentyp eine Klasse zu erstellen. – Pool

0

Sie können die Objekte auch mithilfe von xStream in XML und wieder in Objekte serialisieren.

0

Erste Frage: Warum haben Sie das Bedürfnis, Änderungen vorzunehmen? Liegt es daran, dass das aktuelle System einige Funktionen, die Sie hinzufügen möchten, nicht unterstützt? Oder willst du reingehen und putzen, um zu putzen? Wenn Letzteres, würde ich stark vorschlagen, schlafende Bugs liegen zu lassen.

Zweite Frage: Ich nehme an, das ist ein Applet. Werden Sie jemals ein anderes Frontend verwenden? Oder diesen Server als generischen Dienst verfügbar machen? Wenn nein, dann komme ich auf die erste Frage zurück. Wenn ja, dann möchten Sie mit Sicherheit eine sprachspezifische Serialisierung vermeiden.

Wenn Sie planen, als Dienst zu veröffentlichen, dann ist die Befolgung eines "Standard" -Dienstprotokolls eine gute Idee. REST ist wahrscheinlich die einfachste Post-in-XML-Payload. Du könntest auch SOAP machen, aber ich habe das immer als Overkill betrachtet.

Oder Sie könnten mit einem Standard-URL-codierten POST ... gehen, der einfacher zu implementieren sein sollte, als alles in XML zu verpacken.