Java:在客户端和servlet之间传递消息的适当方法?

时间:2009-05-15 15:24:01

标签: java communication message-passing

我的系统成功地将对象从客户端传递到servlet。然而,它是原始的,因为它是为迎合Java 1.1而构建的。它传递的消息对象包含一个int(表示大约七十种类型之一)和一个需要解析的标记字符串(标记可能包含一个列表,一个对象列表等)。不好!<​​/ p>

所以,我正在考虑将其重构为Java 1.5。使用枚举而不是int肯定是一种改进,但我不确定如何发送其余的消息。创建七十个不同的类来表示每种类型肯定不是正确的方法。

关于我应该如何重构这个的任何指示?

4 个答案:

答案 0 :(得分:3)

您可能想要使用序列化对象。

它们很容易通过网络传播。

在您的情况下,您只需要一个序列化的“消息”类。然后,您可以读取并将其写入流。

Here是一个使用序列化对象的教程。那里有很多。

答案 1 :(得分:2)

无需创建不同的类来表示每种类型的消息。您可以使用所需的属性创建一个消息类。像这样:

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
}

然后根据需要创建对象。例如:

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

等等。

答案 2 :(得分:0)

您还可以使用xStream将对象序列化为XML并再次返回对象。

答案 3 :(得分:0)

第一个问题:为什么你觉得需要做出改变?是因为当前系统不支持您计划添加的某些功能吗?或者你只是想进去清理以便清洁?如果是后者,我强烈建议留下睡觉的小虫。

第二个问题:我假设这是一个applet。你有没有打算使用不同的前端?或者将此服务器公开为通用服务?如果不是,那么我回到第一个问题。如果是,那么你几乎肯定想要远离语言特定的序列化。

如果您打算将其作为服务公开,那么遵循一些“标准”服务协议是个好主意。 REST可能是最简单的POST有效负载。你也可以做SOAP,但我一直认为这有点过分。

或者,您可以使用标准的URL编码POST ...这比使用XML包装所有内容更容易实现。