0

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

因此,我希望将其重构为 Java 1.5。使用 enum 而不是 int 肯定是一种改进,但我不确定如何发送其余的消息。创建 70 个不同的类来表示每种类型肯定不是正确的方法。

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

4

4 回答 4

3

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

它们旨在轻松地在网络中传递。

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

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

于 2009-05-15T15:34:54.057 回答
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

等等。

于 2009-05-15T16:36:18.527 回答
0

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

于 2009-05-15T15:47:12.327 回答
0

第一个问题:为什么你觉得有必要做出改变?是因为当前系统不支持您计划添加的某些功能吗?还是只是为了打扫而进去打扫?如果是后者,我强烈建议让睡虫撒谎。

第二个问题:我假设这是一个小程序。你会计划使用不同的前端吗?或者将此服务器公开为通用服务?如果不是,那么我回到第一个问题。如果是,那么您几乎肯定希望远离特定于语言的序列化。

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

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

于 2009-05-15T16:53:23.307 回答