转:http://blog.csdn.net/hzaccp3/article/details/19964655

需求:
  通过http方式,向openfire客户端发信息(非XMPP协议)
openfire发送信息(只发信息)通常使用smack等XMPP客户端来实现,但有时有些客户端不想使用smack,如android、web或非java客户端。此时可以给openfire服务器开一个接口,并且能通过http或service方式调用,这样就可以不用考虑客户端的类型了。当然,这只是做最简单的发送信息
 实现方式:
  给openfire服务器添加一个插件,并注册为servlet和Component,在servlet中使用ComponentManager给客户端发送信息。
    
 目录结构:
    
 实现步骤:
  1:在openfire的src\plugins目录下创建sendmsg目录,在sendmsg目录下创建左上图文件结构,并将src\plugins\sendmsg\src\java应用为源目录,如右上图所示。
  2:实现SendMsgPlugin,继承Plugin类,并重写initializePlugin()及destroyPlugin(),方法体为空。
  3:在plugin.xml文件中添加以下代码,注册插件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <plugin>
  3. <name>sendmsgPlugin</name>
  4. <class>com.hzaccp.sendmsg.plugin.SendMsgPlugin</class>
  5. <description></description>
  6. </plugin>

  4:实现SendMsgServlet类,继承HttpServlet类及实现Component接口。
    • 重写init(ServletConfig config)方法[不是init()方法],在方法体中初始化

  1. AuthCheckFilter.addExclude(SERVICE_NAME);//给验证器添加排除的路径
  2. componentManager = ComponentManagerFactory.getComponentManager();//注册组件
  3. componentManager.addComponent(COMPONENTNAME, this);

    •重写doGet()方法,在方法体中处理业务,这里发送信息

  1. //在些之前应该做验证逻辑
  2. Message msg = new Message();
  3. msg.setBody("mess body");
  4. msg.setFrom("admin" + domain);//发信人
  5. msg.setTo("service" + domain);//接收人
  6. msg.setType(Message.Type.chat);//为聊天信息
  7. componentManager.sendPacket(this, msg);//发送

    •重写destroy()方法,释放内存

  1. componentManager.removeComponent(COMPONENTNAME);
  2. componentManager = null;
  3. AuthCheckFilter.addExclude(SERVICE_NAME);

  5:在web-custom.xml文件中注册servlet

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  3. <web-app>
  4. <servlet>
  5. <servlet-name>sendmsgservlet</servlet-name>
  6. <servlet-class>com.hzaccp.sendmsg.plugin.SendMsgServlet</servlet-class>
  7. </servlet>
  8. <servlet-mapping>
  9. <servlet-name>sendmsgservlet</servlet-name>
  10. <url-pattern>/sendservlet</url-pattern>
  11. </servlet-mapping>
  12. </web-app>

  6:修改src\web\WEB-INF\decorators.xml文件,添加排除过滤路径

  1. <pattern>/plugins/sendmsg/sendservlet*</pattern>

  7:发布后访问http://127.0.0.1:9090/plugins/sendmsg/sendservlet
 关键点:
  1:目录结构,这关系到插件能否部署成功
  2:SendMsgServlet类初始化时,需要给验证器添加排除的路径[AuthCheckFilter.addExclude(SERVICE_NAME);],否则访问时需要登录。
  3:如果想在servlet中只输出自已的内容,那第6点是很有必要的,否则会将你的内容嵌入到openfire自带的框架中。如果已在SendMsgServlet类初始化时添加排除路径,而没完成上述第6点,则会出空指针。
  4:在SendMsgServlet的doGet()或doPost()中,应该加上验证,否则任何人都可以向任何人发信息。

5:最后ant build一下,生成插件
 下载路径:
http://download.csdn.net/detail/hzaccp3/6962851

(转)openfire插件开发(三)通过http方式向openfire客户端发信息的更多相关文章

  1. openfire插件开发之完美开发

    http://redhacker.iteye.com/blog/1919329 一.说在前面 在继上篇Openfire3.8.2在eclipse中Debug方式启动最简单的方式后,我研究了openfi ...

  2. (转)openfire插件开发(一)

    转:http://blog.csdn.net/lovexieyuan520/article/details/37774909 1. 在上一篇博文中,我介绍了Openfire3.9.3源代码导入ecli ...

  3. 通过三个DEMO学会SignalR的三种实现方式

    一.理解SignalR ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信(即:客户端(Web页面)和服务器端可以互相实时的通知消息 ...

  4. Hive metastore三种配置方式

    http://blog.csdn.net/reesun/article/details/8556078 Hive的meta数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储.远端存储比较适 ...

  5. django 模板语法和三种返回方式

    模板 for循环 {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} if语句 ...

  6. js的三种继承方式及其优缺点

    [转] 第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = ' ...

  7. spring ioc三种注入方式

    spring ioc三种注入方式 IOC ,全称 (Inverse Of Control) ,中文意思为:控制反转 什么是控制反转? 控制反转是一种将组件依赖关系的创建和管理置于程序外部的技术. 由容 ...

  8. Map三种遍历方式

    Map三种遍历方式 package decorator; import java.util.Collection; import java.util.HashMap; import java.util ...

  9. php 递归函数的三种实现方式

    递归函数是我们常用到的一类函数,最基本的特点是函数自身调用自身,但必须在调用自身前有条件判断,否则无限无限调用下去.实现递归函数可以采取什么方式呢?本文列出了三种基本方式.理解其原来需要一定的基础知识 ...

随机推荐

  1. 外部表及oracle数据库内存

    create table alert1 (log varchar2(1000))2 organization external3 (type oracle_loader4 default direct ...

  2. cookie的使用说明

    cookie的英文意思是饼干的意思,实质上是键值对组成的字典.就是说你访问某一个网址,服务器给你一个东西,你收到东西,并且贴上了一个标签.下次你访问服务器的时候,请求带有标签.这样服务器给你之后,就会 ...

  3. HTML5: 目录

    ylbtech-HTML5: 目录 1.返回顶部 1. http://www.runoob.com/html/html5-intro.html 2. http://www.w3school.com.c ...

  4. 62、saleforce的schedule

    //需要实现 Schedulable接口,实现 execute方法 public class MerchandiseSchedule implements Schedulable{ public vo ...

  5. npm yarn bower (前端必会的工具)

     https://qunitjs.com/  https://www.cnblogs.com/shytong/p/5417789.html 

  6. HDU 1724 Ellipse (自适应辛普森积分)

    题目链接:HDU 1724 Problem Description Math is important!! Many students failed in 2+2's mathematical tes ...

  7. 嵌入式C语言4.4 C语言内存空间的使用-多级指针

    多级指针 int **p; 存访地址的地址空间

  8. Rust <9>:启用第三方库的备选 features

  9. VC2008中处理CStatic控件的单击STN_CLICKED消息

    在MFC中,静态文本CStatic控件主要是用来作为标签,即作为注释用的.一般情况下不做消息响应.但是有时特殊情况下会做一些消息响应,比如处理单击事件STN_CLICKED等. 在VC2008下使用M ...

  10. The Accomodation of Students HDU - 2444 二分图判定 + 二分图最大匹配 即二分图-安排房间

    /*655.二分图-安排房间 (10分)C时间限制:3000 毫秒 |  C内存限制:3000 Kb题目内容: 有一群学生,他们之间有的认识有的不认识.现在要求把学生分成2组,其中同一个组的人相互不认 ...