zoukankan      html  css  js  c++  java
  • android与javaee通信:登录界面超级简化版

    今天完成了利用android和tomcat服务器完成了简单界面的通信。

    主要就是用户输入id和密码,界面显示登录成功还是失败。

    昨天完成代码后,尚未来得及调试,今天通过调试,发现了以下几点错误:

    1.测试的时候忘了启动tomcat服务器(好吧这是一个很蠢的错误。。)

    2.客户端设置的编码格式中的"UTF-8"写成了"UTF_8"(好吧我知道这也很蠢。。。)

    3.传送数据的时候服务端返回的数据和客户端接收数据的格式不一致,导致了乱码。

    4.试图在新开的用于访问网络的线程中更改客户端显示界面导致错误。

    通过调试,成功的解决了这些问题,最后实现了简化登录。实现步骤大致如下:

    1》在数据库中建立用户表(我只设置了id,password参数)

    2》在java ee中新建java类user

    3>在user中写出获取用户信息的方法以便在servlet中调用(部分代码)

    public int findUser(int id,String password) throws ClassNotFoundException, SQLException{
    //建立和数据库的链接,查找用户是否存在

    Class.forName("com.mysql.jdbc.Driver");

    //这里填入信息即可
    String dbName = "";
    String tableName = "r";
    String user = "";
    String mysql_password = "i";

    String url = "jdbc:mysql://localhost:3306/" + dbName + "?user="
    +user + "&password=" + mysql_password;

    Connection conn = (Connection) DriverManager.getConnection(url);

    //获取数据库数据,执行查询操作
    Statement statement = (Statement) conn.createStatement();

    String sql = "select * from " + tableName;

    ResultSet rs = (ResultSet) statement.executeQuery(sql);

    //存在状态量标志,1代表存在,0代表不存在
    int exist = 0;

    while(rs.next()){
    int user_name = rs.getInt(1);
    String user_password = rs.getString(2);
    if(user_name == id && user_password.equals(password)){
    exist = 1;
    break;
    }

    }
    return exist;
    }

    4》新建servlet文件,写入响应及回复代码(部分代码):

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/json;charset=UTF-8");
    String reqMessage,respMessage;
    BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));
    StringBuffer sb = new StringBuffer("");
    String temp;
    while((temp = br.readLine()) != null){
    sb.append(temp);
    }
    br.close();

    reqMessage = sb.toString();
    JSONArray jsonArray = JSONArray.fromObject(reqMessage);
    JSONObject data = (JSONObject)jsonArray.get(0);
    int user_id = data.getInt("id");
    String user_password = data.getString("password");
    user u = new user();
    int exist = 0;
    try {
    exist = u.findUser(user_id, user_password);
    } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    PrintWriter pw = response.getWriter();
    pw.write(exist+"");
    pw.flush();
    pw.close();

    }

    至此,服务端的代码就基本完成啦,然后就是客户端的代码了。

    客户端的核心代码如下(部分代码):

    HttpParams httpParams = new BasicHttpParams();
    HttpClient hc = new DefaultHttpClient(httpParams);
    String addr = "http://172.16.121.16:8080/xiangyue/loginServlet";
    HttpPost hp = new HttpPost(addr);
    System.out.println("连接成功!");
    System.out.println(reqValue);
    try {
    hp.setEntity(new StringEntity(reqValue.toString(),"UTF-8"));
    HttpResponse hr = hc.execute(hp);

    if(hr.getStatusLine().getStatusCode() == 200){
    returnValue = EntityUtils.toString(hr.getEntity(),"UTF-8");
    System.out.println(returnValue);
    if(returnValue.equals("1")){
    // System.out.println("登录成功!");
    // Toast.makeText(MainActivity.this,"登录成功!",Toast.LENGTH_LONG).show();
    exist = 1;
    }
    else{
    // System.out.println("此用户不存在!");
    // Toast.makeText(MainActivity.this,"用户名或密码错误!",Toast.LENGTH_LONG).show();
    exist = 0;
    }
    }else{
    System.out.println("响应失败!");
    }
    } catch (UnsupportedEncodingException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    } catch (ClientProtocolException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }

    至此核心代码就完成了,稍微添加界面什么的就可以进行测试了(所需包需全部成功导入,环境配置完成)。如果有什么需要修改优化的地方,望大神指教~

  • 相关阅读:
    第01篇 说一下Setting,我一直没有讲过
    簡單委託介紹
    委託和事件
    wcf
    網站和項目的發佈問題
    jquery和js使用技巧
    js中String.prototype.format類似于.net中的string.formitz效果
    [剑指Offer] 6.旋转数组的最小数字(二分法)
    [剑指Offer] 5.用两个栈实现队列
    [剑指Offer] 4.重建二叉树
  • 原文地址:https://www.cnblogs.com/wangsihui1996/p/5399563.html
Copyright © 2011-2022 走看看