`
wangdf_jee
  • 浏览: 113612 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Eclipse Mobicents

 
阅读更多
Mobicents Eclipse:

http://mobicents.googlecode.com/svn/downloads/sip-servlets-eclipse-update-site

什么是SIP Servlets?
SIP Servlet 是一个 基于Java 语言的 server-side 组件,就类似于Java Servlet 一样,只不过SIP Servlet 需要运行在 SIP Servlet 容器中。
而且SIP Servlet主要用来处理SIP请求,而Servlet用来处理HTTP请求。
HTTP Servlet 与 SIP Servlet的不同之处:

1. HTTP Servlet 都会有一个context对象,也就是每个Servlet都有一个上下文的概念。而SIP Servlet没有。
2. HTTP Servlet 通常会返回一个HTML 页面或者某种形式的字符串(比如JSON),而SIP请求通常只是起到连接服务器与客户端的作用。
3. SIP 是一个P2P的协议,所以服务器端同样可以向客户端发送SIP请求。
4. SIP Servlet通常只是扮演一个代理的角色,最终的请求(客户端的请求)会发送到另一个已注册的SIP客户端。而HTTP Servlet会返回给客户端一个HTTP response。
5. SIP协议类似于长连接,但是一个无状态的链接,所以它可以返回个客户端多个相互独立的response,而HTTP是一个无状态的协议,一个Request对一个Response。
6. SIP 请求可以是一个异步的请求。这一点取决于上一个特性。

关于SIP Servlet的annotation。
Annotation 描述
@SipServlet 标示这是一个SIP Servlet
@SipListener 标示这个一个Sip Listener
@SipApplication 用来定义一组SIP Servlets
@SipApplicationKey 为一个SIP请求或者一个SIP session分配一个SipApplicationSession
比如:

   1. @SipServlet 
   2. public class MyServlet extends SipServlet{ 
   4. } 

@SipServlet public class MyServlet extends SipServlet{ … }

@SipApplication 这个注释一般都用在包上。
比如




   1. @SipApplication(name=”MySipApp”)Package com.example.sip;  

@SipApplication(name=”MySipApp”)Package com.example.sip;

而@SipApplicationKey这个注释需要使用在方法上,而且这个方法需要满足以下条件:
1. Public method
2. Static method
3. Return a String
4. 方法的参数必须是SipServletRequest 类型
5. 传入的参数不可变
例如:




   1. @SipApplication(name=”MySipApp”) 
   2. Package com.example.sip; 
   3.  public class MySipApp{ 
   4.     @SipApplicationKey 
   5.     public static String sessionKey(SipServletRequest request){ 
   6.         Return hash(request.getRequestURI()+getDomain(request.getForm())); 
   7.        } 
   8. } 

@SipApplication(name=”MySipApp”) Package com.example.sip; public class MySipApp{ @SipApplicationKey public static String sessionKey(SipServletRequest request){ Return hash(request.getRequestURI()+getDomain(request.getForm())); } }

在一个Sip application中只能有一个SipApplicationKey。
SIP Factory
SIP Factory 是一个Servlet Factory,也就是说所有的SIP请求进入SIP容器后,都要通过SIP Factory来创建一个Servlet实例。所以SIP Factory是整个SIP容器的入口。如果想调用容器中的其他资源,可以通过SIP Factory来调用。而调用的方法包括依赖注入和”查找”两种方式。
看例子:




   1. //通过注释来调用 
   2. @Resource 
   3. SipFactory sf; 
   4. //通过查找的方式 
   5. SipFactory sf=(SipFactory)getServletContext().getAttribute(“javax.servlet.sip.SipFactory”); 

//通过注释来调用 @Resource SipFactory sf; //通过查找的方式 SipFactory sf=(SipFactory)getServletContext().getAttribute(“javax.servlet.sip.SipFactory”);

SIP Session
SIP协议是一个无状态协议,所以一个response只能对应一个request(虽然一个request可以对应多个response)。也就是说多个request之间无法共享数据。
但是SIP Session提供了一种比较便捷的方式,用来存储request之间的共享数据。而这种方式非常类似于HTTP servlet中的Session对象。
但是与HTTP Session不同的是,在SIP应用中还有一个SIP ApplicationSession对象,这个东西很强大,它可以关于整个应用的session信息。
除此之外,还有个SipSessionUtil可以使用。使用方法和SIP Factory类似:

   1. @Resource 
   2. SipSessionUtil sessionUtil; 
   3. //或者 
   4. SipSessionUtil sessionUtil=(SipSessionUtil)getServletContext().getAttribute(“javax.servlet.sip.SipSessionUtil”); 

@Resource SipSessionUtil sessionUtil; //或者 SipSessionUtil sessionUtil=(SipSessionUtil)getServletContext().getAttribute(“javax.servlet.sip.SipSessionUtil”);

SIP Listeners
SIP application Listeners 就是用来监听SIP相关事件的Java Servlet listeners。它需要实现SIPServletListener接口。同时在其类上标注上Annotation用于简化部署。
比如:




   1. @SipListener 
   2. Public class MyListener implements SipServletListener{ 
   3. ….. 
   4. } 

@SipListener Public class MyListener implements SipServletListener{ ….. }



Back-to-Back User Agent Applications
一个back-to-back user agent(B2BUA)本身就是一个应用程序,同时它还是一个工具,很类似于代理。用于将一个客户端请求,转发给另一个客户端。而javax.servlet.sip.B2buaHelper就是一个实现这种功能的帮助类。

以上内容翻译自SUN的SIP Servlet Tutorial文档。
下面是我自己写的一个简单的sip程序。


   1. package com.ohacker.sip.proxy; 
   2. import java.io.IOException; 
   3. import java.util.ArrayList; 
   4. import javax.servlet.ServletException; 
   5. import javax.servlet.sip.*; 
   6. import javax.servlet.sip.Address; 
   7. /**
   8.  *
   9.  * @author O!Hacker
  10.  */ 
  11. @javax.servlet.sip.annotation.SipServlet 
  12. public class RegistratorServlet extends javax.servlet.sip.SipServlet { 
  13.    public static ArrayList<Address> CLIENT_LIST=new ArrayList<Address>(); 
  14.   
  15.     @Override 
  16.     protected void doInvite(SipServletRequest req) throws ServletException, IOException { 
  17.         System.err.println("doInvite action: "+ req.getCallId()); 
  18.         Proxy proxy=req.getProxy(); 
  19.         System.err.println(req.getTo().getURI().toString()); 
  20.         proxy.proxyTo(req.getTo().getURI()); 
  21.     } 
  22.   
  23.     @Override 
  24.     protected void doRegister(SipServletRequest req) throws ServletException, IOException { 
  25.         System.err.println("doRegister action: "+ req.getCallId()); 
  26.         System.err.println("doRegister action: "+ req.getRequestURI()); 
  27.         SipServletResponse resp=null; 
  28.         Address address=req.getTo(); 
  29.         if(!RegistratorServlet.CLIENT_LIST.contains(address)){ 
  30.             CLIENT_LIST.add(address); 
  31.         } 
  32.         System.err.println(CLIENT_LIST.size()); 
  33.         resp=req.createResponse(SipServletResponse.SC_OK); 
  34.         resp.send(); 
  35.     } 
  36. } 
分享到:
评论

相关推荐

    eclipse插件 - jQuery

    我们在编写js的时候,如果采用了jquery框架,当然很希望Eclipse能帮我们完成代码自动完成的功能了,但Eclipse默认只是支持js的代码自动完成,利用这个插件,可以让Eclipse支持jquery的代码自动完成功能(前提:...

    eclipse java

    【标题】"eclipse java" 指的是Eclipse集成开发环境(IDE)在Java编程中的应用。Eclipse是一款开放源代码的、基于Java的开发平台,它提供了丰富的工具集来支持各种软件开发,尤其在Java语言方面表现卓越。Eclipse ...

    Linux32_Eclipse_Mars

    Linux32_Eclipse_Mars是针对32位Linux操作系统的一款Eclipse Mars集成开发环境(IDE)的安装包。Eclipse Mars是Eclipse项目的一个重要版本,它为软件开发者提供了丰富的功能,尤其在Java开发领域中广泛应用。这个...

    Eclipse下载安装及配置

    Eclipse 下载安装及配置 Eclipse 是一个开源的集成开发环境(IDE),它可以帮助开发者更方便地编写、编译和调试 Java 程序。下面将介绍如何从官网上下载 Eclipse,以及 Eclipse 的安装和配置。 一、Eclipse 下载 ...

    eclipse汉化工具适用于eclipse3.5,eclipse3.6,eclipse3.7的汉化

    该汉化包可用于eclipse3.5,eclipse3.6,eclipse3.7的汉化; 使用:将其解压,并将里面的features和plugins两个文件夹复制到你的eclipse目录下,因为你的eclipse目录下有features和plugins两个文件夹,这时会提示是...

    精通Eclipse.pdf

    本书细致而全面地讲解了EclipseWeb开发技术,共分5篇20章,内容包括Eclipse开发环境的搭建;利用Eclipse开发Java程序;Eclipse下SWT、Junit、Ant的使用方法以及Web应用开发;Eclipse下Struts、CVS的应用以及数据库...

    git eclipse离线安装包

    Eclipse与Git的整合,通过Egit插件实现,使得在Eclipse中可以直接进行Git操作,如克隆、提交、推送和拉取等。 本压缩包文件"git eclipse离线安装包"提供了Egit插件的离线安装方式,这对于网络环境不稳定或者需要...

    Eclipse color Theme离线安装

    Eclipse是一款广泛使用的开源集成开发环境(IDE),它支持多种编程语言,如Java、Python、C++等。Eclipse Color Theme是Eclipse平台上的一个重要插件,它为开发者提供了丰富的代码高亮显示主题,帮助改善代码阅读...

    eclipse/myeclipse 反编译插件 Eclipse Class Decompiler 2.10.0

    Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行Debug调试。 同时还提供了在线自动查找源代码,查看Class二进制字节码的...

    eclipse百度云地址

    根据提供的信息,“eclipse百度云地址”这一主题主要涉及到Eclipse这款流行的集成开发环境(IDE)以及如何通过百度云获取其安装包。接下来,我们将详细探讨Eclipse的相关知识点,包括其定义、特点、应用场景以及如何...

    Linux中eclipse安装包

    在Linux环境中,Eclipse是一款非常流行的开源集成开发环境(IDE),尤其在Java开发领域中被广泛应用。本教程将详细介绍如何在Linux系统上安装并使用"eclipse-java-luna-SR2-linux-gtk.tar.gz"这个Eclipse安装包。 ...

    删除eclipse3.4的configuration目录导致eclipse无法启动的解决办法

    ### 删除Eclipse 3.4的configuration目录导致Eclipse无法启动的解决办法 在使用Eclipse 3.4的过程中,有些用户可能会遇到这样的情况:为了安装新的插件或添加新的jar包,他们选择了删除Eclipse安装目录下的`...

    解决eclipse自动提示反应慢的方法

    Eclipse 自动提示反应慢解决方法总结 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),它提供了丰富的插件和功能来满足开发者的需求。然而,在使用 Eclipse 时,许多开发者可能会遇到自动提示反应慢的问题...

    eclipse linux32安装包

    Eclipse是一款广受欢迎的开源集成开发环境(IDE),主要用于Java编程,但也支持其他语言如C++、Python等。"eclipse linux32安装包"指的是适用于32位Linux操作系统的Eclipse版本。这个安装包是为那些在32位Linux系统...

    Eclipse版本4.2.0中文语言包

    Eclipse是一款广泛使用的开源集成开发环境(IDE),尤其在Java编程领域中占据着重要的地位。Eclipse 4.2.0版本,也被称为Juno,是Eclipse平台的一个重要里程碑,它带来了许多新特性和改进,旨在提升开发者的效率和...

    AngularJS Eclipse 1.2.0 插件下载

    AngularJS Eclipse 1.2.0 插件是专为开发者设计的一款强大的工具,它将AngularJS框架与Eclipse集成,极大地提升了开发AngularJS应用程序的效率。Eclipse是一款广泛使用的开源集成开发环境(IDE),而AngularJS则是一...

    eclipse插件开发form编辑器

    ### Eclipse插件开发Form编辑器的关键知识点 #### 一、Eclipse Forms简介 Eclipse Forms是一种用于创建丰富客户端界面的技术,它可以让你的应用程序在不使用Web浏览器的情况下展现出类似Web的效果。这种技术允许...

    org.eclipse.swt.win32

    org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt....

    m2eclipse_for_eclipse_3.3.zip

    **m2eclipse 插件详解** m2eclipse 是一个专门为 Eclipse IDE 设计的 Maven 集成插件,它的全称为 Maven Integration for Eclipse。这个插件将强大的 Maven 构建工具无缝集成到 Eclipse 开发环境中,使得开发人员...

    eclipse4.4.2中文离线汉化包

    【标题】"eclipse4.4.2中文离线汉化包"涉及到的是Eclipse集成开发环境的一个中文语言包,用于将原本英文界面的Eclipse转换为中文显示,方便中文用户进行开发工作。Eclipse 4.4.2是Eclipse的Luna版本,发布于2014年,...

Global site tag (gtag.js) - Google Analytics