基于openfire源码开发插件

本文详细介绍如何基于OpenFire源码开发插件,包括搭建开发环境、实现插件功能、集成Servlet与JSP页面及配置插件等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【0】README
1)本文旨在 简述如何 基于openfire源码开发插件, 如何导入 openfire源码到 eclipse,参见 http://blog.youkuaiyun.com/pacosonswjtu/article/details/51871622


【1】开发openfire插件步骤
step1)建立插件目录树(插件名称==plugindemo


补充1)各个目录树的目录项的意义:

补充2)目录树的缩略图如下


step2)添加 java 根目录到 source folder

step3)开发openfire插件,实现 Plugin接口

package com.myplugin;

import java.io.File;

import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.InterceptorManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Packet;

// 如果需要拦截消息,就必须实现  PacketInterceptor
public class PluginDemo implements PacketInterceptor, Plugin{
	private static PluginManager pluginManager;
	private InterceptorManager interceptorManager;
	
	public PluginDemo() {
		interceptorManager = InterceptorManager.getInstance();
	}
	
	@Override
	public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException {
		System.out.println("拦截消息以进行逻辑处理" + "from =" + packet.getFrom() + 
				", to = " + packet.getTo() + 
				", incoming = " + incoming + 
				", proccessed = " + processed);
		System.out.println("\n=========================");
	}
	
	@Override
	public void destroyPlugin() {
		interceptorManager.removeInterceptor(this);
		System.out.println("PluginDemo Plugin has been destroyed.");
	}

	@Override
	public void initializePlugin(PluginManager manager, File pluginDirectory) {
		interceptorManager.addInterceptor(this);
		pluginManager = manager;			
		System.out.println("PluginDemo Plugin has been installed successfully.");
	}
}
step4)可选的,如果你觉得有必要的话,还可以在插件中嵌入 servlet;

package com.myplugin.manager;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PluginDemoServlet extends HttpServlet{

	@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain");
        PrintWriter out = response.getWriter();
        System.out.println("console info: 请求SampleServlet GET Method");
        out.println("GET Method: these info are transmitted into client.");
        out.flush();
    }
 
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // super.doPost(request, response); // should be commented out
        
        response.setContentType("text/plain");
        PrintWriter out = response.getWriter();
        System.out.println("请求 PluginDemoServlet POST Method");
        out.print("请求 PluginDemoServlet POST Method");
        out.flush();
    }

	@Override
	public void init() throws ServletException {
		System.out.println("servlet init successfully.");
	}
}
step4)补充: 添加servlet映射

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE web-app  
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"  
    "http://java.sun.com/dtd/web-app_2_3.dtd">  
    
<web-app>
	 <servlet>  
        <servlet-name>SampleServlet</servlet-name>  
        <servlet-class>com.myplugin.manager.PluginDemoServlet</servlet-class>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>SampleServlet</servlet-name>  
        <url-pattern>/myservlet</url-pattern>  
    </servlet-mapping>
</web-app>
step5)可选的,你也可以开发一些jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>plugin demo page.</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="pageID" content="sample-service"/> <!-- 这个是必须的,同 plugin.xml 中引用的标识符必须一样. -->
  </head>
  
  <body>
    <h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3>
    <div class="jive-contentBoxHeader">jive-contentBoxHeader</div>
    <div class="jive-contentBox">jive-contentBox</div>
    
    <div class="jive-table">
        <table cellpadding="0" cellspacing="0" border="0" width="100%">
            <thead>
                <tr>
                    <th>name</th>
                    <th>age</th>
                    <th>stuid</th>
                </tr>
            </thead>
            <tbody>
                <tr class="jive-odd">
                    <td align="center">zhangsan</td>
                    <td align="center">35</td>
                    <td align="center">2014210541</td>
                </tr>
                <tr class="jive-even">
                       <td align="center">lisi</td>
                    <td align="center">67</td>
                    <td align="center">2014110321</td>
                </tr>
                <tr class="jive-odd">
                       <td align="center">wangwu</td>
                    <td align="center">12</td>
                    <td align="center">2015117891</td>
                </tr>
             </tbody>
        </table>
    </div>
  </body>
</html>
step5)补充:在jsp中 请求 该 servlet
<h3>hello world. <a href="<c:url value="/plugins/plugindemo/myservlet"/>">plugin demo servlet</a></h3>
step6)编写插件配置文件 plugin.xml
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <!-- Main plugin class  这里是最重要滴,就是你的插件的全路径-->
    <class>com.myplugin.PluginDemo</class>
 
    <!-- Plugin meta-data -->
    <name>plugindemo</name>
    <description>This is the my plugindemo.</description>
    <author>pacoson</author>
 
    <version>1.0</version>
    <date>29/07/2016</date>    
    <minServerVersion>4.0.2</minServerVersion>
    <licenseType>gpl</licenseType>
 
    <adminconsole>
    	<tab id="tab-server">
            <sidebar id="sidebar-server-settings">
                <item id="plugindemo-service" name="my plugin demo" url="plugindemo-service.jsp"
                     description="plugindemo-service plugin." />
            </sidebar>
        </tab>    
    </adminconsole>
</plugin>
【2】编译插件并打包为jar copy到 openfire 插件目录下
1)编译打包后的效果

2)通过ant 编译插件的步骤(其实很简单,因为 openfire 自带 编译模板,如果要自己写的话,那就有点复杂了)
step1)根目录\build.properties, 填写 插件名称 到 合适位置


step2)右键build.xml -> run as -> ant build(有两个ant build,选择第2个),运行 ant 脚本 编译即可,编译后的结果 在 本章节已经说明了;


【3】查看访问效果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值