使用 Vaadin 实现全堆栈 Java Web 开发(6)
 
- UID
- 1066743
|

使用 Vaadin 实现全堆栈 Java Web 开发(6)
用 Python 实现 Vaadin 编程 根据设计,Vaadin 与 Java 之外的其他编程语言是兼容的,而且支持 JVM 生态系统中的许多编程语言(参见 Wikipedia 的 ,这些编程语言包括 Python(通过 Jython)、Groovy 和 Scala)。
本教程中的最后一个示例用 Python 重写了 article-viewer 应用程序。
在成功加载并运行此示例之前,必须安装下列附加工具:
- Jython 2.7 或更高版本。
- PyDev 4.3.0 或更高版本,已使用 Jython 进行测试(请参见 文档信息,了解关于如何在 Eclipse 上安装 PyDev 的信息)。
- Vaadin 6.8.16(或最新的 6.x)JAR;您必须将这个 JAR 文件放在 WebContent/WEB-INF/lib 文件夹中。
您可以在 JythonVaadin.zip 存档文件中找到此示例的 Eclipse 项目(参见 )。将此存档文件导入 Eclipse 中来运行该示例。
请注意 Java 版本的代码结构的相似性。如果查看 Web 应用程序的 web.xml 文件,如清单 6 所示,您就会发现,它加载了专门的 Python 解释器 servlet,而不是常规的 VaadinServlet。
清单 6. JythonVaadin 应用程序的 web.xml 描述符1
2
3
4
5
6
7
8
9
10
11
12
13
| <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" ...>
<display-name>JythonVaadin</display-name>
...
<servlet>
<servlet-name>Jythonvaadin Application</servlet-name>
<servlet-class>com.example.jythonvaadin.PythonServlet</servlet-class>
<init-param>
<description>Vaadin application class to start</description>
<param-name>application</param-name>
<param-value>PythonArticleViewer</param-value>
</init-param>
...
|
在 PythonServlet 类中,Jython 解释器已加载并与 PythonArticleViewer.py 源文件一起提供,如清单 7 所示。
清单 7. 实例化 Jython 解释器的 PythonServlet1
2
3
4
5
6
7
| ...
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("from "+applicationModuleName+" import "+applicationClassName);
PyObject pyObj = interpreter.get(applicationClassName).__call__();
Application pyApp = (Application)pyObj.__tojava__(Application.class);
applicationClass = pyApp.getClass();
...
|
清单 8 显示了通过 Vaadin 创建 article-viewer UI 的部分 Python 代码。如果您熟悉 Python 语言,就可以看出这段代码与 Java 版本之间的相似性。
清单 8. Python article-viewer Web 应用程序1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| from com.vaadin import Application
from com.vaadin.event import ItemClickEvent
from java.lang import String
from com.vaadin.terminal import ExternalResource
...
class PythonArticleViewer(Application, ItemClickEvent.ItemClickListener):
def __init__(self):
pass
def init(self):
...
mainWindow = Window("Python Article View")
vertical = VerticalLayout()
vertical.setMargin(True)
horiz = HorizontalLayout()
horiz.addStyleName("outlined")
self.table = Table("Select article")
self.table.addContainerProperty("Year", String().getClass(), None)
self.table.addContainerProperty("Article", String().getClass(), None)
for idx, row in enumerate(self.listdata):
self.table.addItem(self.getData(row) , idx)
...
vertical.setSizeFull()
vertical.addComponent(horiz)
vertical.setExpandRatio(horiz,1)
mainWindow.addComponent(vertical)
self.setMainWindow(mainWindow)
def itemClick(self, event):
...
|
结束语Vaadin 通过提供全堆栈 Java 开发解决方案提高了 Java Web 开发人员的生产力。您可以利用浏览器创新中的最新成果来创建 UI,这些创新成果包括 HTML5、CSS、Ajax 和 JavaScript,所有这些都无需牺牲您的 Java IDE 的舒适度。Vaadin UI 可以使用 Java 代码,以编程方式进行创建,或者以声明方式在 HTML 设计文档中进行创建。Vaadin 甚至还支持使用其他 JVM 支持的编程语言(包括 Python)进行编码。丰富的可用增件(add-on)库使您能够轻松地将功能添加到您的应用程序中。
您使用 Vaadin 和标准 Java EE 技术创建的应用程序可以轻松地在云中进行部署。请转到我的 “ ” 教程,迅速将一个完整的 Web 应用程序部署到 IBM Bluemix 云中。 |
|
|
|
|
|