SIP Servlet开发实例讲解

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

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

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

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

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

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

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

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

时间: 2024-11-05 21:56:23

SIP Servlet开发实例讲解的相关文章

Reactive Cocoa 响应式编程开发实例讲解-中篇

上一篇文章作为开门篇讲述了Cocoa Reactive概述. 这里我们详细介绍一下CocoaReative在代码中的应用. 网上好多blog有人形容CocoaReative 中 signals是插座或者水龙头,感觉不是很好理解.我举个更贴近生活的,用电话订菜(餐馆是Signals,电话订阅是SubScriberNext). 1.概述 Create一个Signal我们视为是一个支持电话订餐的餐馆,他们有很多菜,油盐酱醋就更不用说,当一个电话打进来首先,这个Signal就开始执行,等菜做好了,菜馆要

Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐) 于浩洋 著   ISBN 978-7-121-23998-4 2014年9月出版 定价:59.00元 356页 16开 编辑推荐 以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法 以热门游戏2048.卡牌为例,完整再现手游的开发过程 Cocos2d-x作者之一林

jqm的多列布局demo,html5的多列布局demo,多列布局的详细讲解,html5开发实例详解

由于移动设备屏幕宽度较小,所以一般不建议使用多列布局.但有时你可能需要并排放置一些元素(如按钮之类的). jQuery Mobile通过约定的类名ui-grid来提供了一种基于css的多列布局方法.共提供了五种布局方式,分别是:ui-gird-solo:单列布局,ui-gird-a:双列布局,ui-gird-b:三列布局,ui-gird-c:四列布局,ui-gird-d:五列布局.布局网格总宽度100%,完全不可见(无边框无背景),没有任何内边距或外边距,不会对网格中的内容产生任何干扰. 今天我

javaweb学习之Servlet开发(二)

javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1</servlet-name> 3 <servlet-class>gacl.servlet

javaweb学习总结(六)——Servlet开发(二)

转载:http://www.cnblogs.com/xdp-gacl/p/3763559.html 只为成功找方法,不为失败找借口! javaweb学习总结(六)——Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletC

OSGI入门实例讲解(一)

开放服务网关倡议(OSGi)定义了开发和部署模块应用程序和库的体系结构.作为介绍OSGi的第一篇文章,本文旨在让你了解OSGi开发的一些概念,并向你展示了如何使用Eclipse的OSGi容器(Equinox)实现建立一个简单的Hello World应用.此外还简要介绍了使用OSGi构建面向服务的应用程序以及OSGi的servicefactory和servicetracker类. OSGI(Open Services Gateway Initiative),也叫JAVA动态模块系统,定义了一套模块

Servlet开发(二)

首先声明:本文转载自:@孤傲苍狼 https://home.cnblogs.com/u/xdp-gacl/ javaweb学习总结(六)——Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: 1 <servlet> 2 <servlet-name>ServletConfigDemo1<

Android 依赖注入: Dagger 2 实例讲解(一)

本文原创,转载请注明出处:http://blog.csdn.net/zjbpku 关于Dagger,在之前的博文(Android 依赖注入:Dagger 实例讲解(Demo下载))中已有介绍, 本文说的Dagger 2主要是由Google技术 人员参与开发的,当然包括Square的各位及其他一些Contributors在内的大牛也贡献了不少.该项目大概是从去年11月份开始启动的,到目前该项 目还在继续进行,Snapshot version也是刚刚发布不久,从Github提供的内容看,不久会是Pr

JDBC - 开发实例 - MVC模式

JDBC - 开发实例 - MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server</param-name> //主机名 <param-value>localhost</param-value> </context-param> <context-param> <param-name>db</param-name&