- 浏览: 60431 次
- 性别:
- 来自: 贵阳
文章分类
最新评论
-
feisuzhu:
Don't roll your own.这个是铁律。楼主要是学 ...
AES加解密算法(使用Base64做转码以及辅助加密) -
osacar:
这里DES还是AES???
AES加解密算法(使用Base64做转码以及辅助加密) -
1336224635:
着些不都是16进制表示的颜色吗?android 对颜色有要求吗 ...
android--color.xml
看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧。此文章采用的项目是我毕业设计的webservice部分。
首先要建一个web工程和android工程,在此采用myeclipse开发,个人觉得比较方便,要是eclipse安装了tomcat也行。这的web端采用了框架hibernate和spring,因为我的项目只是client端调用web端的数据,没什么web页面,所以就没用struts了。
讲解前先说说流程:此项目里,在web端里webservice把实体类转换成json的对象通过一个web地址发布出去;(由于WebService 是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起,而在Android SDK中并没有提供调用WebService的库,因此需要使用第三方类库(KSOAP2)来调用WebService ),client端就需要通过发布的地址来获取数据了。
以下就一步一步来讲解了,所有的代码和流程就以用用户登录来体现了:
一、Web端
1、Model和Hibernate配置
实体类SysUser:
Hibernate:
2、PoJo包
这里面是服务器端返回使用的类,webservice传递数据时,可能只会传递一部分数据,这样的话,就要把要传递的数据封装成一个pojo类,再转成一个json对象,这样的话无论是从代码的整洁、逻辑还是高效,都会是非常完美的写法。在web端和client端的类要完全一样,这样的话更为简单。
3、WebService接口
这里面是封装的webservice接口,手机端就是直接通过这些接口进行数据的传送与接收,最重要的是在接口上一定要加上"@WebService"这个注解,这样才能把此类里面的方法封装成一个webservice接口,关键代码如下:
要注意的是方法里的参数前一定要加上@WebParam(name = "***(随便取的名字)"),这是因为这个opPhone参数通过webservice发布出去之后是以opPhone这个名称存在的,在手机端那边的方法直接获取opPhone就可以了。
4、WebService接口实现类
ws里面接口的实现类,在这个类的开始,一定要加上"@WebService(endpointInterface = "com.silent.cn.ws.MobileClientService")"这个注解,它表示是继承自com.silent.cn.ws.MobileClientService的类,没有这一步,webservice接口是不会实现其功能的。下面是代码:
5、Dao和Dao实现类
6、Spring配置
这里spring的配置为了整洁与不臃肿,分成了三部分,分别实现了不同功能:
applicationContext.xml:所有的spring配置信息,包括连接数据库、配置事务管理器、配置事务传播特性 、dao模板等等
Dao配置(applicationContext-dao.xml):
7、WebService接口配置(applicationContext-webservice.xml)
这里设定的address就是该webservice的实际地址了:
8、配置web.xml
在web里添加下面的语句:
9、WebService接口测试
最好安装soapUI pro这个软件,SOAPUI这个工具功能非常强大,是作为测试工具来用的,它既可以模拟客户端,也可以模拟服务端,可以根据描述文件很容易就生成的模拟的服务端和服务端,还可以有测试用例管理,负荷测试等,对通讯的中间过程也可以全程监控。
SOAPUI是一个免费的工具,而SOAPUI PRO是收费的,功能更强大。详细的SOAPUI用法可以参考下面的网址:http://xzhoumin.blog.163.com/blog/static/40881136201231955833137/
Client端
1、
首先,我们要获取Web端在Tomcat发布成功之后的接口地址与方法地址,如果是模拟器的话,其IP地址必须是10.0.2.2;如果是真机,那么电脑和真机都要用wifi连接到同一个网段下,而且IP地址就是电脑的实际IP地址,这样手机才能从Tomcat上获取数据,代码如下:
2、
然后,我们要写一个通用的WebService接口请求方法,此方法是通用的,只要是通过ksoap与web端交互的都可以使用该方法,代码如下:
3、
接着,就是写各种webservice数据交互的方法了,基本上都是封装成一个json对象再以字符串形式传递,这里是用户登录方法:
注:hashmap里的key就是web端webservice接口里的@WebParam(name = "opPhone"),此字符串一定要匹配。
首先要建一个web工程和android工程,在此采用myeclipse开发,个人觉得比较方便,要是eclipse安装了tomcat也行。这的web端采用了框架hibernate和spring,因为我的项目只是client端调用web端的数据,没什么web页面,所以就没用struts了。
讲解前先说说流程:此项目里,在web端里webservice把实体类转换成json的对象通过一个web地址发布出去;(由于WebService 是一种基于SOAP协议的远程调用标准。通过WebService可以将不同操作系统平台,不同语言、不同技术整合到一起,而在Android SDK中并没有提供调用WebService的库,因此需要使用第三方类库(KSOAP2)来调用WebService ),client端就需要通过发布的地址来获取数据了。
以下就一步一步来讲解了,所有的代码和流程就以用用户登录来体现了:
一、Web端
1、Model和Hibernate配置
实体类SysUser:
public class SysUser implements Serializable { private Long id; private String userPwd; private String userPhone; public SysUser() { } public SysUser(Long id, String userPwd, String userPhone) { super(); this.id = id; this.userPwd = userPwd; this.userPhone = userPhone; } //get和set }
Hibernate:
<hibernate-mapping> <class name="com.silent.cn.model.SysUser" table="SYS_USER"> <id name="id" type="java.lang.Long"> <column name="ID" precision="22" scale="0" /> <generator class="native" /> </id> <property name="userPwd" type="java.lang.String"> <column name="USER_PWD" length="20" /> </property> <property name="userPhone" type="java.lang.String"> <column name="USER_PHONE" length="11" /> </property> </class> </hibernate-mapping>
2、PoJo包
这里面是服务器端返回使用的类,webservice传递数据时,可能只会传递一部分数据,这样的话,就要把要传递的数据封装成一个pojo类,再转成一个json对象,这样的话无论是从代码的整洁、逻辑还是高效,都会是非常完美的写法。在web端和client端的类要完全一样,这样的话更为简单。
/** * 登陆状态 */ public class DataOperateResult { private String status; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } }
3、WebService接口
这里面是封装的webservice接口,手机端就是直接通过这些接口进行数据的传送与接收,最重要的是在接口上一定要加上"@WebService"这个注解,这样才能把此类里面的方法封装成一个webservice接口,关键代码如下:
//手机客户端服务类(专门负责与手机客户端进行交互) @WebService public interface MobileClientService { /** * 登陆 * @param opPhone * @param loginPwd */ public String userLogin(@WebParam(name = "opPhone") String opPhone, @WebParam(name = "loginPwd") String loginPwd); }
要注意的是方法里的参数前一定要加上@WebParam(name = "***(随便取的名字)"),这是因为这个opPhone参数通过webservice发布出去之后是以opPhone这个名称存在的,在手机端那边的方法直接获取opPhone就可以了。
4、WebService接口实现类
ws里面接口的实现类,在这个类的开始,一定要加上"@WebService(endpointInterface = "com.silent.cn.ws.MobileClientService")"这个注解,它表示是继承自com.silent.cn.ws.MobileClientService的类,没有这一步,webservice接口是不会实现其功能的。下面是代码:
@WebService(endpointInterface = "com.silent.cn.ws.MobileClientService") public class MobileClientServiceImpl implements MobileClientService { public String userLogin(String opPhone, String loginPwd) { SysUser sysUser = userLoginDao.userLogin(opPhone, loginPwd); DataOperateResult dataOperateResult = new DataOperateResult(); if (sysUser != null) { // 封装登录验证结果 dataOperateResult.setStatus(SUCC); System.out.println("登陆成功!"); return JSONObject.fromObject(dataOperateResult).toString(); } else { System.out.println("不存在或手机号码和密码不正确!"); dataOperateResult.setStatus(FAIL); return JSONObject.fromObject(dataOperateResult).toString(); } } }
5、Dao和Dao实现类
/** * 用户登录DAO */ public interface UserLoginDao { /** * 根据用户名和用户密码登陆 * @param userPhone 用户手机号码 * @param passWord 用户密码 * @return */ public SysUser userLogin(String userPhone, String passWord); }
/** * 用户登录DAO实现类 */ public class UserLoginDaoImpl extends BaseDao implements UserLoginDao { public SysUser userLogin(String userPhone, String passWord) { String sql = " from SysUser where userPhone=? and userPwd=? "; List<SysUser> list = this.getHibernateTemplate().find(sql, new Object[] { userPhone, passWord }); if (list.size() == 0) { return null; } return list.get(0); } }
6、Spring配置
这里spring的配置为了整洁与不臃肿,分成了三部分,分别实现了不同功能:
applicationContext.xml:所有的spring配置信息,包括连接数据库、配置事务管理器、配置事务传播特性 、dao模板等等
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/phonesell" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <!-- 实体类资源映射 --> <property name="mappingDirectoryLocations"> <list> <value>classpath:/com/silent/cn/model/</value> </list> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 配置事务传播特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="do*" propagation="REQUIRED" /> <tx:method name="*" read-only="false" /> </tx:attributes> </tx:advice> <!-- 哪些类的哪些方法参与事务 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* com.silent.cn.dao.impl.*.*(..))" /> <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /> </aop:config> <!-- dao模板(所有dao都将使用此模板) --> <bean id="daoTemplate" abstract="true"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="jdbcTemplate" abstract="true"> <property name="dataSource" ref="dataSource"></property> </bean> <!--WebService配置--> <import resource="applicationContext-webservice.xml" /> <import resource="applicationContext-dao.xml" /> </beans>
Dao配置(applicationContext-dao.xml):
<bean id="userLoginDao" class="com.silent.cn.dao.impl.UserLoginDaoImpl" parent="daoTemplate" />
7、WebService接口配置(applicationContext-webservice.xml)
这里设定的address就是该webservice的实际地址了:
<!-- 配置WebService接口 http://localhost:8080/PhoneSell/ws/clientService?wsdl --> <jaxws:endpointid="clientServiceEndpoint"address="/clientService" implementorClass="com.silent.cn.ws.MobileClientService"> <jaxws:implementor> <bean id="clientService" class="com.silent.cn.ws.impl.MobileClientServiceImpl"> <property name="userLoginDao" ref="userLoginDao" /> </bean> </jaxws:implementor> </jaxws:endpoint>
8、配置web.xml
在web里添加下面的语句:
<servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping>
9、WebService接口测试
最好安装soapUI pro这个软件,SOAPUI这个工具功能非常强大,是作为测试工具来用的,它既可以模拟客户端,也可以模拟服务端,可以根据描述文件很容易就生成的模拟的服务端和服务端,还可以有测试用例管理,负荷测试等,对通讯的中间过程也可以全程监控。
SOAPUI是一个免费的工具,而SOAPUI PRO是收费的,功能更强大。详细的SOAPUI用法可以参考下面的网址:http://xzhoumin.blog.163.com/blog/static/40881136201231955833137/
Client端
1、
首先,我们要获取Web端在Tomcat发布成功之后的接口地址与方法地址,如果是模拟器的话,其IP地址必须是10.0.2.2;如果是真机,那么电脑和真机都要用wifi连接到同一个网段下,而且IP地址就是电脑的实际IP地址,这样手机才能从Tomcat上获取数据,代码如下:
//WebService接口地址 public static String NAME_SPACE_SALE = "http://ws.cn.silent.com/"; // 网址(如果是模拟器额话,需要把IP地址<192.168.1.***:8080>换成10.0.2.2:8080) public static String NAME_SPACE = "http://10.0.2.2:8080/PhoneSell/"; // 连接地址(WebService的方法地址) public static String END_POINT_SALE = NAME_SPACE + "ws/clientService";
2、
然后,我们要写一个通用的WebService接口请求方法,此方法是通用的,只要是通过ksoap与web端交互的都可以使用该方法,代码如下:
public static SoapObject common(String methodName, HashMap<String, Object> map, String nameSpace, String endPoint) { String soapAction = nameSpace + methodName; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); // 设置需调用WebService接口需要传入的参数 if (null != map && map.size() > 0) { Object[] key = map.keySet().toArray(); for (int i = 0; i < key.length; i++) { rpc.addProperty(key[i].toString(), map.get(key[i])); } } // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = false; // 设置连接超时时间为20秒 HttpTransportSE transport = new HttpTransportSE(endPoint, timeout); try { // 调用WebService transport.call(soapAction, envelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } // 获取返回的数据 SoapObject soapObject = (SoapObject) envelope.bodyIn; return soapObject; } }
3、
接着,就是写各种webservice数据交互的方法了,基本上都是封装成一个json对象再以字符串形式传递,这里是用户登录方法:
public static String verifyUser(Context context, String userPhone, String userPwd) { // 设置调用接口需要传递的参数名称、值 HashMap<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("opPhone", userPhone); paramMap.put("loginPwd", userPwd); try { // 调用接口 SoapObject soapObject = common("userLogin", paramMap, NAME_SPACE_SALE, END_POINT_SALE); return soapObject.getProperty(0).toString(); } catch (Exception e) { return null; } }
注:hashmap里的key就是web端webservice接口里的@WebParam(name = "opPhone"),此字符串一定要匹配。
发表评论
-
ContentProvider
2013-04-19 17:12 1085ContentProvider是安卓平台中,在不同应用程序之间 ... -
sqlite使用
2013-04-19 16:52 1239import android.content.Contex ... -
WEB中以cvs格式导出数据
2013-04-19 16:21 1455实例为SSH项目,县公司导出售后报表的DEMO,先要导入jxl ... -
JDBC与Hibernate区别
2013-04-01 17:33 1108JDBC与Hibernate在性能上相 ... -
AsyncTask异步下载图片
2013-02-23 10:30 1170这个例子是利用AsyncTask异步下载图片,下载时先将网络图 ... -
我的Android小应用
2012-12-05 12:00 834工作之余,做了一款小android应用,是关于移动业务查询的( ... -
HTTP 错误总汇
2012-11-28 17:05 924HTTP 错误 400 400 请求出错 由于语法格式有误 ... -
常用JAVA工具类
2012-11-26 11:20 1000获取访问者ip /** ... -
Hibernate懒加载解析(转)
2012-11-14 13:29 1190在Hibernate框架中,当我们要访问的数据量过大时 ... -
通过百度API获取经纬度
2012-06-29 15:43 1505第一步,先要导入百度API的架包libBMapApiEngin ... -
用JavaMail发送邮件(含实例)
2012-06-16 14:02 1282JavaMail是Sun发布的处理电子邮件的应用程序接口,它预 ... -
将网页数据导出到Excel(最简单的方式)
2012-06-16 13:46 1708下面这种方式,是将页面 ... -
jxl使用实例(Java-->Excel)
2012-06-16 13:43 1243运行本实例的前提:去网上下载一个叫jxl.jar的ja ... -
Android 定位的三种方式
2012-06-11 17:17 1166// 声明LocationManager对象 ... -
android手机获取gps和基站的经纬度地址
2012-05-21 11:02 2079<--界面--> <?xml versi ... -
android调用系统照相机返回到页面,保存到本地和把图片转换成字符串
2012-05-21 10:28 2671本程序能通过调用android自带的照相机,返回图片到imag ... -
android上的MD5和RSA的加解密
2012-04-18 20:03 2812import java.io.UnsupportedEnc ... -
RSA加解密
2012-04-18 19:43 1541import java.io.FileOutputStre ... -
AES加解密算法(使用Base64做转码以及辅助加密)
2012-04-18 19:37 2323import javax.crypto.Cipher; ... -
MD5加密
2012-04-18 19:32 863public class MD5Util { /* ...
相关推荐
在Android开发中,Webservice是一种常见的数据交互方式,它允许移动应用通过网络获取远程服务器上的数据。本实例将深入探讨Android中如何使用Webservice,特别是针对天气预报服务的调用。我们将关注以下几个核心知识...
### 移动代理服务器WebService接口协议详解 #### 一、概览 移动代理服务器(MAS,Mobile Agent Service)的WebService接口协议,旨在提供一种高效、安全的通信方式,以实现客户端与MAS之间的数据交换,主要服务于...
【WebService详解:初识与实现】 在IT行业中,Web服务是一种允许不同系统之间进行通信和交换数据的标准方式。尤其在分布式应用系统中,WebService扮演着关键角色。本项目以"webservice 第一个小项目"为主题,将带你...
### C# 开发 WebService(XML 和 JSON) #### 背景与目的 随着移动互联网技术的发展,Android 应用程序越来越普及。为了提供更强大的功能和服务,许多 Android 应用需要后端服务器的支持来处理数据交换。在众多...
在Android平台上,调用Web Service是一项常见的任务,用于实现移动应用与远程服务器的数据交互。本文将详细介绍如何在Android中调用Web Service,并提供一个实例代码的更改,以便进行异步处理,提高应用性能。 首先...
- 移动应用集成:通过WebService,Domino可以为移动设备提供数据和服务,增强移动办公能力。 - API接口开发:发布Domino应用的特定功能,供第三方开发者使用。 6. 安全性考虑: - 认证机制:Domino支持基本认证...
- 对于Java开发者来说,可以选择Eclipse、IntelliJ IDEA等IDE来开发WebService。 - 对于.NET开发者,则可以使用Visual Studio。 2. **搭建开发环境**: - 安装必要的软件,如Java SDK、.NET Framework等。 - ...
【Android与WebService天气预报Demo详解】 在移动应用开发中,实时获取天气信息是常见的功能之一。本Demo结合了Android客户端和WebService技术,为用户展示如何从远程服务器获取并展示天气预报数据。通过这个实例,...
【WebService技术详解】 WebService是一种基于互联网的、平台和语言无关的接口标准,它允许不同系统间的应用程序进行交互和数据共享。这项技术的核心是通过XML(可扩展标记语言)来描述服务,SOAP(简单对象访问...
- **通过Web扩展服务**:允许任何具备网络连接的设备或应用访问服务,如移动应用、物联网设备。 总的来说,WebService通过标准的XML和SOAP协议,打破了传统分布式组件对象模型的局限,实现了跨平台、跨系统的互操作...
4. **RESTful API**:考虑到服务端与客户端的通信,很可能使用了RESTful API设计,这种设计方式简单、高效,适合移动设备的网络通信。 5. **MySQL数据库**:MySQL是常用的开源关系型数据库管理系统,用于存储RSS源...
3. **移动应用开发**:移动应用通过 WebService 与后端系统交互。 4. **云计算**:云服务提供商通过 WebService 提供各种服务。 #### 八、总结 WebService 作为一种跨平台的远程调用技术,其核心价值在于实现了...
【NC开发Web服务详解】 在IT行业中,Web服务是一种基于开放标准(如SOAP、WSDL和UDDI)的通信协议,它允许不同系统之间交换数据和服务。在本教程中,我们将详细介绍如何使用NC(NetSuite)开发Web服务,包括环境...
在IT行业中,C# WebService是一种基于XML的网络通信技术,它允许不同系统间通过互联网交换数据。C#是.NET框架的主要编程语言,为开发Web服务提供了强大的支持。本示例将详细介绍如何创建、配置和使用C# WebService。...
多线程编程是Android应用开发中的重要技术,用于实现异步任务处理。 - **线程池**: 通过`ThreadPoolExecutor`管理线程的创建和回收。 - **异步任务**: 使用`AsyncTask`类简化异步任务的编写过程。 以上是基于题目...
在移动开发领域,Java 2 Micro Edition(J2ME)扮演着至关重要的角色,它为小型设备如手机、PDA提供了强大的应用程序运行环境。本手册围绕“j2me手册-webservice_mobile_wtk”这一主题,深入探讨了J2ME在Web服务、...
2. **脚本调整**:LoadRunner 8.0 默认会将录制的脚本放在 `vuser_init` 方法中,需要手动将其移动到 `Action` 方法中。 通过以上步骤,我们可以有效地使用 LoadRunner 8.0 来测试 Web Service 的性能,同时也能...
11. **测试与部署**:最后,了解如何使用FlexUnit进行单元测试,以及将Flex应用发布到各种平台(如Web、桌面或移动设备)的方法也是必不可少的。 通过阅读《Flex 3.0 RIA 开发详解》,开发者能够深入理解Flex 3.0的...
### WebService笔记:基于Axis2的WebService开发过程详解 #### 一、概述 WebService是一种用于不同应用程序之间通过网络进行通信的技术。它允许不同系统之间的数据交换和服务调用,支持多种协议标准,如SOAP、XML-...