当前位置:  编程技术>移动开发
本页文章导读:
    ▪Spring 企业级开发使用-AXIS和spring的远程服务整合的应用        Spring 企业级开发应用---------AXIS和spring的远程服务整合的应用 转载地址:http://zjkilly.iteye.com/blog/738397   Spring框架对远程访问技术提供了很好的集成机制,Spring目前支持的技术包括: 1. Remote Me.........
    ▪ ListActivity札记        ListActivity笔记     ListActivity用于显示绑定在Array或Cursor对象的数据项,当然你还可以自定义数据源,只需实现ListAdapter接口定义自己的数据源(这是典型的适配器模式); ListActivity通过注册了Base.........
    ▪ 手机wap2开发(3)(转载)       手机wap2开发(三)(转载) WAP2.0 文档结构 必须包含<html>, <head>, <title>和<body> 元素。 <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforu.........

[1]Spring 企业级开发使用-AXIS和spring的远程服务整合的应用
    来源: 互联网  发布时间: 2014-02-18
Spring 企业级开发应用---------AXIS和spring的远程服务整合的应用

转载地址:http://zjkilly.iteye.com/blog/738397

 

Spring框架对远程访问技术提供了很好的集成机制,Spring目前支持的技术包括:

1. Remote Method Invocation (RMI)。通过 RmiProxyFactoryBean和RmiServiceExporter,Spring支持以java.rmi.Remote和java.rmi.RemoteException 定义的传统RMI接口,提供经由RMI的透明访问;


2.Spring内置的HTTP invoker远程调用机制。Spring开发团队意识到在RMI服务和基于HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另一方面,Hessian/Burlap能很好地穿过防火墙工作,但使用自己私有的一套对象序列化机制。因此,Spring的HTTP invoker应运而生。HTTP invoker是一个全新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程   调用(可穿越防火墙),并使用Java的序列化机制(从而降低开发工作的难度)。当参数或返回值是复杂类型,并且不能通过Hessian的序列化机制序列化时,Http invoker就很有优势。 Spring中相应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter;


3.Hessian。作为一个轻量级分布式组件技术,Hessian采用了自己定义的二进制协议,这    似乎与目前业界大量应用SOAP的趋势背道而驰,但对于一些简单的远程访问服务,Hessian足够应对。在Spring中,通过HessianProxyFactoryBean和HessianServiceExporter两个类,我们可以透明地将需要对外提供的服务发布出去,当然这里依旧采用Caucho这家来自California的公司的二进制协议;


4.Burlap。Burlap可以说是Hessian的XML版本。Spring中的支持类包括                        BurlapProxyFactoryBean和BurlapServiceExporter;


5.JAX RPC(Java APIs for XML-based Remote Procedure Call)。 Spring支持通过JAX RPC访问的Web Service。事实上,Spring对于Web Service的封装相当简单,Spring提供了一个代理工厂Bean:JaxRpcPortProxyFactoryBean,能让你在应用中无缝集成一个web sevice,作为另一个Bean的协作者,JaxRpcPortProxyFactoryBean类用JAX-RPC来访问远程Web Service。


6.JMS。Spring中对应的支持类包括JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean。

 

    这里,我们着重讨论一下Spring对于Web Service的支持。这种支持包括两方面:
    第一,基于JAX-RPC发布Web Service。
    第二,访问Web Service。

    对于需要发布为Web Service的业务逻辑bean,只需要继承Spring的ServletEndpointSupport 类即可。假设有如下业务接口以及相应的实现类:
public interface SayHello
{
  public String sayHello(String who); 
}
public class SayHelloImpl implements SayHello
{
  public String sayHello(String who)
  {
      return "Hello,"+who;
  }
}
如果需要将SayHelloImpl 发布为Web Service,则需要编写一个Web Service类,让该类实现SayHello接口,并继承ServletEndpointSupport类。示例如下:

public class SayHelloEndPoint extends ServletEndpointSupport implements SayHello
{
      
  private SayHello sh;

  protected void onInit()
  {
      this.sh = (SayHello) getWebApplicationContext().getBean("sayHello");
  }

  //将业务逻辑bean的业务方法公开发布为WebService
  public String sayHello(String who) throws RemoteException
  {
      return sh.sayHello(who);
  }
}
    
    而后,定义Spring的配置文件,在配置文件中部署业务bean,示例如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="sayHello" >
        <property name=>
  </bean >
</beans>

    然后修改web.xml文件,让AxisServlet拦截某些请求 ,示例如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD WebApplication 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 定义AxisServlet-->
  <servlet>
      <servlet-name>AxisServlet</servlet-name>
      <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  </servlet>

      <!-- 映射AxisServlet-->
      <servlet-mapping>
            <servlet-name>AxisServlet</servlet-name>
            <url-pattern>/axis/*</url-pattern>
      </servlet-mapping>
</web-app>

    在上述配置文件中,可以看到所有匹配/axis/*模式的请求都由AxisServlet处理。即:Spring发布的Web Service都在放在axis路径下。
    然后编写WSDL文件,或者使用工具生成。WSDL文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- wsdl的根元素,包含schema等信息-->
<deployment xmlns="http://xml.apache.org/axis/wsdd/" 
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- wsdl的全局配置-->
      <globalConfiguration>
            <parameter name="adminPassword" value="admin"/>
            <parameter name="sendXsiTypes" value="true"/>
            <parameter name="sendMultiRefs" value="true"/>
            <parameter name="sendXMLDeclaration" value="true"/>
            <parameter name="axis.sendMinimizedElements" value="true"/>
            <requestFlow>
                  <handler type="java:org.apache.axis.handlers.JWSHandler">
                        <parameter name="scope" value="session"/>
                  </handler>
                  <handler type="java:org.apache.axis.handlers.JWSHandler">
                        <parameter name="scope" value="request"/>
                        <parameter name="extension" value=".jwr"/>
                  </handler>
            </requestFlow>
      </globalConfiguration>
      <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
      <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
      <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
      <!-- 定义WebService的管理台-->
      <service name="AdminService" provider="java:MSG">
            <parameter name="allowedMethods" value="AdminService"/>
            <parameter name="enableRemoteAdmin" value="false"/>
            <parameter name="className" value="org.apache.axis.utils.Admin"/>
            <namespace>http://xml.apache.org/axis/wsdd/</namespace>
      </service>
      <!-- 定义自己的WebService-->
      <service name="SayHelloService" provider="java:RPC">
            <parameter name="allowedMethods" value="*"/>
            <!-- 定义WebService的实现类-->
            <parameter name="className" value="com.ws.SayHelloEndpoint"/>
      </service>
      <!-- 定义WebSerivice的系统服务。-->
      <service name="Version" provider="java:RPC">
            <parameter name="allowedMethods" value="getVersion"/>
            <parameter name="className" value="org.apache.axis.Version"/>
      </service>
      <transport name="http">
            <requestFlow>
                  <handler type="URLMapper"/>
                  <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
            </requestFlow>
      </transport>
      <transport name="local">
            <responseFlow>
                  <handler type="LocalResponder"/>
            </responseFlow>
      </transport>
</deployment>

经过上述这些步骤,可将部署在Spring的普通业务逻辑bean发布成Web Service。


  Spring发布的Web Service是标准的基于SOAP协议的Web Service。因此可以使用标准客户端访问,也可以利用IoC容器来管理Web Service,利用IoC容器时,必须借助于JaxRpcPortProxyFactoryBean。
使用标准客户端访问Web Service非常简单,只需要获得WebService的URL以及方法名即可。根据上面的发布,知道Web Service的URL如下:http://localhost:8080/axis-spring/axis/SayHelloService,则客户端代码示例如下:

public class WebServiceClient
{
  public static void main(String args[])
  {
      System.out.println("开始调用WebService");     
      try
      {
          //WebService所在的URL
          String endpoint = "http://localhost:8080/axis-spring/axis/SayHelloService";
          //创建Service对象,Service对用用于创建Call对象
          Service service = new Service();
          //创建Call对象,Call对象用于调用服务
          Call call = (Call)service.createCall();
        //为Call对象设置WebService的url
          call.setTargetEndpointAddress(new java.net.URL(/blog_article/endpoint/index.html));
          //为Call对象设置调用的方法名
          call.setOperationName("sayHello");
          //调用WebService的方法,并获得返回值
          String s = (String)call.invoke(new Object[] {"刘德华"});

          System.out.println(s);
      }
      catch (Exception e)
      {
          System.out.println(e.toString());
      }
      System.out.println("调用Web Service正常结束");     
}
}

而如果利用IoC容器管理WebService,必须借助于JaxRpcPortProxyFactoryBean类,该类是个工厂bean,与所有的工厂bean一样,对该bean的请求将返回它的产品。
配置JaxRpcPortProxyFactoryBean,只需提供WebService的URL、命名空间等必需信息,将可以返回Web Service服务。在Spring配置文件中JaxRpcPortProxyFactoryBean的定义如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
      <!-- 配置测试bean-->
  <bean id="test" >
      <property name="sayHello">
          <ref local="sayHelloService"/>
      </property>
</bean>
<!-- 配置WebService bean-->
  <bean id="sayHelloService" >
            <!-- 配置WebService实现的接口-->
      <property name="serviceInterface">
          <value>com.ws.SayHello</value>
      </property>
            <!-- 配置WebService的wsdl的URL-->
      <property name="wsdlDocumentUrl">
          <value>http://localhost:8080/axis-spring/axis/SayHelloService?wsdl</value>
      </property>
            <!-- 配置WebService的命名空间uri-->
      <property name="namespaceUri">
          <value>http://localhost:8080/axis-spring/axis/SayHelloService</value>
      </property>
            <!-- 配置WebService的服务名-->
      <property name="serviceName">
          <value>SayHelloService</value>
      </property>
            <!-- 配置WebService的portName-->
      <property name="portName">
          <value>SayHelloService"</value>
      </property>
  </bean>
</beans>

 


    
[2] ListActivity札记
    来源: 互联网  发布时间: 2014-02-18
ListActivity笔记

 

 

  • ListActivity用于显示绑定在Array或Cursor对象的数据项,当然你还可以自定义数据源,只需实现ListAdapter接口定义自己的数据源(这是典型的适配器模式);
  • ListActivity通过注册了BaseAdapter.OnItemClickListener来实现当一个数据项点击时通知回调函数onListItemClick(..);
  • 一个ListActivity的实例管理着一个ListView对象,ListView可以显示任何实现了ListAdapter接口的一个数据集,ListAdapter是ListView与源数据之间链接的桥梁(或者说是适配器)。
  • ListActivity默认拥有一个平铺的ListView布局文件,如果用户想自定义ListView的布局风格、样式则可以在onCreate方法中调用setContentView(..)来设置自定义的ListView布局文件。
  • 用户自定义的ListView布局文件,其中ListView必须设置android:id="@android:id/list"
  • 当一个ListView没有任何数据,通常可以定义一个View对象来显示相关信息,而这个View对象只需设置android:id="@android:id/empty"。

  •     
    [3] 手机wap2开发(3)(转载)
        来源: 互联网  发布时间: 2014-02-18
    手机wap2开发(三)(转载)
    WAP2.0 文档结构


    必须包含<html>, <head>, <title>和<body> 元素。
    <?xml version="1.0"?>
    <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Hello world</title>
    </head>
    <body>
    <p>Hello world. Welcome to taobao.com.</p>
    </body>
    </html>

    注意:
    XML声明和字符编码:<?xml version="1.0" encoding="UTF-8"?>
    UTF-8/16编码可省略。XML声明也不是必须的,但如果忽略在许多WAP浏览器中出错。
    必须有DOCTYPE声明。在XML声明和<html>元素之间。
    <html>、<head>、<title>、<body>必须要有<p>元素,align属性已经去除,可以通过WAP CSS的text-align属性来设置。

     
    WAP2.0与WAP1.0区别
    WAP1.0基于WML语言开发,支持WMLScript
    WAP2.0基于XHTML MP开发,支持WCSS
    WAP1.0只能通过手机或特殊浏览器浏览。
    WAP2.0开发的站点可以在WEB和无线上都可以使用,也可以用任何Web浏览器访问WAP2.0应用。


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3