1、Android客户端采用开发工具为Android Studio,用到的jar包com.alibaba:fastjson:1.2.7
.jar、com.squareup.okhttp:okhttp:2.5.0.jar、com.squareup.okio:okio:1.6.0.jar,客户端采用OkHttp与服务器进行交互,详见
2、Web服务器采用MyEclipse,用到的jar包,主要是Hibernate的jar
1.2 主界面 LoginActivity.java 在LoginActivity.java中,实现与服务器间的交互主要采用OKHttp架包,这个架包封装了各种与服务器的交互,详见点击打开链接
package com.zsp.applogin.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.squareup.okhttp.Request;
import com.zsp.applogin.Json.WriteJson;
import com.zsp.applogin.R;
import com.zsp.applogin.Util.OkHttpClientManager;
import com.zsp.applogin.domain.User;
import java.util.ArrayList;
import java.util.List;
public class LoginActivity extends AppCompatActivity {
Button login;
Button register;
EditText etusername;
EditText etpassword;
String username;
String password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
init();
register.setOnClickListener(new RegisterOnclick());
login.setOnClickListener(new LoginOnclick());
}
private void init() {
etusername = (EditText) findViewById(R.id.etusername);
etpassword = (EditText) findViewById(R.id.etpassword);
login = (Button) findViewById(R.id.login);
register = (Button) findViewById(R.id.register);
}
private class RegisterOnclick implements View.OnClickListener {
public void onClick(View v) {
}
}
private class LoginOnclick implements View.OnClickListener {
public void onClick(View arg0) {
username = etusername.getText().toString().trim();
if (username == null || username.length() <= 0) {
etusername.requestFocus();
etusername.setError("对不起,用户名不能为空");
return;
} else {
username = etusername.getText().toString().trim();
}
password = etpassword.getText().toString().trim();
if (password == null || password.length() <= 0) {
etpassword.requestFocus();
etpassword.setError("对不起,密码不能为空");
return;
} else {
password = etpassword.getText().toString().trim();
}
User user = new User(username, password);
//构造一个user对象
List list = new ArrayList();
list.add(user);
WriteJson writeJson = new WriteJson();
//将user对象写出json形式字符串
String jsonString = writeJson.getJsonData(list);
String url = "http://192.168.1.186:8080/LoginTest/servlet/Login";
OkHttpClientManager.postAsyn(url, new OkHttpClientManager.ResultCallback() {
@Override
public void onError(Request request, Exception e) {
e.printStackTrace();
}
@Override
public void onResponse(String u) {
Toast.makeText(LoginActivity.this, u, Toast.LENGTH_SHORT).show();
}
}, new OkHttpClientManager.Param("username", username), new OkHttpClientManager.Param("password", password));
}
}
}
二、Web服务器
服务器中采用Hibernate架构,
2.1 Domain包
2.1.1 User.hbm.xml Pojo类的配置文件
2.1.2 User.java Pojo类 (Pojo类必需进行序列化(Serializable))
package com.zsp.domain;
import java.io.Serializable;
public class User implements Serializable {
/**
* @Fields serialVersionUID : TODO
*/
private static final long serialVersionUID = 1L;
private int userid;
private String username;
private String userpwd;
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpwd() {
return userpwd;
}
public void setUserpwd(String userpwd) {
this.userpwd = userpwd;
}
}
2.2 Service包
主要分成两层,分别是接口类和继承接口的类
2.2.1UserServiceInter.java接口类package com.zsp.service.inter;
import com.zsp.domain.User;
public interface UserServiceInter {
public User checkUser(User user);
}
UserServiceImp.java继承接口的类package com.zsp.service.imp;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.hibernate.Query;
import com.zsp.domain.User;
import com.zsp.service.inter.UserServiceInter;
import com.zsp.util.HibernateUtil;
public class UserServiceImp implements UserServiceInter {
public User checkUser(User user) {
List list = null;
String hql = "from User where username = ? and userpwd = ?";
String[] parameters = {user.getUsername(),user.getUserpwd()};
list = HibernateUtil.hqlQuery(hql, parameters);
if(list.size()==0){
return null;
}else{
return list.get(0);
}
}
}
2.3 Util包主要是Hibernate对MySQL数据库的操作工具Login.java主要是响应从Android客户端发送过来的指令,并回应import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory = null; //使用线程局部模式 private static ThreadLocal threadLocal = new ThreadLocal(); private HibernateUtil(){}; static { sessionFactory = new Configuration().configure().buildSessionFactory(); } //获取全新的session public static Session openSession(){ return sessionFactory.openSession(); } //获取和线程关联的session public static Session getCurrentSession(){ Session session= threadLocal.get(); //判断是否得到 if(session==null){ session = sessionFactory.openSession(); //把session对象设置到threadLocal, threadLocal.set(session); } return session; } public static void closeCurrentSession(){ Session s=getCurrentSession(); if(s!=null&& s.isOpen() ){ s.close(); threadLocal.set(null); } } //提供一个统一的查询方法 hql 形式 from 类 where 条件=? .. public static List hqlQuery(String hql,String [] parameters){ Session session= null; List list = null; try { session = openSession(); Query query = session.createQuery(hql); //判断是否有参数要绑定 if(parameters !=null && parameters.length>0){ for (int i = 0; i < parameters.length; i++) { query.setString(i, parameters[i]); } } list = query.list(); } catch (HibernateException e) { // TODO Auto-generated catch block e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally{ if(session != null && session.isOpen()){ session.close(); } } return list; } }
2.5 Hibernate的配置hibernate.cfg.xml 这里必需引入c3p0连接池,不然在服务器上添加一条数据,客户端是无法访问,必需重启服务器才能访问得到package com.zsp.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.zsp.domain.User; import com.zsp.service.imp.UserServiceImp; import com.zsp.service.inter.UserServiceInter; public class Login extends HttpServlet { /** * Constructor of the object. */ public Login() { super(); } /** * Destruction of the servlet.
*/ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet.
* * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet.
* * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); String username=request.getParameter("username"); String password=request.getParameter("password"); User user = new User(); user.setUsername(username); user.setUserpwd(password); UserServiceInter userServiceInter = new UserServiceImp(); user = userServiceInter.checkUser(user); System.out.println(username+" "+password); if(user != null){ out.write("success"); }else{ out.write("failure"); } out.flush(); out.close(); } /** * Initialization of the servlet.
* * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }三、结果com.mysql.jdbc.Driver root 123456 jdbc:mysql:///lesson org.hibernate.dialect.MySQLDialect update true org.hibernate.connection.C3P0ConnectionProvider 20 5 Test 100 120 1 true 18000 25000