AWT是在桌面上呈现 UI 的特定于操作系统的部分,而不是在 JSP、Servlet 等存在的事物的 Web 端。更具体地说,像Swing(它有你提到的那些 JPanel、JButton 等作为 UI 组件)和SWT目前基于 AWT 并在它之上工作以呈现 UI 并使其按预期工作。
不幸的是,这一切意味着您不能在网页上使用基于 AWT 的组件,因为网页(通常)与平台无关,因为它们无法准确决定 UI 的各个部分是如何呈现的,只有一个一堆标记被视为对 Web 浏览器的一种请求,让他们做 Web 设计师希望做的事情,但没有 100% 保证最终结果将是设计师想要的。
为了在 Java 的 Web 端实现 Swing/AWT 类型的 UI 创建,已经进行了很多重新发明,因为它是一个聪明的模型,就像您似乎已经知道Google Web Toolkit试图尽其所能使 Web 看起来更像桌面一样应用程序,而实际上它只是自动化底层所需的 JavaScript Ajax 以使网页表现得像桌面应用程序一样。另一个框架是Tapestry,我没有亲自使用过,但有些人认为它也是一个不错的选择。
当然还有我个人最喜欢的Apache Wicket,它可以让您真正分离 Java 代码和标记,它的行为也与 Swing UI 代码非常相似!事实上,对于最简单的事情,Swing 的 UI 组件类存在大量名称冲突。假设您熟悉编写桌面应用程序 UI,我强烈推荐 Wicket,它将枯燥乏味的部分(Servlet、URL 解析、页面书签功能、安全性......)抽象出来,并用类似的事件驱动模型(但不等于)到 Swing 的EDT,这是桌面 UI 魔法通常发生的地方。
虽然这与您正在寻找的东西完全不同,但使用 Wicket,您可以创建这样一组 POJO Web 组件,您可以在任何地方重用它们,从而得到您想要的东西。不过提醒一句,Wicket 假设你真的知道如何使用 Java 进行编码,一些可笑的简单事情一开始可能很乏味,但最终你应该对你所得到的感到非常满意。