当前位置: 首页 > article >正文

pushlet推送引入SSM项目

第一次web项目使用pushlet的坑

简单说一下项目背景(由于是政府项目不方便透露....请谅解)哈哈哈。。。。。。。。。

还是说一下pushlet的需求场景:

              当后台需要主动推送给前台信息时,可以采用。但现在推送业务的技术比较多可以选择其他的技术,

               我这是根据公司上个项目的技术选择的pushlet,好啦,言归正传;

1,下载jar包打包到仓库   :   https://sourceforge.net/projects/pushlets/
这是源码下载后解压可在项目的lib目录下看到 pushlet.jar ,复制出来随便丢到一个文件夹下,
我这里就丢到 : d 盘根目录下

然后执行dos命令: C:\Users\Administrator>mvn install:install-file -Dfile=D:\pushlet.jar -DgroupId=nl.justobjects.pushlet -DartifactId=pushlet -Dversion=2.0.4 -Dpackaging=jar -DgeneratePom=true(打包前提要有maven的环境)

2, 项目中引用pushlet
                                
项目结构  : 

                                    

项目中的 ajax-pushlet-client.js  / pushlet.properties   /sources.properties 都是要从源码中拷贝进来的

接下来就是配置web.xml :

 <servlet>  
        <servlet-name>pushlet</servlet-name>  
        <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
  
    <servlet-mapping>  
        <servlet-name>pushlet</servlet-name>  
        <url-pattern>/pushlet.srv</url-pattern>  

    </servlet-mapping>   


下面就是创建pushlet对象了不多说看代码:

public class Pushlet {
//核心代码
public static class Hello extends EventPullSource{
@Override
protected long getSleepTime() {
return 50000;
}
@Override
protected Event pullEvent() {
Event event =Event.createDataEvent("/pushPeople");
String json = CommUtil.renderDeepJson(getDangerPeople().get(0));
System.out.println("json:"+json);
json = encode(json);
event.setField("mess", json);
return event;
}
}

// 解决中文编码
public static String encode(String str) {
try {
str = new String(str.getBytes("UTF-8"), "ISO-8859-1");
} catch (Exception e) {
e.printStackTrace();
}
return str;
}

public static List<RecogcardInfo> getDangerPeople(){
String cardId = "569874123963852";
RecogcardInfoService recogcardInfoService = SpringBeanFactory.getBean("recogcardInfoServiceImpl");
List<RecogcardInfo> list = recogcardInfoService.pushPeopleByCardId(cardId);
return list;
}
}

说一下上面代码中我所踩的坑:

我本来是使用:

@Autowired

private static RecogcardInfoService recogcardInfoService; 注入接口的

但程序一运行就报空指针,接口注入不进来,

后来我直接手动:实例化接口实现类-----------回到new的时代,可惜还是空指针

就这样卡了我一天多最后不断网上查资料:

有了一丝明悟:因为pushlet是在服务端做轮询,并不经web容器,所以不能自动注入,要手动获取

方法如下:

public class SpringBeanFactory{ 
    private static ApplicationContext ctx;  
    /** 通过ContextLoaderListener取得ctx */  
    
    public static void initApplicationContext(){  
        ctx=ContextLoaderListener.getCurrentWebApplicationContext();  
    }  
    /** 通过泛型方法取得bean实例 */  
    @SuppressWarnings("unchecked")
public static <T> T getBean(String name){  
        if(ctx==null){  
            initApplicationContext();  
        }  
        return (T) ctx.getBean(name);  
    }  

参考:https://blog.csdn.net/zollty/article/details/8710911

3:页面接收  

配置:sources.properties 

注释掉其他的source标签,配置自己的标签

source1=com.controller.Pushlet$Hello

关于$ 的使用:如果你不是使用的内部类推送就不要使用 $-------比如,直接创建类实现extends EventPullSource 就不需要这样写,可以这样 source1=com.controller.Pushlet


下面就是页面去接收pushlet的推送了:我这里为了方便测试直接写在了index.jsp页面了

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src='ajax-pushlet-client.js'></script> 
</head>
<body>
<h1>hello world</h1>
<div id = "aa"></div>
 <script type="text/javascript">  
            //启动监听  
            // PL._init();  
            // PL.setDebug(true);
             PL.joinListen('/pushPeople');  
            function onData(event) {   
               // alert(event.get("mess")); 
                aa.innerText=(event.get("mess"));
             }  

 </script>  
</body>
</html>

 
到此,基本一切正常了启动程序:访问localhost:8080/XXX(项目名)/

index页面接收到如下数据:

{"address":"上海市徐家汇","birthday":"1995-6-6","cardId":"569874123963852","department":"上海市公安局","endDate":"2018-4-18 16:26:10","id":4,"name":"小红","nation":"汉族","objName":"格尔额","orgnizationAddress":"徐家汇音浪KTV","orgnizationId":"123","personTag":1,"score":"1","sex":"2","startDate":"2018-4-18 16:25:23","time":"2018-4-18 16:25:30"}


第一篇博客可能有很多地方讲的不足,我也是这样采坑过来的,如果你也使用到了pushlet,或你理解的更加深刻欢迎指出,共同学习奋斗








                                           
http://www.lryc.cn/news/2415997.html

相关文章:

  • SAP系统如何运维
  • asp毕业设计——基于ASP+贝叶斯过滤技术的反垃圾邮件管理系统设计与实现(毕业论文+程序源码)——反垃圾邮件管理系统
  • 联发科技发布GSM手机单芯片方案MT6253和智能手机方案MT6516
  • BAT脚本加防火墙455端口
  • 韩国李世龙19岁当爹 与洪瑛琦姐弟恋开花结果
  • Joomla框架搭建远程代码执行(RCE)漏洞复现
  • Directory Listing Denied错误原因和解决方案
  • java虚拟机参数优化_JAVA虚拟机JVM参数优化(2):垃圾收集算法选择
  • 用DW制作简单的浮动广告
  • Transformers 4.37 中文文档(一百)
  • 3D蜘蛛网提供大量的3D模型下载
  • pos与posEx
  • js面试题及答案汇总
  • 鼠标左键单击变双击怎么维修?如何解决鼠标单击异常现象
  • html字体颜色 html中设置字体颜色代码 字体颜色获取
  • java基本集合源码解读-JDK8/11
  • Android学习之 adb被占用解决办法
  • SpringBoot-自定义转换器
  • 怎样才能知道自己的手机是否支持北斗导航?
  • ubuntu11.10 安装oracle
  • 2024年Linux最新Linux系统安装(超级详细教程)
  • C语言基础练习100题(附上详细解答)
  • Web 2.0(维基百科)
  • 安全科普:局域网攻击的常见方法
  • .net 源码地址
  • c++ STL容器 --- 动态数组vector
  • Alerter华丽的消息推送栏
  • myeclipse 8.5 注册码
  • vc画线画框画矩形
  • dmscript.dll文件丢失导致程序无法运行问题