Openfire 可以为插件增加一个admin控制台配置和查看的web UI界面。
openfire web 服务器
Openfire采用内置的jetty作web服务器,在启动AdminConsolePlugin插件时调用startup()方法启动jetty服务器,9090为其明文端口,9091为其加密端口。
openfire 页面处理
Openfire没有采用现在很流行的技术架构(SSH),只使用JSP+JavaBean,
现有的Openfire管理控制台可采用插件方式进行扩展,页面采用Jsp方式实现,页面直接调用业务处理逻辑类(通常命名为XXManager)的实例方法,通常通过request对象封装的方式传递页面展现判定变量,常出现本页跳转。每个插件可定义自己的Servlet类和web.xml及web-custom.xml配置文件。
采用装饰框架方式展现页面,decorator页面有两个,即src/web/decorators目录下的两个页面main.jsp和setup.jsp。采用自定义的admin标签实现,标签库admin.tld放置在src/web/WEB-INF目录下,标签解析类放置在org.jivesoftware.admin包下,有SidebarTag、SubnavTag、SubSidebarTag、TabsTag四个解析类。在调用loadPlugin()方法进行插件加载时,解析插件的plugin.xml配置文件,将获取的相关信息封装在AdminConsole类的generatedModel对象中,后期通过插件解析类提取该对象中的数据并配合sitemesh装饰器进行页面展现。
Openfire 增加插件web UI过程如下:
1. 修改插件的配置文件plugin.xml,增加URL选项。如下:
<!-- Admin console entries -->
这里的标签觉定了页面位置 |
<adminconsole>
<tab id="tab-server">
<sidebar id="sidebar-server-settings">
<item id="TCLSmartHome" name="TCLSmartHome"
url="tclsmarthome.jsp"
description="TCLSmartHome communication" />
</sidebar>
</tab>
</adminconsole>
2. 在插件src目录下面增加web文件夹,以tclsmarthome插件为例, 插入的文件夹路径为openfire_src\src\plugins\tclsmarthome\src\web, 添加文件tclsmarthome.jsp, 这个文件需要自己编写。 可以参考其他插件。
tclsmarthome.jsp 的内容:(仅包含一个输入框和一个按钮)
<html>
<head>
<title>TCLSmartHome</title>
<meta name="pageID" content="users-creation"/>
</head>
<body>
TCLSmartHome Timer Config
<input> </input>
<button>set</button>
</body>
</html>
3. 执行ant plugins 命令, 编译发布运行openfire。 使用admin登陆之后, 在server的设置页面下可以找到TCLSmartHome, 如图:

点进去之后就可以看到一个输入框和一个按钮
使用web UI的优点:
与openfire风格统一, 不需要发布额外的配置程序。
缺点:
UI不易调整, 修改UI需要ant plugins 并重启openfire才能生效, 不易调试(内嵌的jetty特性决定)。
不易实现复杂的UI, 需要维护web文件夹下的jsp(需要熟悉jsp 页面开发)。
使用第3方配置程序的优点:
容易调试,界面容易调整, 容易调试。 出错不影响openfire。
缺点:
需要实现xmpp协议与openfire连接(可使用smark)。
需要维护第3方应用程序(可考虑使用java swing)。