转载请标明出处:http://blog.csdn.net/u012637501
一、注册模块服务端
1.(MyEclipse)src/../DBUtil.java:数据库工具类(JDBC,链接数据库)
在数据库工具类中,
添加sql语句插入数据具体实现
方法。
- package com.jiangdongguo.login;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import com.mysql.jdbc.PreparedStatement;
- import com.mysql.jdbc.ResultSet;
- /*访问数据库工具类:获取数据库链接*/
- public class DBUtil {
- private String dbName = "ServerDatabase"; //数据库名
- private String url="jdbc:mysql://localhost:3306/"+dbName;//URI
- private String user="root"; //MySQL数据库root账户
- private String psd="111111"; //MySQL账户密码
- private PreparedStatement ps;
- private ResultSet result;
- //获取数据库链接的方法getConn()
- private Connection conn;
- public Connection getConn()
- {
- try {
- Class.forName("com.mysql.jdbc.Driver"); //根据字符串new一个实例,Class类为类装载器
- conn=DriverManager.getConnection(url,user,psd); //获取数据库链接,传入参数:数据库名称、账户名、密码
- } catch (Exception e) {
- e.printStackTrace();
- }
- return conn;
- }
- //1.查询数据库业务逻辑
- public boolean checkUser(String sql,String[] args)
- {
- ..........
- }
- //2.向数据库插入一条记录业务逻辑(添加记录到数据库)
- public boolean add(String sql,String[] args)
- {
- boolean flag=false;
- conn=getConn(); //获得数据库链接
- try {
- ps=(PreparedStatement) conn.prepareStatement(sql);
- if(args!=null) //对sql语句每个占位符赋值
- {
- for(int i=0;i<args.length;i++)
- ps.setString(i+1, args[i]);
- int i=ps.executeUpdate(); //如果插入记录成功,返回整型1
- if(i==1)
- {
- flag=true;
- }
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return flag;
- }
- }
2.(MyEclipse)src/../RegisterServlet.java:Servlet(Java Web应用的Servlet)
功能: ①重写响应客户端的GET请求方法
②
获取客户端登录模块传递到服务器的数据;
③实例化数据库工具类,建立Java Web应用与数据库的连接并传递查询数据库的sql语句(登录功能的具体实现);
源码:
- package com.jiangdongguo.login;
- 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;
- //向服务器数据库中插入数据
- public class RegisterServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- response.setContentType("text/html"); //设置返回类型为网页形式
- PrintWriter out = response.getWriter(); //输出
- String name = request.getParameter("username"); //获取请求传入的参数-用户名信息
- String psd = request.getParameter("psd"); // -密码
- System.out.println("username="+name+"psd="+psd);
- //使用MySql数据库
- DBUtil dbUtil = new DBUtil();
- boolean result=dbUtil.add("insert into users (user_name,user_psd) values (?,?)", new String[]{name,psd});
- out.print(result);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doGet(request, response);
- }
- }
注:找到该物理路径下的web.xml文件,查看是否包含<url-pattern> /RegisterServlet</url- pattern>的<Servlet-mapping>、以及<servlet-name>RegisterServlet</servlet-name>。否则,服务器注册模块部署不成功。
3.测试:客户端向服务器数据库添加数据
点击"/login"进入web应用,浏览器中输入"
http://localhost:8080/login/RegisterServlet?username=zhangsan&psd=000"作为客户端访问服务器,观察如下说明服务器注册模块部署成功:
二、注册模块客户端
1.(Eclipse)src/.../RegisterActivity.java:客户端主UI
(1)注册:通过子线程调用doGet()方法,向服务器发送GET请求并获取服务器返回的响应数据;
(3)重置:清空登录信息;
- package com.example.http_client;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.app.AlertDialog.Builder;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- /*通过子进程、消息传递机制,完成HTTP网络通信*/
- public class RegisterActivity extends Activity {
- private EditText userName;
- private EditText password;
- private EditText confirmPsd;
- private Button registerBtn;
- private Button resetBtn;
- private void init()
- {
- userName = (EditText)findViewById(R.id.Register_uername);
- password= (EditText)findViewById(R.id.Register_password);
- confirmPsd=(EditText)findViewById(R.id.Register_confirm);
- registerBtn= (Button)findViewById(R.id.register);
- resetBtn=(Button)findViewById(R.id.resetRegister);
- }
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.register);
- init(); //初始化控件
- /*1.重置按钮业务逻辑
- * 即清空用户名、密码、确认密码输入框内容*/
- resetBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- userName.setText("");
- password.setText("");
- confirmPsd.setText("");
- }
- });
- /*2.注册按钮业务逻辑
- * 即清空用户名和密码输入框内容*/
- registerBtn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- String detecResult=checkInput(); //检查注册信息是否符合要求
- System.out.println(detecResult);
- if(detecResult!="")
- {
- //若输入有错误,弹出一个对话框
- Builder builder = new AlertDialog.Builder(RegisterActivity.this);
- builder.setTitle("出错提示"); //对话框标题
- builder.setMessage(detecResult); //显示内容
- builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- }
- }).create().show();
- }
- else
- {
- //a.创建一个Handler类对象,并重写handleMessage()方法
- final Handler myHandler=new Handler(){
- public void handleMessage(Message msg) {
- String response=(String)msg.obj; //读取obj发送过来的消息
- if("true".equals(response)) //a.用户存在,跳转至个人用户界面
- {
- Intent intent=new Intent();
- intent.setClass(RegisterActivity.this, UserActivity.class);
- startActivity(intent);
- }
- else //b.如果服务器返回false,说明用户信息不存在或者填写错误
- {
- Toast.makeText(RegisterActivity.this, "注册失败!",Toast.LENGTH_SHORT).show();
- }
- }
- };
- //b.创建一个子线程
- //需要注意的是,当服务器没有开启时应用会异常终止,这里我们需要处理这个异常防止程序异常退出
- new Thread(new Runnable(){
- public void run() {
- RegisterToServer login = new RegisterToServer();
- String result=login.doGet(userName.getText().toString().trim(), password.getText().toString().trim());
- Message msg=new Message();
- msg.obj=result; //将响应信息保存到obj中
- myHandler.sendMessage(msg);
- }
- }).start();
- }
- }
- });
- }
- //checknput方法:用于检测注册时输入的用户信息是否正确
- public String checkInput()
- {
- String result="";
- //a.用户名不能为空
- if(userName.getText().toString()==null || "".equals(userName.getText().toString().trim()))
- {
- result="用户名不能为空!";
- }
- else if(password.getText().toString().length()<3||password.getText().toString().length()>15)
- {
- result="密码在3~15个字符之间!";
- }
- else if(!confirmPsd.getText().toString().equals(password.getText().toString().trim()))
- {
- result="两次密码输入不正确!";
- }
- else
- {
- result=""; //返回为空,说明注册信息满足要求
- }
- return result;
- }
- }
注:服务器响应数据为"true".
2.(Eclipse)src/.../RegisterToServer.java:doGet()方法具体实现类
功能:用于客户端向服务器实现发送GET请求/POST请求的具体实现类
- package com.example.http_client;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import java.util.ArrayList;
- import java.util.List;
- import org.apache.http.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.HttpStatus;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.message.BasicNameValuePair;
- public class RegisterToServer {
- private String url="http://10.0.2.2:8080/login/RegisterServlet"; //访问服务器资源的URL地址
- String result="";
- /*doGet方法
- * 作用:实现客户端向服务器发送GET请求*/
- public String doGet(String name,String psd)
- {
- HttpClient httpClient = new DefaultHttpClient(); //客户端实例
- String urlStr=url+"?username="+name+"&psd="+psd; //给UIL装载请求数据
- HttpGet getRequest=new HttpGet(urlStr); //实例化HttpGet,代表Get请求
- try {
- HttpResponse response = httpClient.execute(getRequest);//发送Get请求,并获取响应
- if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
- {
- HttpEntity entity=response.getEntity(); //获取响应信息实体
- InputStream is= entity.getContent(); //h.执行HttpEntity的getContent方法,获取对应的输入流
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- //i.读取输入流中的内容,并以字符串的形式返回
- String readLine = null;
- while((readLine = br.readLine()) != null )
- {
- result=result+readLine;
- }
- is.close();
- }
- else
- {
- result="error";
- }
- }
- catch (IOException e)
- {
- System.out.println(e.getMessage());
- }
- return result;
- }
- }
注:UserActivity在后面实现。
三、注册模块测试
(1)注册用户
(2)登录账户
(3)服务器数据库
源码:http://download.csdn.net/detail/u012637501/8683889