java - 如何使用 GUI 组织服务器架构

标签 java jtable client-server abstracttablemodel

我正在开发银行客户端-服务器架构。

我想知道组织服务器端最方便的方式是什么。 银行是否需要在同一个文件中成为服务器和 GUI?

因为目前我有实例化银行的服务器 GUI。该银行有一个客户名单,每个客户都有多个账户。

  1. 我的第一个问题涉及服务器 GUI 中的 JTable。事实上,银行存储了客户之前完成的每个操作的 ArrayList。我编写了 AbstractTableModel 的实现,它也存储了 ArrayList。问题在于服务器为 JTable 实例化了 Bank 和 TableModel。因此,当银行在其 ArrayList 中添加操作时,TableModel 不会意识到这一点。如何在不将 TableModel 提供给银行的情况下链接这两者?

  2. 第二个问题涉及与客户端的连接。当登录/密码正确时,服务器将 session 接口(interface)传递给客户端。 session 包含客户可以执行的银行操作。如果SessionImpl封装了Bank实例,是否存在安全问题?因为实际上 session 方法调用银行方法。 Session是客户端和服务器之间唯一的远程对象,但封装Bank给我的印象是客户端可以直接访问Bank。

最佳答案

1) 您希望 AbstractTableModel 在构造函数中采用 Bank 对象。然后,AbstractTableModel 方法将委托(delegate)给 Bank 对象上的底层操作列表。

有两种方法可以解决银行对象更改时发生的问题。

a) 假设 Bank 对象具有方法:

public List<Operation> getOperations();

每次向表模型发出请求时,您只需调用 getOperations() 即可。例如:

public Object getValueAt(int row, int column) {
  return bank.getOperations().get(row)...
}

这是一种获取更新的缓慢但简单的方法。

b) 以更复杂的方式,您可以让 AbstractTableModel 向 Bank 对象注册,以便在向 Bank 添加新操作时接收事件。这看起来像:

public class BankTableModel extends AbstractTableModel {
  private List<Operation> operations;

  public BankTableModel(Bank bank) {
    operations = bank.getOperations();
    bank.addOperationEventListener(...);
  }

  public Object getValueAt(int row, int column) {
    return operations.get(row)...
  }
}

问题是 RMI 不提供服务器与客户端对话的机制,因此服务器和客户端都需要是 RMI 端点。请参阅RMI Events .

2) RMI 的全部意义在于您获得驻留在服务器上的远程对象的 stub 。 stub 允许您调用远程对象上的方法,就好像该对象是本地对象一样。不必担心此级别的安全性,尤其是在学术环境中。

我会摆脱 Session 对象并直接返回 Bank 对象。如果您将所有调用转发给 Bank 对象,那么您实际上只想直接与 Bank 对象交互。在更复杂的系统中,您可能有合理的理由添加代理层或外观层,但在这种情况下我会保持简单。

3) 你的 GUI 和你的服务器应该是两个不同的对象。你的 GUI 就是你的客户端,你的服务器端不应该有任何 GUI 代码。

关于java - 如何使用 GUI 组织服务器架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13686681/

相关文章:

Java:相当于Python的范围(int,int)?

java - 选择合适的数据结构

java - JNDI 命名唯一性?

java - jTable.setModel() 未按预期工作

java - 是否可以/有效地建立仅包含安全登录但包含非安全消息的 TCP 连接?

java - Firebase 数据库和 Android - 如何在注销时销毁 'session'?

java - JTable 以编程方式更新单元格 n 保留单元格选择

java - 添加新值后,记录被覆盖,而不是在 jtable 上添加新行

C 和以太网连接中的客户端-服务器

sockets - 如何让我的异步客户端调用套接字服务器并等待响应