MySql+webService cxf+json 简单框架(转)

http://blog.csdn.net/ice343241993/article/details/22037829

这个Demo是非常简单的一个框架。如果您需要开发的话完全可以按照这个大框架的基础上实现您的各种方法。新手可以看一下。本demo的代码书写规范完全是本人自己的习惯。服务端是:webService+cxf+Json, 客户端是android。

服务器端代码:

包结构图:

1.1javaBean的部分没有什么可说的,上代码:

CommandBean

[java] view plaincopyprint?

  1. public class CommandBean {
  2. private String status;//0 正确     -1:此用户不存在,1:用户存在, -2,数据插入失败
  3. private String errmsg;//错误信息
  4. public String getStatus() {
  5. return status;
  6. }
  7. public void setStatus(String status) {
  8. this.status = status;
  9. }
  10. public String getErrmsg() {
  11. return errmsg;
  12. }
  13. public void setErrmsg(String errmsg) {
  14. this.errmsg = errmsg;
  15. }
  16. }

UserBean

[java] view plaincopyprint?

  1. public class UserBean {
  2. private String name;
  3. private Integer age;
  4. private String account;
  5. private String password;
  6. public String getAccount() {
  7. return account;
  8. }
  9. public void setAccount(String account) {
  10. this.account = account;
  11. }
  12. public String getPassword() {
  13. return password;
  14. }
  15. public void setPassword(String password) {
  16. this.password = password;
  17. }
  18. public UserBean(String name, Integer age) {
  19. super();
  20. this.name = name;
  21. this.age = age;
  22. }
  23. public UserBean() {
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31. public Integer getAge() {
  32. return age;
  33. }
  34. public void setAge(Integer age) {
  35. this.age = age;
  36. }
  37. @Override
  38. public String toString() {
  39. return "UserBean [name=" + name + ", age=" + age + ", account="
  40. + account + ", password=" + password + "]";
  41. }
  42. }

1.2 cxf接口:

[java] view plaincopyprint?

  1. @WebService
  2. public interface ILoginService {
  3. String login(@WebParam(name = "username") String username,
  4. @WebParam(name = "password") String password);
  5. }

1.3 cxf实现类

[java] view plaincopyprint?

  1. @WebService(endpointInterface = "com.cxf.service.ILoginService", serviceName = "LoginServiceService")
  2. public class LoginService implements ILoginService {
  3. @Override
  4. public String login(String username, String password) {
  5. LoginHelper loginHelper = new LoginHelper();
  6. CommandBean commandBean = loginHelper.onLogin(username, password);
  7. String jsonStr = JsonOperator.toJson(commandBean);
  8. return jsonStr;
  9. }
  10. }

2.1.1数据库接口1

[java] view plaincopyprint?

  1. public interface DBService {
  2. void onCloseDB();//关闭数据库
  3. }

2.1.2数据库接口2

[java] view plaincopyprint?

  1. public interface LoginService {
  2. /**
  3. * 登陆
  4. *
  5. * @param account
  6. *            账号
  7. * @param password
  8. *            密码
  9. * @return
  10. */
  11. CommandBean onLogin(String account, String password);
  12. /**
  13. * 注册
  14. *
  15. * @param UserBean
  16. *            用户实体
  17. * @return
  18. */
  19. CommandBean onRegisterAccount(UserBean user);
  20. }

2.2.1数据库接口实现类

[java] view plaincopyprint?

  1. public class DBHelper implements DBService {
  2. private final static String URL = "jdbc:mysql://localhost:3306/workmate?user=root&password=admin";
  3. private Statement stmt;
  4. private Connection conn;
  5. public DBHelper() {
  6. try {
  7. Class.forName("com.mysql.jdbc.Driver");
  8. conn = DriverManager.getConnection(URL);
  9. stmt = conn.createStatement();
  10. } catch (SQLException e) {
  11. e.printStackTrace();
  12. } catch (ClassNotFoundException e) {
  13. e.printStackTrace();
  14. }
  15. }
  16. @Override
  17. public void onCloseDB() {
  18. if (conn != null) {
  19. try {
  20. conn.close();
  21. } catch (SQLException e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25. }
  26. if (stmt != null) {
  27. try {
  28. stmt.close();
  29. } catch (SQLException e) {
  30. // TODO: handle exception
  31. }
  32. }
  33. }
  34. public Statement getStatement() {
  35. return stmt;
  36. }
  37. public Connection getConnection() {
  38. return conn;
  39. }
  40. }

2.2.2 数据库接口实现类

[java] view plaincopyprint?

  1. public class LoginHelper extends DBHelper implements LoginService {
  2. private Connection conn;
  3. private Statement stmt;
  4. public LoginHelper() {
  5. conn = getConnection();
  6. stmt = getStatement();
  7. }
  8. @Override
  9. public CommandBean onLogin(String account, String password) {
  10. CommandBean command = new CommandBean();
  11. PreparedStatement ps;
  12. String sql = "select * from wm_t_user where account=?";
  13. try {
  14. ps = conn.prepareStatement(sql);
  15. ps.setString(1, account);
  16. ResultSet set = ps.executeQuery();
  17. if (set.next()) {// 用户名正确
  18. String pwd = set.getString("password");
  19. if (pwd.equals(password)) {// 密码正确
  20. command.setStatus("0");
  21. } else {// 密码不正确
  22. command.setStatus("-2");// 密码错误
  23. command.setErrmsg("密码不正确");
  24. }
  25. } else {// 不存在此用户
  26. command.setStatus("-1");
  27. command.setErrmsg("此用户不存在");
  28. }
  29. } catch (SQLException e) {
  30. e.printStackTrace();
  31. }
  32. return command;
  33. }
  34. @Override
  35. public CommandBean onRegisterAccount(UserBean user) {
  36. CommandBean command = new CommandBean();
  37. PreparedStatement ps;
  38. String sql = "select * from wm_t_user where account=?";
  39. try {
  40. ps = conn.prepareStatement(sql);
  41. ps.setString(1, user.getAccount());
  42. ResultSet set = ps.executeQuery();
  43. if (set.next()) {// 用户存在
  44. command.setStatus("1");
  45. command.setErrmsg("此用户存在");
  46. } else {// 不存在此用户
  47. if (insertUser(user) > 0) {// 插入成功
  48. command.setStatus("0");
  49. } else {// 插入失败
  50. command.setStatus("-2");
  51. command.setErrmsg("数据库插入失败");
  52. }
  53. }
  54. } catch (SQLException e) {
  55. e.printStackTrace();
  56. }
  57. return command;
  58. }
  59. private int insertUser(UserBean user) {
  60. String sql = "insert into wm_t_user(account,password,username,age)values(?,?,?,?)";
  61. PreparedStatement ps;
  62. int rowNo = -1;
  63. try {
  64. ps = conn.prepareStatement(sql);
  65. ps.setString(1, user.getAccount());
  66. ps.setString(2, user.getPassword());
  67. ps.setString(3, user.getName());
  68. ps.setInt(4, user.getAge());
  69. rowNo = ps.executeUpdate();
  70. } catch (SQLException e) {
  71. e.printStackTrace();
  72. }
  73. return rowNo;
  74. }
  75. public static void main(String[] args) {
  76. LoginHelper db = new LoginHelper();
  77. UserBean user = new UserBean();
  78. user.setAccount("xxl6");
  79. user.setAge(28);
  80. user.setName("xxl");
  81. user.setPassword("0000");
  82. CommandBean commandBean = db.onRegisterAccount(user);
  83. // if(!commandBean.getStatus().equals("0")){
  84. // System.out.println(commandBean.getErrmsg());
  85. // }
  86. // System.out.println(commandBean.getStatus());
  87. }
  88. }

3.json解析帮助类

[java] view plaincopyprint?

  1. /**
  2. * Json与javaBean之间的转换工具类
  3. *
  4. */
  5. public class JsonOperator {
  6. /**
  7. * 将java对象转换成json字符串
  8. */
  9. public static <T> T json2Bean(String jsonString, Class<T> cls) {
  10. T t = null;
  11. try {
  12. Gson gson = new Gson();
  13. t = gson.fromJson(jsonString, cls);
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. return t;
  18. }
  19. /**
  20. * 将对象转换成json数据
  21. *
  22. * @param o
  23. * @return
  24. */
  25. public static <T> String toJson(Object o) {
  26. Gson gson = new Gson();
  27. String jsonStr = gson.toJson(o);
  28. return jsonStr;
  29. }
  30. /**
  31. * 将json数据转换成List列表返回
  32. *
  33. * @param jsonString
  34. * @param type
  35. * @return
  36. */
  37. public static <T> List<T> json2List(String jsonString, Type type) {
  38. List<T> list = new ArrayList<T>();
  39. try {
  40. Gson gson = new Gson();
  41. list = gson.fromJson(jsonString, type);
  42. } catch (Exception e) {
  43. }
  44. return list;
  45. }
  46. // public static void main(String[] args) {
  47. // String jsonStr = "[{\"name\":\"ice\",\"age\":20}]";
  48. // List<UserBean> list = json2List(jsonStr,
  49. // new TypeToken<List<UserBean>>() {
  50. // }.getType());
  51. // for (UserBean user : list)
  52. // System.out.println(user.getAge() + "");
  53. // }
  54. }

XML的解析本案例中没有实现。

服务端结束,在main中右键-》run as-》java application

到此服务端结束。

下面配置Android端。

下表面看一下包结构。

1javaBean是完全从服务单copy下来的。所以不列代码。

2主Activity。

[java] view plaincopyprint?

  1. public class MainActivity extends Activity {
  2. private String CLASS_NAME = getClass().getName();
  3. private SoapService service;
  4. private EditText etPwd, etAccount;
  5. private Handler mHandler;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. initWindow();
  11. initHandler();
  12. }
  13. private void initHandler() {
  14. mHandler = new Handler() {
  15. @Override
  16. public void handleMessage(Message msg) {
  17. switch (msg.what) {
  18. case 0:
  19. Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT)
  20. .show();
  21. break;
  22. default:
  23. Toast.makeText(MainActivity.this, msg.obj.toString(),
  24. Toast.LENGTH_SHORT).show();
  25. break;
  26. }
  27. }
  28. };
  29. }
  30. private void initWindow() {
  31. service = new SoapService();
  32. service.setNamespace("http://service.cxf.com/");
  33. etPwd = (EditText) findViewById(R.id.et_pwd);
  34. etAccount = (EditText) findViewById(R.id.et_account);
  35. }
  36. @Override
  37. public boolean onCreateOptionsMenu(Menu menu) {
  38. getMenuInflater().inflate(R.menu.main, menu);
  39. return true;
  40. }
  41. public void login(View v) {
  42. service.setMethodName("login");
  43. HashMap<String, String> paramsMap = new HashMap<String, String>();
  44. paramsMap.put("username", etAccount.getText().toString().trim());
  45. paramsMap.put("password", etPwd.getText().toString().trim());
  46. service.setParams(paramsMap);
  47. new Thread(new Runnable() {
  48. @Override
  49. public void run() {
  50. Message msg = new Message();
  51. msg.what = 0;
  52. try {
  53. String resultJson = service.invoke();
  54. CommandBean command = JsonOperator.json2Bean(resultJson,
  55. CommandBean.class);
  56. msg.what = new Integer(command.getStatus());
  57. msg.obj = command.getErrmsg();
  58. mHandler.sendMessage(msg);
  59. } catch (XmlPullParserException e) {
  60. e.printStackTrace();
  61. msg.what = -1;
  62. } catch (IOException e) {
  63. e.printStackTrace();
  64. msg.what = -2;
  65. }
  66. }
  67. }).start();
  68. }
  69. }

3.json解析也是完全从服务端COPY过来。

4.与服务器通信类代码

[java] view plaincopyprint?

  1. /**
  2. * 与服务器通信所用
  3. *
  4. * @author Administrator
  5. *
  6. */
  7. public class SoapService {
  8. private final static String url = "http://192.168.1.40:8989/wm/login?wsdl";
  9. private String namespace = "http://service.cxf.com/";
  10. private String methodName = "";
  11. private Class<?> cls;
  12. private HashMap<String, String> paramsMap;
  13. public void setNamespace(String namespace) {
  14. this.namespace = namespace;
  15. }
  16. public void setMethodName(String methodName) {
  17. this.methodName = methodName;
  18. }
  19. public String invoke() throws XmlPullParserException, IOException {
  20. HttpTransportSE httpTransportSE = new HttpTransportSE(url);
  21. httpTransportSE.debug = true;
  22. SoapObject requestObject = new SoapObject(namespace, methodName);
  23. // 字段名称和get字段名称
  24. Iterator it = paramsMap.entrySet().iterator();
  25. while (it.hasNext()) {
  26. Map.Entry entry = (Map.Entry) it.next();
  27. String paramName = entry.getKey().toString();
  28. String value = entry.getValue().toString();
  29. requestObject.addProperty(paramName, value);
  30. }
  31. SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
  32. SoapEnvelope.VER11);
  33. soapEnvelope.setOutputSoapObject(requestObject);
  34. soapEnvelope.dotNet = false;
  35. String resultJsonStr = "";
  36. httpTransportSE.call(null, soapEnvelope);
  37. if (soapEnvelope.getResponse() != null) {
  38. SoapObject result = (SoapObject) soapEnvelope.bodyIn;
  39. resultJsonStr = result.getProperty("return").toString();
  40. }
  41. return resultJsonStr;
  42. }
  43. public void setParams(String className) {
  44. // 获取类,取得属性值
  45. try {
  46. cls = Class.forName(className);
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. }
  51. public void setParams(HashMap<String, String> paramsMap) {
  52. this.paramsMap = paramsMap;
  53. }
  54. }

到此客户端也添加完成。

不要忘记在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET"/>权限。

在Android运行的图示:

1登陆成功。

2.用户不存在

3.密码错误。

数据库截图

源代码下载。

服务端下载

Android端下载

[java] view plaincopyprint?

    1. <pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"><pre code_snippet_id="255104" snippet_file_name="blog_20140325_7_5832111" name="code" class="java"></pre><pre code_snippet_id="255104" snippet_file_name="blog_20140325_44_3151853" name="code" class="java"></pre><pre code_snippet_id="255104" snippet_file_name="blog_20140325_44_3151853" name="code" class="java"></pre>
    2. <pre></pre>
    3. <pre></pre>
    4. <pre></pre>
    5. <pre></pre>
    6. <pre></pre>
    7. <pre></pre>
    8. <pre></pre>
    9. <pre></pre>
    10. <pre></pre>
    11. <pre></pre>
    12. <pre></pre>
    13. <pre></pre>
    14. <pre></pre>
    15. <pre></pre>
    16. <pre></pre>
    17. <pre></pre>
    18. <pre></pre>
    19. <pre></pre>
    20. <pre></pre>
    21. <pre></pre>
    22. <pre></pre>
    23. <pre></pre>
    24. <pre></pre>
    25. <pre></pre>
    26. <pre></pre>
    27. <pre></pre>
    28. <pre></pre>
    29. <pre></pre>
    30. <pre></pre>
    31. <pre></pre>
    32. <pre></pre>
    33. <pre></pre>
    34. <pre></pre>
    35. <pre></pre>
    36. <pre></pre>
    37. <pre></pre>
    38. <pre></pre>
    39. <pre></pre>
    40. <pre></pre>
    41. <pre></pre>
    42. <pre></pre>
    43. <pre></pre>
    44. <pre></pre>
    45. <pre></pre>
    46. <pre></pre>
    47. <pre></pre>
    48. <pre></pre>
    49. </pre></pre></pre></pre></pre></pre></pre>
时间: 2024-11-10 22:19:54

MySql+webService cxf+json 简单框架(转)的相关文章

WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作.下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考. 我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate; 1.首先集成Apacha CXF WebService 到 Spring 框架中; apache

使用CXF开发简单的Web Service

使用CXF开发简单的Web Service 博文我们介绍了Web Service的基本概念,了解它的基本概念之后,我们这篇博文介绍一个开源的WebService框架-Apache CXF,并实现一个HelloWorld实例. 一.开始之前 SOA目前已经成为了人人皆知的热点,SOA是面向服务的架构,SOA的重点在于服务的重用,即Service1+Service2+Service3,所有的组件都是"即插即用"的.SOA是由IBM提倡的架构,希望以"组装电脑"的方式开发

AXIS2+Myeclipse实现WebService数据库存储简单实例

AXIS2+Myeclipse实现WebService数据库存储简单实例 接了个简单的毕业设计.需要WebService实现前台显示后台数据库存储,本人菜鸟,想了下,决定服务端存放有数据库连接的方法,客户端调用服务端提供的方法,实现与数据库的连接. 一.准备工作: 1.下载AXIS2框架 这里使用的版本是axis2-1.7.2,下载地址:http://axis.apache.org/axis2/java/core/download.cgi官网. (1)Binary distribution ax

Mysql 5.7 JSON 与 物联网设备上数完美结合

MySQL 5.7.15 新特性一 (json) 更多更浓参考官网 https://dev.mysql.com/doc/refman/5.7/en/json.html 一.测试过程 1.创建库表 create database veh_history; use veh_history; CREATE TABLE `t_equipment_traffic` (   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',   `cn` char

★★JSP+Struts+Mysql构建的MVC三层框架对一张数据表的CURD

项目实现流程 大体流程:搭建环境 à 开发后台 à 开发前台 建立工程(struts2CURD),拷贝jar包,建立struts.xml文件,搭建环境 建立数据库和数据源配置:dbcpconfig.properties 建立db.sql:里面全是数据库操作的一些语句 建立操作数据库的工具:*.util:DBCPUtil.java,用于加载数据源.getDataSource(); *.Domain:User.java 继承ActionSupport,实现Serializable接口. ????写好

缓冲运动之框架開始一级简单框架实例

***********************缓冲运动[框架開始]-1.html********************************************* <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"

webservice cxf使用

环境:jdk1.7      grails2.4.0       ubuntu13 所需要的jar包:cxf-2.0.1 服务器端: 定义接口类: public interface IApp{ ...........//接口方法 } 定义实现类: public class AppService implements IApp{ //定义远程调用方法使用哪种协议;rmi不可以跨防火墙; static expose ['cxf','rmi']; //剔除掉不需要被客户端调用的方法; static e

缓冲运动之框架开始一级简单框架实例

***********************缓冲运动[框架开始]-1.html********************************************* <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style type="text/css"

webservice(CXF)基于3.1.1版本实例

引言 有没有一种办法可以实现跨应用程序进行通信和跨平台进行通信呢? 换句话说,就是有什么办法可以实现我的应用程序 A 可以和应用程序 B 进行通信呢? 或者说是,我用 Java 写的应用程序和用 . Net 开发的应用程序之间进行通信呢? 很多时候,上面提到的这些,我们是必须要使用的,比如,一个跨应用程序吧. 举一个日常生活的例子吧,我们平常都会使用QQ上面的天气预报功能 吧,那么这个功能是怎么实现的呢? WebService简介 如果简单的说的话,WebServices就是一组函数库,但是又有