Android访问JavaEE部署的Web服务返回的JSON格式数据(湖南铁道冯向科2016-04)一、部署Web服务1.创建Web服务项目打开MyEclipse,依次选择菜单项“File”、“New”、“WebServiceProject”,打开新建Web服务对话框,如图1所示。输入项目名,如“MyWebService”。其余采用默认设置。单击“Finish”按钮,创建空的Web服务项目。图1新建Web服务对话框2.创建JDBC配置文件在MyWebService的src目录下新建名称为“jdbc.properties”的普通文件,文件内容如下:jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc.url=jdbc:sqlserver://localhost:1433jdbc.dbname=eMenujdbc.username=sajdbc.password=1234563.引入访问SQLServer和处理JSON数据的jar包(1)在MyEclipse中右击“MyWebService”项目,从快捷菜单中依次选择“New”、“Folder”,在新建文件夹对话框中输入“libs”名称,将在当前项目中新建libs文件夹。(2)从资源管理器中拖动用于Java访问SQLServer2008的“sqljdbc4.jar”和Java处理JSON格式数据的7个jar文件到MyWebService项目的libs文件夹中:commons-beanutils-1.7.0.jarcommons-collections-3.2.1.jarcommons-httpclient-3.1.jarcommons-lang-2.3.jarcommons-logging-1.1.1.jarezmorph-1.0.3.jarjson-lib-2.2.3-jdk15.jar将弹出文件操作对话框,如图2所示。从弹出的文件操作对话框中选择“Copyfiles”单选钮,单击“OK”按钮,将Android访问Web服务的包添加到当前项目中。图2选择文件操作类型4.编写Java类展开MyWebService项目,在src中新增类,设置包名,如类名为“SQLHelper”,包名为“com.mywebservice”,如图3所示。图3新增com.mywebservice.SQLHelper类源代码如下:packagecom.mywebservice;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.Statement;importjava.util.Enumeration;importjava.util.PropertyResourceBundle;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;/***JDBC连接SQLServer的数据库访问类*@author冯向科*@version2016.4.10*/publicclassSQLHelper{/***JDBC连接SQLServer的驱动程序串*/privatestaticStringdriver=null;/***JDBC连接SQLServer的连接串*/privatestaticStringurl=null;/***查询数据表,返回JSON格式结果集*@paramquery查询串*@returnJSON格式的结果集*/publicstaticStringgetValues(Stringquery){Connectioncon=null;Statementstmt=null;ResultSetrs=null;ResultSetMetaDatarsmd=null;init();try{Class.forName(driver);con=DriverManager.getConnection(url);stmt=con.createStatement();rs=stmt.executeQuery(query);rsmd=rs.getMetaData();intcols=rsmd.getColumnCount();JSONArrayarr=newJSONArray();JSONObjectobj=null;while(rs.next()){obj=newJSONObject();for(inti=1;i=cols;i++){obj.put(rsmd.getColumnName(i),rs.getString(i));}arr.add(obj);}returnarr.toString();}catch(Exceptione){e.printStackTrace();}finally{if(rs!=null){try{rs.close();}catch(Exceptione){e.printStackTrace();}}if(stmt!=null){try{stmt.close();}catch(Exceptione){e.printStackTrace();}}if(con!=null){try{con.close();}catch(Exceptione){e.printStackTrace();}}}returnnull;}/***提交SQL更新串,返回执行成功与否的标志*@paramsql更新串(插入串、修改串或删除串)*@return执行成功与否的标志,1:更新成功,0:更新失败*/publicstaticintexecuteSQL(Stringsql){Connectioncon=null;Statementstmt=null;ResultSetrs=null;introws=0;init();try{Class.forName(driver);con=DriverManager.getConnection(url);stmt=con.createStatement();rows=stmt.executeUpdate(sql);}catch(Exceptione){e.printStackTrace();return0;}finally{if(rs!=null){try{rs.close();}catch(Exceptione){}}if(stmt!=null){try{stmt.close();}catch(Exceptione){}}if(con!=null){try{con.close();}catch(Exceptione){}}}return(rows0?1:0);}/***初始化驱动程序串和JDBC连接串*/privatestaticvoidinit(){if(driver==null||url==null){PropertyResourceBundleresourceBundle=(PropertyResourceBundle)PropertyResourceBundle.getBundle(jdbc);EnumerationStringenu=resourceBundle.getKeys();if(enu.hasMoreElements()){driver=resourceBundle.getString(jdbc.driver);url=resourceBundle.getString(jdbc.url)+;databaseName=+resourceBundle.getString(jdbc.dbname)+;user=+resourceBundle.getString(jdbc.username)+;password=+resourceBundle.getString(jdbc.password);}}}}5.自动生成Web服务方法(1)展开MyWebService项目,右击“src”项,从快捷菜单中依次选择“New”、“Other”,打开新建Web服务向导,如图4所示。图4新建Web服务向导(2)从“Wizards”列表框中选择“MyEclipse”、“WebServices”、“WebService”,单击“Next”按钮,打开选择Web服务框架对话框,如图5所示。图5选择Web服务框架对话框(3)选中“CreatewebservicefromJavaclass(Bottom-upscenario)”,从Java类创建WebService。单击“Next”按钮,打开“从Java类创建Web服务”对话框,在“Javaclass”输入框中“com.mywebservice.SQLHelper”后,将自动补充其他信息,如图6所示。图6从Java类创建Web服务对话框(4)单击“Finish”按钮,将自动创建HelloDelegate.java文件,代码如下所示:packagecom.mywebservice;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.ResultSetMetaData;importjava.sql.Statement;importjava.util.Enumeration;importjava.util.PropertyResourceBundle;importnet.sf.json.JSONArray;importnet.sf.json.JSONObject;@javax.jws.WebService(targetNamespace==SQLHelperService,portName=SQLHelperPort)publicclassSQLHelperDelegate{com.mywebservice.SQLHelpersQLHelper=newcom.mywebservice.SQLHelper();publicStringgetValues(Stringquery){returnsQLHelper.getValues(query);}publicintexecuteSQL(Stringsql){returnsQLHelper.executeSQL(sql);}}(5)适当修改代码,形成如下所示代码:packagecom.mywebservice;@javax.jws.WebService(targetNamespace==SQLHelperService,portName=SQLHelperPort)publicclassSQLHelperDelegate{publicstaticStringgetValues(Stringquery){returnSQLHelper.getValues(query);}publicstaticintexecuteSQL(Stringsql){returnSQLHelper.executeSQL(sql);}}(6)在MyWebService项目的“WebRoot\WEB-INF”目录下会自动生成sun-jaxws.xml配置文件,内容如下:?xmlversion=1.0?endpointsversion=2.0xmlns==SQLHelperPortimplementation=com.mywebservice.SQLHelperDelegateurl-pattern=/SQLH