?
? ? ? ?最近在研究Android的推送,这里主要要讲的用XMPP协议进行android的推送。
?????? Androidpn的全称是android push notification。它一个android推送的开源框架,客户端用到的是asmack,是一个XMMP协议的实现。服务器端用了spring?hibernate进行页面展示,主要是用来显示和服务器建立连接的用户,以及消息的推送。如下图:
?????? 官方的代码实现是用的Jetty来代替tomcat实现的,刚拿到官方代码时,一头雾水,费了一天的时间了解了服务器端的整体构建,然后进行重构。首先把羡慕部署在tomcat上,编译会发现出了很多错误,然后进行整改,删除一些和tomcat重复的包,然后删掉jetty等等等等,具体细节就不阐述了。整改成功后,测试可用,今天开始研究androidpn服务器端的源代码,其实本来我不太了解XMPP协议的,经过这几天的学习,大概明白一点了。下面开始讲解下androidpn中的几个关键类。
?????? 首先登场的当然是和客户端简立连接的类了。是在org.androidpn.server.xmpp.net下的Connection类里,如下是它其中的字段:
public class Connection {
private static final Log log = LogFactory.getLog(Connection.class); private IoSession ioSession; private Session session; private ConnectionCloseListener closeListener; private int majorVersion = 1; private int minorVersion = 0; private String language = null; private TLSPolicy tlsPolicy = TLSPolicy.optional; @SuppressWarnings("unchecked") private static ThreadLocal encoder = new ThreadLocalEncoder(); private boolean closed;
?
?
其中iosesion引用的MINA框架中的一个类,它是MINA中所有session类的顶级接口,它是线程安全的,其中定义了一些客户端的端口 地址等属性信息,主要是用来保存服务器和客户端之间建立连接的一些信息。MINA是一个socket框架,主要是为了多线程管理socket的出现的,有兴趣的朋友可以看一看。
?????? Session是一个抽象类,也是自定义的,主要是描述一些服务器和客户端的信息。Majorversion和minorversion指的是主版本和副版本。
?????? Tlspolicy指的是传输协议的策略,是一个枚举类型,分为三种required,optional,disabled.
?
?????? Encoder主要是来定义编码的,这里用的是utf8。
?????? 在这个类里,还有一个ClientAuth,也是枚举类型,主要是用来表示客户端是否需要验证。它主要的功能是用来建立连接,定义了一下发送数据到客户端的方法,还有就关闭连接的时候绑定监听器进行处理。
?????? 今天好晚了,明天继续…
?
?
?
所有的通讯内容都可以在XMLLightweightParser中的read方法中看到(服务器端的openfire.nio包里),而如果只想看消息的内容,都在/Androidpn/src/org/androidpn/server/xmpp/net/XmppIoHandler.java中messageReceived(IoSession session, Object message)里边。可以看看
Error creating bean with name 'urlMapping' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml] 不知道是不是缺少文件,麻烦你发给我一份服务端源码,谢谢!
我是把服务器端的代码复制到tomcat的webapps这个目录下,然后启动tomcat。
在IE里输入:http://localhost:8080/Androidpn/WebRoot/index.jsp
结果出现下面的错误:
HTTP Status 500 -
--------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /WebRoot/index.jsp (line: 2, column: 1) File "/includes/taglibs.jsp" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:133)
org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:322)
org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:357)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:467)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1777)
org.apache.jasper.compiler.Parser.parse(Parser.java:135)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:119)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:193)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
代码迷推荐解决方案:The server encountered an internal error () that prevented it from fulfilling this request.,http://www.daimami.com/java-web/317.html