zoukankan      html  css  js  c++  java
  • MySql+webService cxf+json 简单框架(转)

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

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

    服务器端代码:

    包结构图:

    包结构

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

    CommandBean

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



    UserBean

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

    1.2 cxf接口:

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

    1.3 cxf实现类

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

    2.1.1数据库接口1

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

    2.1.2数据库接口2

    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.      *  
    16.      * @param UserBean 
    17.      *            用户实体 
    18.      * @return 
    19.      */  
    20.     CommandBean onRegisterAccount(UserBean user);  
    21. }  


    2.2.1数据库接口实现类

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


    2.2.2 数据库接口实现类

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

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

    XML的解析本案例中没有实现。
     
    服务端结束,在main中右键-》run as-》java application
     
    到此服务端结束。
     
     

    下面配置Android端。

    下表面看一下包结构。

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

    2主Activity。

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

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

    4.与服务器通信类代码

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

    到此客户端也添加完成。
     不要忘记在AndroidManifest.xml中添加<uses-permission android:name="android.permission.INTERNET"/>权限。
     
    在Android运行的图示:

     1登陆成功。

    2.用户不存在

    3.密码错误。

     

    数据库截图

     
     

    源代码下载。

    服务端下载

    Android端下载

     
      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>  
  • 相关阅读:
    git branch用法总结
    vue-router异步加载组件
    vue错误提示 Cannot read property 'beforeRouteEnter' of undefined,刷新后跳到首页
    websocket常见错误
    Websocket原理
    怎么在overflow-y:sroll的情况下 隐藏滚动条
    URI和URL有什么区别
    确定浏览器是否支持某些DOM模块
    将nodeList转换为数组(兼容性)
    软件的三种版本
  • 原文地址:https://www.cnblogs.com/shenming/p/4560871.html
Copyright © 2011-2022 走看看