Android——Tomcat+MySQL+Servlet,实现将Client传入的数据写入MySQL

Android客户端将用户的注册信息上传到Tomcat Web服务器,Servlet将注册信息写入到MySQL中。

1,准备工作

(1)在MySQL中创建好要使用的数据库和数据表。

(2)设置好Tomcat的数据库连接池。

参见Tomcat数据库连接池配置


2,Android客户端Activity和Layout的设计

(1)一个简单的注册界面,sign_layout.xml

sign_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true"
android:background="#ff6699cc"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

        <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#fffffffb"
        android:orientation="horizontal"
        android:padding="40dp" >

        <EditText
            android:id="@+id/etSgAccount"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="30dp"
            android:layout_marginBottom="20dp"
            android:hint="@string/Account"
            android:inputType="textEmailAddress" />

        <EditText
            android:id="@+id/etSgPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/etSgAccount"
            android:layout_marginBottom="20dp"
            android:hint="@string/Password"
            android:inputType="textPassword" />
         <EditText
            android:id="@+id/etSgRePassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/etSgPassword"
            android:layout_marginBottom="20dp"
            android:hint="@string/repassword"
            android:inputType="textPassword" />

        <Button
            android:id="@+id/btnSign"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/etSgRePassword"
            android:background="#ff6699cc"
            android:onClick="onLogin"
            android:text="@string/signup"
            android:textColor="#ffffffff"
            android:textSize="24sp" />
    </RelativeLayout>

</LinearLayout>

(2)编写对应的Activity——SignActivity.java

package com.bnutalk.activitytest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class SignActivity extends Activity {
    private EditText username;
    private EditText password;
    private Button signup;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sign_layout);
        username=(EditText) findViewById(R.id.etSgAccount);
        password=(EditText) findViewById(R.id.etSgPassword);
        signup=(Button) findViewById(R.id.btnSign);
    }
    /*发起HTTP请求*/
    public void onLogin(View v)
    {
        String url="http://172.22.140.237:8080/web/MysServlet";
        new HttpThread(url, username.getText().toString(), password.getText().toString()).start();
    }

}

其中的重要代码是函数onLogin,它表示当按下Signup按钮时,启动Http线程,向服务器发起Http请求。

/*发起HTTP请求*/
    public void onLogin(View v)
    {
    /*url要访问的Tomcat的Servlet地址,将ip换成Tomacat所在主机的ip*/
        String url="http://172.22.140.237:8080/web/MysServlet";

    /*调用访问网络的HttpThread*/
        new HttpThread(url, username.getText().toString(), password.getText().toString()).start();
    }

(3)新建一个Tread类——HttpTread

访问网络属于耗时操作,因此用一个单独的线程来实现。

package com.bnutalk.activitytest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.R.string;

public class HttpThread extends Thread {
    String url;
    String username;
    String password;

    public HttpThread(String url, String username, String password) {
        // TODO Auto-generated constructor stub
        this.url = url;
        this.username = username;
        this.password = password;
    }

    private void doGet() throws IOException {
        /*将username和password传给Tomcat服务器*/
        url=url+"?username="+username+"&password="+password;
        try {
            URL httpUrl = new URL(url);
            /*获取网络连接*/
            HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
            /*设置请求方法为GET方法*/
            conn.setRequestMethod("GET");
            /*设置访问超时时间*/
            conn.setReadTimeout(5000);
            BufferedReader reader=new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String str;
            StringBuffer sb=new StringBuffer();
            //读取服务器返回的信息
            while((str=reader.readLine())!=null)
            {
                sb.append(str);
            }
            //把服务端返回的数据打印出来
            System.out.println("result"+sb.toString());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    /*在run中调用doGet*/
    @Override
    public void run() {
        try {
            doGet();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

(4)在AndroidManifest.xml中添加网络访问权限

<uses-permission  android:name="android.permission.INTERNET"/>

如图:


3,Server和Servlet设置

(1)建立好一个server和一个web项目,在web下建立所需的Servlet

如图所示,注册用到的Servlet是MyServlet.java,请忽略LogServlet.java

(2)在web.xml中注册Servlet

<servlet>
        <servlet-name>DataServiceServlet</servlet-name>
        <servlet-class>com.imooc.servlet.MyServlet</servlet-class>
</servlet>
    <servlet-mapping>
        <servlet-name>DataServiceServlet</servlet-name>
        <url-pattern>/DataServiceServlet</url-pattern>
</servlet-mapping>

如图所示:

(3)编写MyServlet.java

package com.imooc.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import java.sql.*;

import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;

import org.apache.catalina.Context;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;

/**
 * Servlet implementation class MyServlet
 */
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public MyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
            /*获取请求的数据,并向控制台输出*/
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        PrintWriter out = response.getWriter();
        System.out.println("username" + "," + username);
        System.out.println("password" + "," + password);

        int rs ;
        String sql = "insert into bnutalk(id,username,psswd) values(3,?,?)";

        /*实现向MySQL中插入username和password*/
        try {
            InitialContext ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/t1");
            /*获得数据库的连接*/
            java.sql.Connection conn =ds.getConnection();
            conn = ds.getConnection();
            /*执行sql*/
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, username);
            ps.setString(2, password);
            rs= ps.executeUpdate();
        } catch (SQLException se) {
            System.out.println("SQLException: " + se.getMessage());
        } catch (NamingException ne) {
            System.out.println("NamingException: " + ne.getMessage());
        }
    }
}

4,运行

(1)运行web项目,run on server

(2)运行Android客户端

如图:



先看看此时数据表中的内容:


(3)注册一个用户

用户名和密码都是csdn



控制台输出:



再次查看数据表:

如果有看不懂的,可以先去补一补Servlet,Tomcat数据库连接池,MySQL,Thread这些基础知识,有个大概印象,最起码能知道其中的逻辑,大体框架,实现机制。脑海中一个框架图,再来看代码就很简单了。

时间: 2024-10-05 00:04:24

Android——Tomcat+MySQL+Servlet,实现将Client传入的数据写入MySQL的相关文章

PHP如何通过SQL语句将数据写入MySQL数据库呢?

1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect("localhost","root","");//连接MySQLmysql_select_db("hello");//选择数据库?> 当然,前提是已经安装WEB服务器.PHP和MySQL,并且建立MySQL表“webjx” mys

将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy

将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy [python] view plain copy print? import pandas as pd from sqlalchemy import create_engine ##将数据写入mysql的数据库,但需要先通过sqlalchemy.create_engine建立连接,且字符编码设置为utf8,否则有些latin字符不能处理 yconnect = create_engine('mysql+mysql

MySQL mysqlimport 从txt文件中导入数据到mysql数据库

mysqlimport: 我说这个我们还是先从世界观方法论的高度来理解一下便有更加准确的把握.数据导入不外呼有两个部分 第一部分:目标对象--我们要把数据导给谁(mysqlimport 的目标对象自然就是mysql数据库中的表了哦) 第二部分:数据源  -- 我们的数据的来源(下面的例子只来源是一个文本文件) 也就是说我给可以把mysqlimport 命令初步的写成 mysqlimport -uusername -p databasename tablename  filepath databa

SparkStreaming 写入数据到mysql

使用idea 编码 package streaming import java.sql.DriverManager import org.apache.spark.streaming.{Seconds, StreamingContext} import org.apache.spark.{SparkConf, SparkContext} object SvaeToMysql { def main(args: Array[String]): Unit = { val sparkConf = new

Scrapy基础(十二)————异步导出Item数据到Mysql中

异步导出数据到Mysql中 上次说过从Item中同步写入数据库,因为网络的下载速度和数据库的I/O速度是不一样的所以有可能会发生下载快,但是写入数据库速度慢,造成线程的堵塞:关于堵塞和非堵塞,同步和异步的关系,因为没接触过,所以也不是很好的理解,这里查看了些资料,已做记录 链接1:https://www.zhihu.com/question/19732473;http://wiki.jikexueyuan.com/project/twisted-intro/ 实现异步写入mysql数据库的思路:

JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)

背景: 目前业界很流行的MVC(model-view-control)开发模式,理解为 模型是Bean, 视图是 Html/Jsp, 控制是Servlet, 关联数据库的Dao web的运行机制: 数据首先在Jsp上被展示出来,用户看到页面后触发一些事件,并可能传递数据,这些数据和请求被控制器接收到,然后开始处理(往往会需要有一些数据库的操作(查询,修改数据库数据)),当这些处理结束后,我们就需要将数据反馈到JSP上显示给用户看,完成一次完整的交互过程. 正文: 根据背景所述的顺序,我们依次介绍

JSP、servlet、SQL三者之间的数据传递

JSP.servlet.SQL三者之间的数据传递 博客分类: web开发 JSPservletSQL数据库连接池web开发 前言: 最近一直在做WEB开发,现总结一下这一段时间的体会和感触. 切记,web开发重点在于前台数据交互,页面美化而不要太沉溺于底层数据. 浏览器时代来到,向我们召唤出更炫.更简洁.更方便.更大气的网站. 这篇博客目的在于为大家解决web开发中最基础的数据传递操作,让大家有一个好的起点,在web开放中更加游刃有余 背景: 目前业界很流行的WVC(model-view-con

数据集成通过JDBC将数据导入MySQL的几种模式

摘要: 目前MySQL JDBC提供了多种将数据写入MySQL的方式,本文将介绍数据集成(DataX.同步中心.原CDP)支持的几种模式: * insert into xxx values (..), (..), (..) * replace into xxx values (..), (..), (..) * insert into xxx values (..), (..), 目前MySQL JDBC提供了多种将数据写入MySQL的方式,本文将介绍数据集成(DataX.同步中心.原CDP)支

Spark操作dataFrame进行写入mysql,自定义sql的方式

业务场景: 现在项目中需要通过对spark对原始数据进行计算,然后将计算结果写入到mysql中,但是在写入的时候有个限制: 1.mysql中的目标表事先已经存在,并且当中存在主键,自增长的键id 2.在进行将dataFrame写入表的时候,id字段不允许手动写入,因为其实自增长的 要求: 1.写入数据库的时候,需要指定字段写入,也就是说,只指定部分字段写入 2.在写入数据库的时候,对于操作主键相同的记录要实现更新操作,非插入操作 分析: spark本身提供了对dataframe的写入数据库的操作