本文将通过一个简单的示例讲解和演示Android平台的Web Service开发。 http://www.linuxidc.com/Linux/2011-07/38859.htm
代码示例: package com.study.ws; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.ksoap2.SoapFault; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.AndroidHttpTransport; import org.ksoap2.transport.HttpTransportSE; import org.xmlpull.v1.XmlPullParserException; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebSettings; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class WSClient extends Activity { private Button search; private EditText phone; private TextView result; /** Called [...]
对象、关系的映射(ORM)是一种耗时的工作,在Java环境下,有几种框架来表示持久数据,如实体Bean、OJB、JDO、Hibernate等。Hibernate是一种新的ORM映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。本文介绍怎么在Web应用开发中配置Hibernate的环境,并且使用Hibernate来开发一个具体的实例。 阅读本文前您需要以下的知识和工具: 本文的参考资料见 参考资料。 Tomcat 5.09,可以从 www.apache.org 下载; Hibernate2.0 相关运行环境,可以从 http://hibernate.bluemars.net/ 下载; 至少一个数据库服务器并且有相关的JDBC驱动程序。 面向对象的开发方法是当今的主流,但是同时我们不得不使用关系型数据库,所以在企业级应用开发的环境中,对象、关系的映射(ORM)是一种耗时的工作。围绕对象关系的映射和持久数据的访问,在Java领域中发展起来了一些API和框架,下面分别简单介绍。 JDBC可以说是访问持久数据层最原始、最直接的方法。在企业级应用开发中,我们可能使用DAO(Data Access Object)模式来把数据访问封装起来,然后在其它的层中同一调用。这种方式的优点是运行效率最高,缺点是把DAO对象和SQL语言紧密耦合在一起使得在大项目中难以维护。但是不管怎么说,使用JDBC来直接访问持久数据层是当今企业级应用开发中使用最广泛的。 实体Bean是J2EE平台中用来表示和访问持久数据的方式。虽然实体Bean是一种方便快捷的方法,但是在运行时我们需要额外购买EJB容器(当然,如今也有免费的EJB容器,如JBOSS),并且使用不同的应用服务器,需要重新书写不同的部署描述,使得在不同应用服务器下移植企业级应用会带来一些困难。 另外,在Java领域中,还有一些表示持久数据的框架,比如JDO和OJB,在这里就不详细介绍了。 Hibernate是一种新的ORM映射工具,它不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。相对于使用JDBC和SQL来手工操作数据库,使用Hibernate,可以大大减少操作数据库的工作量。 Hibernate可以和多种Web服务器或者应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器(达16种)。 下面我们来介绍怎么结合Hibernate2.0和Apache Tomcat5.0在Web应用中使用Hibernate。 配置 1、 下载安装Tomcat,并且下载Hibernate的运行环境(主要包含一些JAR包)。 2、 把要使用的数据库的JDBC驱动程序拷贝到%TOMCAT_HOME%\common\lib目录下。笔者使用的是MYSQL,对应的驱动程序的JAR包为mm.mysql-2.0.4-bin.jar。 3、 在Tomcat的Webapps目录下新建一个Web应用,名字为hibernate。 4、 把Hibernate提供的hibernate2.jar和一些第三方的运行库拷贝到hibernate\WEB\INF\lib目录下。(这些第三方的运行库包含在下载的Hibernate lib目录下) 5、 在%TOMCAT_HOME%\conf\server.xml中Web应用和数据源。在server.xml中加入以下的配置描述。 例程1 配置web应用 <Context path=”/hibernate” docBase=”hibernate” debug=”0″ reloadable=”true” crossContext=”true”> <Resource name=”jdbc/hibernate” auth=”Container” type=”javax.sql.DataSource”/> <ResourceParams name=”jdbc/hibernate”> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> [...]
1、Informix数据库 String url=”jdbc:oracle:thin:@localhost:1521:orcl”; //orcl为数据库的SID String user=”test”; String password=”test”; Connection conn= DriverManager.getConnection(url,user,password); 2、DB2数据库 Class.forName(“com.ibm.db2.jdbc.app.DB2Driver “).newInstance(); String url=”jdbc:db2://localhost:5000/sample”; //sample为你的数据库名 String user=”admin”; String password=””; Connection conn= DriverManager.getConnection(url,user,password); 3、Sql Server7.0/2000数据库 Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”).newInstance(); String url=”jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb”; //mydb为数据库 String user=”sa”; String password=””; Connection conn= DriverManager.getConnection(url,user,password); 4、Sybase数据库 Class.forName(“com.sybase.jdbc.SybDriver”).newInstance(); String url =” jdbc:sybase:Tds:localhost:5007/myDB”; //myDB为你的数据库名 Properties sysProps = System.getProperties(); SysProps.put(“user”,”userid”); SysProps.put(“password”,”user_password”); Connection conn= DriverManager.getConnection(url, SysProps); 5、Informix数据库 [...]
MyEclipse 6.5 官方下载地址:http://downloads.myeclipseide.com/downloads/products/eworkbench /6.5.0GA/MyEclipse_6.5.0GA_E3.3.2_Installer_A.exe MyEclipse 6.5 注册码: Subscriber: steven Subscription Code: fLR8ZO-655444-676786523523712 MyEclipse 6.5 内嵌 Eclipse 3.3.2 汉化: 首先,打开MyEclipse 6.5; 在主菜单栏处依次点“help”–>“software update”–>“Find And Install”; 选择第2项(search for new features to install),然后点next; 然后选择New Remote Site,弹出一个对话框,有两项,第一项是要你起个名字,随便起,就叫language吧,第2项是个URL,填入:http://download.eclipse.org/technology/babel/update-site/R0.8.1/europa/ 这个下载地址,然后点finish; (Eclipse 3.4 汉化更新地址为http://download.eclipse.org/technology/babel/update-site/ganymede ) 更新了一段时间后,会弹出一个对话框,让你选择一个站点,我选择了china(shanghai)这个下载站点,选择好站点后,又更新一段时间,然后会弹出一个语言包列表框(language pack),一共有29个语言包,我们不需要全部下载,只需下载“simple chinese”这个语言包就行了,选择好后,点next,继续下载更新。最后,会弹出一个对话框,让你选择安装路径,默认即可,点”finish”。下载完后,会提示你安装,然后点“install all”就行了。安装完后,提示要关闭并重启MyEclipse;关闭后重新打开MyEclipse即可~~
其实,就算用Java建造一个不是很烦琐的web应用程序,也不是件轻松的事情。当为一个应用程序建造一个构架时有许多事情需要考虑。从高层来说,开发者需要考虑:怎样建立用户接口(user interfaces)?在哪里处理业务逻辑?和怎样持久化应用数据。这三层每一层都有它们各自的问题需要回答。 各个层次应该使用什么技术?怎样才能把应用程序设计得松耦合和能灵活改变?构架允许层的替换不会影响到其它层吗?应用程序怎样处理容器级的服务(container level services),比如事务处理(transactions)? 当为你的web应用程序创建一个构架时,需要涉及到相当多的问题。幸运的是,已经有不少开发者已经遇到过这类重复发生的问题,并且建立了处理这类问题的框架。一个好框架具备以下几点: 减轻开发者处理复杂的问题的负担(“不重复发明轮子”);内部定义为可扩展的;有一个强大的用户群支持。框架通常能够很好的解决一方面的问题。然而,你的应用程序有几个层可能都需要它们各自的框架。就如解决你的用户接口(UI)问题时你就不应该把事务逻辑和持久化逻辑掺杂进来。例如,你不应该在控制器(controller)里面写jdbc代码,使它包含有业务逻辑,这不是控制器应该提供的功能。它应该是轻量级的,代理来自用户接口(UI)外的调用请求给其它服务于这些请求的应用层。好的框架自然的形成代码如何分布的指导。更重要的是,框架减轻开发者从头开始写像持久层这样的代码的痛苦,使他们专注于对客户来说很重要的应用逻辑。 这篇文章将讨论怎样组合几个著名的框架去做到松耦合的目的,怎样建立你的构架,怎样让你的各个应用层保持一致。富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此沟通,而与底层的技术无关。这篇文章将使用3种流行的开源框架来讨论组合框架的策略。表现层我们将使用Struts([url]http://jakarta.apache.org/struts[/url]);业务层我们将使用Spring([url]http://www.springframework.org/[/url]);持久层使用Hibrenate([url]http://www.hibernate.org/[/url]).你也可以在你的应用程序中替换这些框架中的任何一种而得到同样的效果。图1展示了当这些框架组合在一起时从高层看是什么样子。 图1用Struts, Spring, 和 Hibernate框架构建的概览 应用程序的分层 (Application Layering) 大多数不复杂的web应用都能被分成至少4个各负其责的层次。这些层次是:表现层(presentation)、持久层(persistence)、业务层(business)、领域模型层(domain model)。每层在应用程序中都有明确的责任,不应该和其它层混淆功能。每一应用层应该彼此独立但要给他们之间放一个通讯接口。让我们从审视各个层开始,讨论这些层应该提供什么和不应该提供什么。 表现层 (The Presentation Layer) 在一个典型的web应用的一端是表现层。很多Java开发者也理解Struts所提供的。然而,太常见的是,他们把像业务逻辑之类的耦合的代码放进了一个org.apache.struts.Action。所以,让我们在像Struts这样一个框架应该提供什么上取得一致意见。这儿是Struts负责的: 为用户管理请求和响应; 提供一个控制器(controller)代理调用业务逻辑和其它上层处理; 处理从其它层掷出给一个Struts Action的异常; 为显示提供一个模型; 执行用户接口(UI)验证。 这儿是一些经常用Struts编写的但是却不应该和Struts表现层相伴的项目: 直接和数据库通讯,比如JDBC调用; 业务逻辑和与你的应用程序相关的验证; 事务管理; 在表现层中引入这种代码将导致典型耦合(type coupling)和讨厌的维护。 持久层 (The Persistence Layer ) 在典型web应用的另一端是持久层。这通常是使事情迅速失控的地方。开发者低估了构建他们自己的持久层框架的挑战性。一般来说,机构内部自己写的持久层不仅需要大量的开发时间,而且还经常缺少功能和变得难以控制。有几个开源的“对象-关系映射”(ORM)框架非常解决问题。尤其是,Hibernate框架为java提供了"对象-关系持久化"(object-to-relational persistence)机制和查询服务。Hibernate对那些已经熟悉了SQL和JDBC API的Java开发者有一个适中的学习曲线。Hibernate持久对象是基于简单旧式Java对象(POJO)和Java集合(Java collections)。此外,使用Hibernate并不妨碍你正在使用的IDE。下面的列表包含了你该写在一个持久层框架里的代码类型: 查询相关的信息成为对象。Hibernate通过一种叫作HQL的面向对象(OO)的查询语言或者使用条件表达式API(expressive criteria API)来做这个事情。 HQL非常类似于SQL– 只是把SQL里的table和columns用Object和它的fields代替。有一些新的专用的HQL语言成分要学;不过,它们容易理解而且文档做得好。HQL是一种使用来查询对象的自然语言,花很小的代价就能学习它。 保存、更新、删除储存在数据库中的信息。 像Hibernate这样的高级“对象-关系”映射(object-to-relational mapping)框架提供对大多数主流SQL数据库的支持,它们支持“父/子”(parent/child)关系、事务处理、继承和多态。 这儿是一些应该在持久层里被避免的项目: 业务逻辑应该在你的应用的一个高一些的层次里。持久层里仅仅允许数据存取操作。 你不应该把持久层逻辑(persistence logic)和你的表现层逻辑(presentation [...]
现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate。似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础。 然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复。因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架。其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?接下来,我们以登录作为一个最简单的例子,来看看不同的年代,我们是怎么写Web程序的。 在很多年前,我们这么写程序的 很多年前,那是一个贫苦的年代,如果我们要使用Java在网页上做一些动态的交互功能。很多人会告诉你一个技术,叫做JSP。在我还对Java非常困惑的时候,就有人告诉我,JSP是个好东西,它可以在HTML代码里面写Java代码来完成逻辑。 Html代码: 作为一张JSP,它可以接收从别的JSP发送过来的登录请求,并进行处理。这样,我们不需要任何额外的配置文件,也不需要任何框架的帮忙,就能完成逻辑。 后来,我们放弃了在页面上写逻辑 后来,程序写得越来越多,我们发现,这种在HTML代码中编写Java代码来完成逻辑的方式存在着不少问题: 1. Java代码由于混杂在一个HTML环境中而显得混乱不堪,可读性非常差。一个JSP文件有时候会变成几十K,甚至上百K。要找一段逻辑,经常无法定位。 2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不知道别人是不是已经曾经实现过类似的功能,到哪里去引用。 3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全程替换,还要小心翼翼的,生怕把别人的逻辑改了。 4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事务、日志等众多模块无法统一支持。 在这个时候,如果有一个产品,它能够将页面上的那些Java代码抽取出来,让页面上尽量少出现Java代码,该有多好。于是许多人开始使用servlet来处理那些业务逻辑。 Java代码: 在这里,我们需要在web.xml中为这个servlet配置url的请求关系。 Xml代码: 代码重构到这里,我们发现,其实我们的工作量本身并没有减少,只是代码从JSP移动到了Servlet,使得整个流程看上去稍微清楚了一些。然而,为了这么点干净,我们付出的代价是什么?为每个servlet都在web.xml里面去做一个url的请求配置! 再后来,出现框架 时代进一步发展,人们发现简单的JSP和Servlet已经很难满足人们懒惰的要求了。于是,人们开始试图总结一些公用的Java类,来解决Web开发过程中碰到的问题。这时,横空出世了一个框架,叫做struts。它非常先进地实现了MVC模式,成为了广大程序员的福音。 struts的代码示例我就不贴了,网上随便搜搜你可以发现一堆一堆的。在一定程度上,struts能够解决web开发中的职责分配问题,使得显示与逻辑分开。不过在很长一段时间内,使用struts的程序员往往无法分别我们到底需要web框架帮我们做什么,我们到底需要它完成点什么功能? 我们到底要什么 在回顾了我们写代码的历史之后,我们回过头来看看,我们到底要什么? 无论是使用JSP,还是使用Struts1,或是Struts2,我们至少都需要一些必须的元素(如果没有这些元素,或许我还真不知道这个程序会写成什么样子): 1. 数据 在这个例子中,就是name和password。他们共同构成了程序的核心载体。事实上,我们往往会有一个User类来封装name和password,这样会使得我们的程序更加OO。无论怎么说,数据会穿插在这个程序的各处,成为程序运行的核心。 2. 页面展示 在这个例子中,就是login.jsp。没有这个页面,一切的请求、验证和错误展示也无从谈起。在页面上,我们需要利用HTML,把我们需要展现的数据都呈现出来。同时我们也需要完成一定的页面逻辑,例如,错误展示,分支判断等等。 [...]
近期评论