06.HTTP编程实战:高校信息查询平台之注册模块

转载请标明出处:http://blog.csdn.net/u012637501
一、注册模块服务端  
1.(MyEclipse)src/../DBUtil.java:数据库工具类(JDBC,链接数据库)
    在数据库工具类中, 添加sql语句插入数据具体实现 方法
  1. package com.jiangdongguo.login;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6. import com.mysql.jdbc.PreparedStatement;  
  7. import com.mysql.jdbc.ResultSet;  
  8. /*访问数据库工具类:获取数据库链接*/  
  9. public class DBUtil {  
  10.     private String dbName = "ServerDatabase";   //数据库名  
  11.     private String url="jdbc:mysql://localhost:3306/"+dbName;//URI 
  12.     private String user="root";                       //MySQL数据库root账户  
  13.     private String psd="111111";                  //MySQL账户密码  
  14.       
  15.     private PreparedStatement ps;                 
  16.     private ResultSet result;  
  17.       
  18.     //获取数据库链接的方法getConn()  
  19.     private Connection conn;                      
  20.     public Connection getConn()  
  21.     {         
  22.         try {  
  23.             Class.forName("com.mysql.jdbc.Driver");             //根据字符串new一个实例,Class类为类装载器
  24.             conn=DriverManager.getConnection(url,user,psd); //获取数据库链接,传入参数:数据库名称、账户名、密码  
  25.         } catch (Exception e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.         return conn;      
  29.     }  
  30.       
  31.     //1.查询数据库业务逻辑 
  32.     public boolean checkUser(String sql,String[] args)  
  33.     {  
  34.       ..........
  35.     }  
  36.     //2.向数据库插入一条记录业务逻辑(添加记录到数据库)  
  37.         public boolean add(String sql,String[] args)  
  38.         {  
  39.             boolean flag=false;  
  40.             conn=getConn();     //获得数据库链接  
  41.             try {  
  42.                 ps=(PreparedStatement) conn.prepareStatement(sql);  
  43.                 if(args!=null)  //对sql语句每个占位符赋值  
  44.                 {  
  45.                     for(int i=0;i<args.length;i++)  
  46.                         ps.setString(i+1, args[i]);  
  47.                     int i=ps.executeUpdate();   //如果插入记录成功,返回整型1  
  48.                     if(i==1)  
  49.                     {  
  50.                         flag=true;  
  51.                     }  
  52.                 }  
  53.             } catch (SQLException e) {  
  54.                 e.printStackTrace();  
  55.             }         
  56.             return flag;          
  57.         }  
  58. }  

2.(MyEclipse)src/../RegisterServlet.java:Servlet(Java Web应用的Servlet)
 功能: ①重写响应客户端的GET请求方法
              
获取客户端登录模块传递到服务器的数据;
              ③实例化数据库工具类,建立Java Web应用与数据库的连接并传递查询数据库的sql语句(登录功能的具体实现);

源码:
  1. package com.jiangdongguo.login; 
  2. import java.io.IOException;  
  3. import java.io.PrintWriter;  
  4. import javax.servlet.ServletException;  
  5. import javax.servlet.http.HttpServlet;  
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8. //向服务器数据库中插入数据  
  9. public class RegisterServlet extends HttpServlet {  
  10.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  11.             throws ServletException, IOException {  
  12.   
  13.         response.setContentType("text/html");           //设置返回类型为网页形式  
  14.         PrintWriter out = response.getWriter();         //输出  
  15.         String name = request.getParameter("username"); //获取请求传入的参数-用户名信息  
  16.         String psd = request.getParameter("psd");       //              -密码  
  17.         System.out.println("username="+name+"psd="+psd);  
  18.           
  19.         //使用MySql数据库  
  20.         DBUtil dbUtil = new DBUtil();  
  21.         boolean result=dbUtil.add("insert into users (user_name,user_psd) values (?,?)"new String[]{name,psd});  
  22.         out.print(result);  
  23.     }  
  24.   
  25.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  26.             throws ServletException, IOException {  
  27.         this.doGet(request, response);  
  28.       
  29.     }  
  30.   
  31. } 
注:找到该物理路径下的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)重置:清空登录信息;
  1. package com.example.http_client;  
  2.   
  3.   
  4. import android.app.Activity;  
  5. import android.app.AlertDialog;  
  6. import android.app.AlertDialog.Builder;  
  7. import android.content.DialogInterface;  
  8. import android.content.Intent;  
  9. import android.os.Bundle;  
  10. import android.os.Handler;  
  11. import android.os.Message;  
  12. import android.view.View;  
  13. import android.view.View.OnClickListener;  
  14. import android.widget.Button;  
  15. import android.widget.EditText;  
  16. import android.widget.Toast;  
  17.   
  18. /*通过子进程、消息传递机制,完成HTTP网络通信*/  
  19. public class RegisterActivity extends Activity {  
  20.     private EditText userName;  
  21.     private EditText password;  
  22.     private EditText confirmPsd;  
  23.     private Button registerBtn;  
  24.     private Button resetBtn;  
  25.     private void init()  
  26.     {  
  27.         userName = (EditText)findViewById(R.id.Register_uername);  
  28.         password= (EditText)findViewById(R.id.Register_password);  
  29.         confirmPsd=(EditText)findViewById(R.id.Register_confirm);  
  30.         registerBtn= (Button)findViewById(R.id.register);  
  31.         resetBtn=(Button)findViewById(R.id.resetRegister);  
  32.     }  
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.register);  
  37.         init();     //初始化控件  
  38.           
  39.         /*1.重置按钮业务逻辑 
  40.          *      即清空用户名、密码、确认密码输入框内容*/  
  41.           
  42.         resetBtn.setOnClickListener(new OnClickListener() {  
  43.             public void onClick(View v) {  
  44.                 userName.setText("");  
  45.                 password.setText("");  
  46.                 confirmPsd.setText("");  
  47.             }  
  48.         });   
  49.           
  50.         /*2.注册按钮业务逻辑 
  51.          *      即清空用户名和密码输入框内容*/  
  52.           
  53.         registerBtn.setOnClickListener(new OnClickListener() {  
  54.             public void onClick(View v) {  
  55.                 String detecResult=checkInput();        //检查注册信息是否符合要求  
  56.                 System.out.println(detecResult);  
  57.                 if(detecResult!="")  
  58.                 {  
  59.                     //若输入有错误,弹出一个对话框  
  60.                     Builder builder = new AlertDialog.Builder(RegisterActivity.this);  
  61.                     builder.setTitle("出错提示");           //对话框标题  
  62.                     builder.setMessage(detecResult);    //显示内容  
  63.                     builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  64.                         public void onClick(DialogInterface dialog, int which) {  
  65.                         }  
  66.                     }).create().show();  
  67.                 }  
  68.                 else  
  69.                 {  
  70.                         //a.创建一个Handler类对象,并重写handleMessage()方法  
  71.                         final Handler myHandler=new Handler(){  
  72.                         public void handleMessage(Message msg) {  
  73.                                 String response=(String)msg.obj;                //读取obj发送过来的消息    
  74.                                 if("true".equals(response))     //a.用户存在,跳转至个人用户界面  
  75.                                 {  
  76.                                     Intent intent=new Intent();  
  77.                                     intent.setClass(RegisterActivity.this, UserActivity.class);   
  78.                                     startActivity(intent);  
  79.                                 }  
  80.                                 else                                        //b.如果服务器返回false,说明用户信息不存在或者填写错误  
  81.                                 {  
  82.                                     Toast.makeText(RegisterActivity.this"注册失败!",Toast.LENGTH_SHORT).show();  
  83.                                 }  
  84.                             }  
  85.                         };  
  86.                         //b.创建一个子线程  
  87.                             //需要注意的是,当服务器没有开启时应用会异常终止,这里我们需要处理这个异常防止程序异常退出  
  88.                         new Thread(new Runnable(){  
  89.                             public void run() {  
  90.                                 RegisterToServer login = new RegisterToServer();  
  91.                                 String result=login.doGet(userName.getText().toString().trim(), password.getText().toString().trim());    
  92.                                 Message msg=new Message();  
  93.                                 msg.obj=result; //将响应信息保存到obj中  
  94.                                 myHandler.sendMessage(msg);       
  95.                         }             
  96.                     }).start();  
  97.                 }  
  98.             }  
  99.         });  
  100.     }  
  101.       
  102.     //checknput方法:用于检测注册时输入的用户信息是否正确  
  103.     public String checkInput()  
  104.     {  
  105.         String result="";  
  106.         //a.用户名不能为空  
  107.         if(userName.getText().toString()==null || "".equals(userName.getText().toString().trim()))  
  108.         {  
  109.             result="用户名不能为空!";  
  110.         }  
  111.         else if(password.getText().toString().length()<3||password.getText().toString().length()>15)  
  112.         {  
  113.             result="密码在3~15个字符之间!";  
  114.         }  
  115.         else if(!confirmPsd.getText().toString().equals(password.getText().toString().trim()))  
  116.         {  
  117.             result="两次密码输入不正确!";  
  118.         }  
  119.         else  
  120.         {  
  121.             result="";          //返回为空,说明注册信息满足要求  
  122.         }  
  123.         return result;  
  124.     }      
  125. }  
注:服务器响应数据为"true".
2.(Eclipse)src/.../RegisterToServer.java:doGet()方法具体实现类
功能:用于客户端向服务器实现发送GET请求/POST请求的具体实现类
  1. package com.example.http_client;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStream;  
  6. import java.io.InputStreamReader;  
  7. import java.io.UnsupportedEncodingException;  
  8. import java.util.ArrayList;  
  9. import java.util.List;  
  10.   
  11. import org.apache.http.HttpEntity;  
  12. import org.apache.http.HttpResponse;  
  13. import org.apache.http.HttpStatus;  
  14. import org.apache.http.NameValuePair;  
  15. import org.apache.http.client.ClientProtocolException;  
  16. import org.apache.http.client.HttpClient;  
  17. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  18. import org.apache.http.client.methods.HttpGet;  
  19. import org.apache.http.client.methods.HttpPost;  
  20. import org.apache.http.impl.client.DefaultHttpClient;  
  21. import org.apache.http.message.BasicNameValuePair;  
  22.   
  23. public class RegisterToServer {  
  24.     private String url="http://10.0.2.2:8080/login/RegisterServlet";        //访问服务器资源的URL地址  
  25.     String result="";         
  26.       
  27.     /*doGet方法 
  28.      * 作用:实现客户端向服务器发送GET请求*/  
  29.       
  30.     public String doGet(String name,String psd)  
  31.     {  
  32.         HttpClient httpClient = new DefaultHttpClient();                       //客户端实例  
  33.         String urlStr=url+"?username="+name+"&psd="+psd;            //给UIL装载请求数据  
  34.         HttpGet getRequest=new HttpGet(urlStr);                                 //实例化HttpGet,代表Get请求  
  35.         try {  
  36.               
  37.             HttpResponse response = httpClient.execute(getRequest);//发送Get请求,并获取响应  
  38.             if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)  
  39.             {  
  40.                 HttpEntity entity=response.getEntity();                             //获取响应信息实体  
  41.                 InputStream is= entity.getContent();                            //h.执行HttpEntity的getContent方法,获取对应的输入流  
  42.                 BufferedReader br = new BufferedReader(new InputStreamReader(is));
  43.                                                                                                  //i.读取输入流中的内容,并以字符串的形式返回        
  44.                 String readLine = null;  
  45.                 while((readLine = br.readLine()) != null )  
  46.                 {  
  47.                         result=result+readLine;  
  48.                 }  
  49.                 is.close();  
  50.             }  
  51.             else  
  52.             {  
  53.                 result="error";  
  54.             }  
  55.         }  
  56.         catch (IOException e)   
  57.         {  
  58.             System.out.println(e.getMessage());  
  59.         }  
  60.         return result;    
  61.     }  
  62. }
注:UserActivity在后面实现。

三、注册模块测试
(1)注册用户

(2)登录账户

(3)服务器数据库



源码:http://download.csdn.net/detail/u012637501/8683889

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值