这篇博文的开发实例是必须基于前面一篇“SIP Servlet开发环境配置”,如果没有正确配置SIP Servlet开发环境的,请参考“SIP Servlet开发环境配置”篇。

首先,我们基于上一篇中提到的方法创建一个叫“SipTest”的dynamic Web Project工程,如下图所示:

java sip java sip server_xml文件

在这个工程中,有个文件非常重要,那就是WEB-INF目录下的sip.xml文件,它是整个SIP Servlet工程的启动初始化参数加载文件。里面包含了Sip Servlet在容器中加载的名称以及由那个类来处理SIP请求和响应。在这个工程中的sip.xml文件如下图所示:

java sip java sip server_java sip servlet_02

其中的中名称必须要和保持一致。因为SIP Servlet是Http Servlet和SIP Servlet的混合体,在Http Servlet的初始化过程中,我们需要去查询我们所注册的Sip Servlet的名称,这时查询的名称要与这个地方提到的名称相同,具体见下图中红色框图部分:

java sip java sip server_java_03

只有保持这个地方的一致,才能保证能够正确的从Servlet上下文中获取到SipFactory实例对象从而完成后面的Sip Request之类的实例构造。

上面说的是一个Sip Servlet工程中需要注意的地方,下面来说说一个基本的Sip Servlet工程(当然是针对点击拨号的)需要完成的工作。其主要由两部分构成,一个是响应Http请求,另外一个就是响应Sip请求的部分。为了简单起见,我在工程中只定义了两个类,一个就是TestSip.java用来处理SIP协议相关的消息,另外一个是TestWebSip.java用来处理Http协议相关的消息。如下图所示:

java sip java sip server_xml文件_04

具体的代码就不一一赘述了,主要简单说一下处理过程。用户通过网页发送请求,转到图中的doPost函数(废话,大家都懂),在doPost函数中,会根据请求参数向主叫或被叫发送INVITE请求,至此已经与Http Servlet无任何关系,它已完成使命。接下来任何关于SIP协议的详细处理,将全部转交由TestSip.java中定义的类去处理,里面的函数一看就明白了,具体的处理过程就要参照3PCC的RFC说明来了。

这就是整个3PCC开发的大致过程,当然里面肯定会遇到一些细节问题,有需要探讨的,欢迎相互切磋。