MySql+webService cxf+json 简单框架

来源:互联网 发布:怎么查看80端口被占用 编辑:程序博客网 时间:2024/06/02 10:15

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

服务器端代码:

包结构图:

包结构

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

CommandBean

public class CommandBean {private String status;//0 正确     -1:此用户不存在,1:用户存在, -2,数据插入失败private String errmsg;//错误信息public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}public String getErrmsg() {return errmsg;}public void setErrmsg(String errmsg) {this.errmsg = errmsg;}}


UserBean

public class UserBean {private String name;private Integer age;private String account;private String password;public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public UserBean(String name, Integer age) {super();this.name = name;this.age = age;}public UserBean() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "UserBean [name=" + name + ", age=" + age + ", account="+ account + ", password=" + password + "]";}}

1.2 cxf接口:

@WebServicepublic interface ILoginService {String login(@WebParam(name = "username") String username,@WebParam(name = "password") String password);}

1.3 cxf实现类

@WebService(endpointInterface = "com.cxf.service.ILoginService", serviceName = "LoginServiceService")public class LoginService implements ILoginService {@Overridepublic String login(String username, String password) {LoginHelper loginHelper = new LoginHelper();CommandBean commandBean = loginHelper.onLogin(username, password);String jsonStr = JsonOperator.toJson(commandBean);return jsonStr;}}

2.1.1数据库接口1

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

2.1.2数据库接口2

public interface LoginService {/** * 登陆 *  * @param account *            账号 * @param password *            密码 * @return */CommandBean onLogin(String account, String password);/** * 注册 *  * @param UserBean *            用户实体 * @return */CommandBean onRegisterAccount(UserBean user);}


2.2.1数据库接口实现类

public class DBHelper implements DBService {private final static String URL = "jdbc:mysql://localhost:3306/workmate?user=root&password=admin";private Statement stmt;private Connection conn;public DBHelper() {try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(URL);stmt = conn.createStatement();} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}@Overridepublic void onCloseDB() {if (conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {// TODO: handle exception}}}public Statement getStatement() {return stmt;}public Connection getConnection() {return conn;}}


2.2.2 数据库接口实现类

public class LoginHelper extends DBHelper implements LoginService {private Connection conn;private Statement stmt;public LoginHelper() {conn = getConnection();stmt = getStatement();}@Overridepublic CommandBean onLogin(String account, String password) {CommandBean command = new CommandBean();PreparedStatement ps;String sql = "select * from wm_t_user where account=?";try {ps = conn.prepareStatement(sql);ps.setString(1, account);ResultSet set = ps.executeQuery();if (set.next()) {// 用户名正确String pwd = set.getString("password");if (pwd.equals(password)) {// 密码正确command.setStatus("0");} else {// 密码不正确command.setStatus("-2");// 密码错误command.setErrmsg("密码不正确");}} else {// 不存在此用户command.setStatus("-1");command.setErrmsg("此用户不存在");}} catch (SQLException e) {e.printStackTrace();}return command;}@Overridepublic CommandBean onRegisterAccount(UserBean user) {CommandBean command = new CommandBean();PreparedStatement ps;String sql = "select * from wm_t_user where account=?";try {ps = conn.prepareStatement(sql);ps.setString(1, user.getAccount());ResultSet set = ps.executeQuery();if (set.next()) {// 用户存在command.setStatus("1");command.setErrmsg("此用户存在");} else {// 不存在此用户if (insertUser(user) > 0) {// 插入成功command.setStatus("0");} else {// 插入失败command.setStatus("-2");command.setErrmsg("数据库插入失败");}}} catch (SQLException e) {e.printStackTrace();}return command;}private int insertUser(UserBean user) {String sql = "insert into wm_t_user(account,password,username,age)values(?,?,?,?)";PreparedStatement ps;int rowNo = -1;try {ps = conn.prepareStatement(sql);ps.setString(1, user.getAccount());ps.setString(2, user.getPassword());ps.setString(3, user.getName());ps.setInt(4, user.getAge());rowNo = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();}return rowNo;}public static void main(String[] args) {LoginHelper db = new LoginHelper();UserBean user = new UserBean();user.setAccount("xxl6");user.setAge(28);user.setName("xxl");user.setPassword("0000");CommandBean commandBean = db.onRegisterAccount(user);// if(!commandBean.getStatus().equals("0")){// System.out.println(commandBean.getErrmsg());// }// System.out.println(commandBean.getStatus());}}

3.json解析帮助类
/** * Json与javaBean之间的转换工具类 *  */public class JsonOperator {/** * 将java对象转换成json字符串 */public static <T> T json2Bean(String jsonString, Class<T> cls) {T t = null;try {Gson gson = new Gson();t = gson.fromJson(jsonString, cls);} catch (Exception e) {e.printStackTrace();}return t;}/** * 将对象转换成json数据 *  * @param o * @return */public static <T> String toJson(Object o) {Gson gson = new Gson();String jsonStr = gson.toJson(o);return jsonStr;}/** * 将json数据转换成List列表返回 *  * @param jsonString * @param type * @return */public static <T> List<T> json2List(String jsonString, Type type) {List<T> list = new ArrayList<T>();try {Gson gson = new Gson();list = gson.fromJson(jsonString, type);} catch (Exception e) {}return list;}// public static void main(String[] args) {// String jsonStr = "[{\"name\":\"ice\",\"age\":20}]";// List<UserBean> list = json2List(jsonStr,// new TypeToken<List<UserBean>>() {// }.getType());// for (UserBean user : list)// System.out.println(user.getAge() + "");// }}

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

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


到此服务端结束。


下面配置Android端。

下表面看一下包结构。


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

2主Activity。

public class MainActivity extends Activity {private String CLASS_NAME = getClass().getName();private SoapService service;private EditText etPwd, etAccount;private Handler mHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initWindow();initHandler();}private void initHandler() {mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case 0:Toast.makeText(MainActivity.this, "成功", Toast.LENGTH_SHORT).show();break;default:Toast.makeText(MainActivity.this, msg.obj.toString(),Toast.LENGTH_SHORT).show();break;}}};}private void initWindow() {service = new SoapService();service.setNamespace("http://service.cxf.com/");etPwd = (EditText) findViewById(R.id.et_pwd);etAccount = (EditText) findViewById(R.id.et_account);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}public void login(View v) {service.setMethodName("login");HashMap<String, String> paramsMap = new HashMap<String, String>();paramsMap.put("username", etAccount.getText().toString().trim());paramsMap.put("password", etPwd.getText().toString().trim());service.setParams(paramsMap);new Thread(new Runnable() {@Overridepublic void run() {Message msg = new Message();msg.what = 0;try {String resultJson = service.invoke();CommandBean command = JsonOperator.json2Bean(resultJson,CommandBean.class);msg.what = new Integer(command.getStatus());msg.obj = command.getErrmsg();mHandler.sendMessage(msg);} catch (XmlPullParserException e) {e.printStackTrace();msg.what = -1;} catch (IOException e) {e.printStackTrace();msg.what = -2;}}}).start();}}

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

4.与服务器通信类代码

/** * 与服务器通信所用 *  * @author Administrator *  */public class SoapService {private final static String url = "http://192.168.1.40:8989/wm/login?wsdl";private String namespace = "http://service.cxf.com/";private String methodName = "";private Class<?> cls;private HashMap<String, String> paramsMap;public void setNamespace(String namespace) {this.namespace = namespace;}public void setMethodName(String methodName) {this.methodName = methodName;}public String invoke() throws XmlPullParserException, IOException {HttpTransportSE httpTransportSE = new HttpTransportSE(url);httpTransportSE.debug = true;SoapObject requestObject = new SoapObject(namespace, methodName);// 字段名称和get字段名称Iterator it = paramsMap.entrySet().iterator();while (it.hasNext()) {Map.Entry entry = (Map.Entry) it.next();String paramName = entry.getKey().toString();String value = entry.getValue().toString();requestObject.addProperty(paramName, value);}SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);soapEnvelope.setOutputSoapObject(requestObject);soapEnvelope.dotNet = false;String resultJsonStr = "";httpTransportSE.call(null, soapEnvelope);if (soapEnvelope.getResponse() != null) {SoapObject result = (SoapObject) soapEnvelope.bodyIn;resultJsonStr = result.getProperty("return").toString();}return resultJsonStr;}public void setParams(String className) {// 获取类,取得属性值try {cls = Class.forName(className);} catch (Exception e) {e.printStackTrace();}}public void setParams(HashMap<String, String> paramsMap) {this.paramsMap = paramsMap;}}

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

在Android运行的图示:

 1登陆成功。


2.用户不存在


3.密码错误。



数据库截图




源代码下载。

服务端下载

Android端下载


                                             
2 0
原创粉丝点击