Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)

Tomcat + Servlet 实现Android后端开发,实现一个简单的注册功能
这只是一个简单的测试项目,具体实现还需要自己学习,为创建Android后端项目提供一个思路,目前网上大多教程的开发环境都是Eclipse EE 或者过时很久,这是基于其他的教程所编写的一个开发流程,留作记录。

1.准备工作

开发工具:Android Studio + IDEA 2020
JDK版本: jdk11
数据库:MySQL 8.0.22
数据库可视化软件:Navicat Premium 15
服务器:Tomcat 10

(1)App写出基础框架
用异步任务发送Http请求,用get和post方法
(2)配置上述软件的环境变量

2.创建项目

1. 新建一个IDEA项目
选择Maven,从原型创建,选择webapp,然后Next创建(A simple Java web application)
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第1张图片
2.自动生成的项目结构如下
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第2张图片
右键main新建文件夹,同时创建两个文件夹,java文件夹用来放项目代码,resource文件夹用来放资源文件
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第3张图片

3.修改pom.xml中的项目依赖
将Maven的jdk版本改为自己安装的jdk版本

  
    UTF-8
    11
    11
  

在 dependencies中添加依赖mysql-connector-java,根据自己的mysql版本选择对应的版本

  
    
      junit
      junit
      4.11
      test
    
    
      mysql
      mysql-connector-java
      8.0.22
    
  

点击右上角按钮,加载 Maven变更
在这里插入图片描述
4.添加项目依赖
打开项目结构,选择Tomcat项目依赖
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第4张图片

3.编写Servlet代码

1.在main/java文件夹下创建一个Servlet包,新建一个.class文件继承于HttpServlet并重写doGet和doPost方法
resp.setContentType(“text/html;charset=utf-8”); // 设置响应报文的编码格式,避免出现中文乱码的情况

package Servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String account = req.getParameter("account"); // 从 request 中获取名为 account 的参数的值
        String password = req.getParameter("password"); // 从 request 中获取名为 password 的参数的值
        System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看

        String result = "";
        if("abc".equals(account)
                && "123".equals(password)){ // 模拟登陆账号、密码验证
            result = "Login Success! 成功了";
        }else {
            result = "Sorry! Account or password error.";
        }
        /* 这里我们只是模拟了一个最简单的业务逻辑,当然,你的实际业务可以相当复杂 */

        resp.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
        PrintWriter pw = resp.getWriter(); // 获取 response 的输出流
        pw.println(result); // 通过输出流把业务逻辑的结果输出
        pw.flush();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

2.在web.xml中添加Servlet
在url-pattern中一定注意加“/”,这是访问Servlet的路径


  Archetype Created Web Application
  
    test
    Servlet.TestServlet
  
  
    test
    /test
  

3.编辑配置
点击左上角+号,选择Tomcat本地服务器,点击部署,选择添加工件,点击确定保存
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第5张图片
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第6张图片

Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第7张图片
4.运行项目

如果Tomcat的log出现中文乱码,就打开tomcat安装目录的conf文件夹,打开logging.properties文件,将里面的编码格式改为GBK
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第8张图片

服务器启动成功,会自动弹出初始网页,就是项目中的web.jsp,在地址栏输入:

http://localhost:8080/ss_war_exploded/test?account=abc&password=123

http://localhost:8080/ss_war_exploded/就是初始网页,后面跟/test就是访问上文所写的TestServlet,问号后面跟的是request参数

出现下面的文字表示访问成功
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第9张图片
至此,Tomcat服务器的访问就没有问题了,接下来是数据库的连接

4.编写数据库代码

1.用Navicat连接MySQL数据库,写连接名,输入mysql的密码,测试连接,连接成功就确定保存
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第10张图片

2.新建一个数据库fistmysql两个用户表user_login和user_info
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第11张图片
user_info表
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第12张图片
user_login表

Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第13张图片

3.在java文件夹下新建一个db包,新建一个DBUtil类,用来连接数据库

根据自己的mysql版本选择对应的Driver
可以参考菜鸟教程的连接方法:https://www.runoob.com/java/java-mysql-connect.html

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBUtil {
    // table
    public static final String TABLE_PASSWORD = "user_login";
    public static final String TABLE_USERINFO = "user_info";

    public static Connection getConnect() {
        String url="jdbc:mysql://localhost:3306/fistmysql?&useSSL=false&serverTimezone=UTC"; // 数据库的Url
        Connection connecter = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver"); // java反射,固定写法
            connecter = DriverManager.getConnection(url, "root", "1997");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("VendorError: " + e.getErrorCode());
        }
        return connecter;
    }
}

4.新建一个注册Servlet来测试数据库

package Servlet;

import db.DBUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

public class RegisterServlet extends HttpServlet {


    public RegisterServlet() {
        super();
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String account = request.getParameter("account"); // 从 request 中获取名为 account 的参数的值
        String password = request.getParameter("password"); // 从 request 中获取名为 password 的参数的值
        System.out.println("account:" + account + "\npassword:" + password); // 打印出来看一看

        String resCode = "";
        String resMsg = "";
        String userId = "";


        /* 这里我们做一个最简单的注册逻辑,当然,你的实际业务可以相当复杂 */
        try {
            Connection connect = DBUtil.getConnect();
            Statement statement = connect.createStatement(); // Statement可以理解为数据库操作实例,对数据库的所有操作都通过它来实现
            ResultSet result;

            String sqlQuery = "select * from " + DBUtil.TABLE_PASSWORD + " where account='" + account + "'";

            // 查询类操作返回一个ResultSet集合,没有查到结果时ResultSet的长度为0
            result = statement.executeQuery(sqlQuery); // 先查询同样的账号(比如手机号)是否存在
            if(result.next()){ // 已存在
                resCode = "201";
                resMsg = "该账号已注册,请使用此账号直接登录或使用其他账号注册";
                userId = "";
            } else { // 不存在
                String sqlInsertPass = "insert into " + DBUtil.TABLE_PASSWORD + "(account,password) values('"+account+"','"+password+"')";
                // 更新类操作返回一个int类型的值,代表该操作影响到的行数
                int row1 = statement.executeUpdate(sqlInsertPass); // 插入帐号密码
                if(row1 == 1){
                    String sqlQueryId = "select userId from " + DBUtil.TABLE_PASSWORD + " where account='" + account + "'";
                    ResultSet result2 = statement.executeQuery(sqlQueryId); // 查询新增记录的userId
                    if(result2.next()){
                        userId = result2.getInt("userId") + "";
                    }
                    String sqlInsertInfo = "insert into " + DBUtil.TABLE_USERINFO + "(userId) values('" + userId + "')";
                    int row2 = statement.executeUpdate(sqlInsertInfo); // 在用户信息表中插入刚注册的Id
                    if(row2 == 1){ // 两个表中都插入成功,从业务角度认定为注册成功
                        resCode = "100";
                        resMsg = "注册成功";
                    }
                } else {
                    resCode = "202";
                    resMsg = "用户信息表插入错误";
                    userId = "";
                }
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        HashMap map = new HashMap<>();
        map.put("resCode", resCode);
        map.put("resMsg", resMsg);
        map.put("userId", userId);

        response.setContentType("text/html;charset=utf-8"); // 设置响应报文的编码格式
        PrintWriter pw = response.getWriter(); // 获取 response 的输出流
        pw.println(map.toString()); // 通过输出流把业务逻辑的结果输出
        pw.flush();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

5.同样的,在web.xml中添加这个Servlet


  Archetype Created Web Application
  
    test
    Servlet.TestServlet
  
  
    register
    Servlet.RegisterServlet
  
  
    register
    /reg
  
  
    test
    /test
  


6.运行项目,在浏览器输入

http://localhost:8080/ss_war_exploded/reg?account=root&password=123

Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第14张图片
注册成功,刷新一下Navicat中的数据,可以看到数据已经被添加到数据库中
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第15张图片
再一次刷新浏览器,相当于再一次提交GET请求,对于同一个账号,就会注册失败
Android后端的项目创建流程(IDEA2020 + Tomcat 10 + JDK11)_第16张图片
至此,mysql数据库也就连接成功

你可能感兴趣的:(servlet,mysql,java)