准备:IntelliJ IDEA 2022.1 (Ultimate Edition),Java 8, Tomcat 9.0.62, MySQL 8.0.26
1. 创建Java EE工程
Additional Libraries and Frameworks中选择Web Application

若没有Java EE,通过Ctrl+Alt+Shift+/调出Maintanence,单击Registry进入搜索javaee.legacy.project.wizard,在Value中选中,再新建工程即有Java EE选项。

2. 创建工程后,在WEB-INF目录下分别新建目录classes和lib

3. 设置classes目录为输出目录,并添加lib目录为依赖,如下图完成Paths和Dependencies设置


4. 以实现查询用户信息为例,使用如下SQL语句在MySQL中添加用户数据
create database serverjava;
use serverjava;
create table usertable(userId int, userPhone varchar(20), userName varchar(20), userPwd varchar(20));
insert into usertable values(1,'17612345678','zhangsan','123456'),(2,'15887654321','lisi','1234'),(3,'15812341234','wangwu','1235'); 
select * from usertable;
5. 选择c3p0和dbutils进行数据库连接,在lib目录中导入c3p0, commons-dbutils, mchange-commons-java, mysql-connector-java, mysql-connector-java-x.x.x-bin包(缺一不可), mysql-connector-java-x.x.x-bin包若无会导致实例化Servlet错误
 
 
jar包下载地址:
Maven Repository: Search/Browse/Explore (mvnrepository.com)
JAR Search - findJAR.com
6. 在src目录下创建数据库配置文件c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/serverjava?serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>
    </default-config>
</c3p0-config>由于mysql版本为8.0以上,<property name="driverClass">中com.mysql.jdbc.Driver需改为com.mysql.cj.jdbc.Driver;且需要设置CST,因此<property name="jdbcUrl">中数据库名serverjava后添加?serverTimezone=UTC(否则有可能会报错:caused by java.sql.sqlexception the server time zone value '?й???????' is unrecognized or represent)。
7. 在src目录下创建db包,并在包中新建JDBCUtils类
package db;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
    private static ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    public static Connection getConnection() throws SQLException{
        return comboPooledDataSource.getConnection();
    }
    public static DataSource getDataSource(){
        return comboPooledDataSource;
    }
    public static void release(ResultSet rs, Statement stmt, Connection conn){
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        release(stmt, conn);
    }
    public static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
}
8. 在db包中创建bean包,并在bean包中创建要操作表的bean类UserBean
package db.bean;
public class UserBean {
    private int userId;
    private String userPhone;
    private String userName;
    private String userPwd;
    public String getUserPhone() {
        return userPhone;
    }
    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserPwd() {
        return userPwd;
    }
    public void setUserPwd(String userPwd) {
        this.userPwd = userPwd;
    }
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
}9. 在src目录下新建Servlet包,并在包中创建DemoServlet类(继承HttpServlet),重写doGet和doPost两个方法以用于分别处理get请求和post请求,并实现查询数据库
package Servlet;
import db.JDBCUtils;
import db.bean.UserBean;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
public class DemoServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        System.out.println("account:" + account + "\npassword:" + password);
        String result = "Database reading error!";
        if (account == null) {
            result = "Account is null!";
        } else if (password.isEmpty()) {
            result = "Password is null!";
        } else {
            QueryRunner runner = new QueryRunner(JDBCUtils.getDataSource());
            String sql5 = "select * from usertable where userName="+"'"+account+"'";
            try {
                UserBean userBean = runner.<UserBean>query(sql5, new BeanHandler<UserBean>(UserBean.class));
                if (userBean != null) {
                    if (password.endsWith(userBean.getUserPwd())) {
                        result = "Login successful!";
                    } else {
                        result = "Password doesn't match account, login failed!";
                    }
                } else {
                    result = "Account does not exist!";
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        response.setContentType("text/html;charset=utf-8");
        PrintWriter pw = response.getWriter();
        pw.println(result);
        pw.flush();
    }
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        super.doPost(request, response);
    }
}
(account是String类型,SQL查询语句中需加引号)
10. 编辑web/WEB-INF/web.xml以对DemoServlet进行注册
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>DemoServlet</servlet-name>
        <servlet-class>Servlet.DemoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DemoServlet</servlet-name>
        <url-pattern>/DemoServlet</url-pattern>
    </servlet-mapping>
</web-app>或在声明DemoServlet前使用注解进行注册
@WebServlet(name="DemoServlet",urlPatterns="/DemoServlet")
public class DemoServlet extends HttpServlet {
//fields and methods
}11. 配置Tomcat
Edit SignConfigurations->"+"->tomcat service->local,URL可做修改(若不修改显示的会是index.jsp中内容)

12. 运行

将域名修改为(用户名与密码匹配)localhost:8080/GJPServlet_war_exploded/DemoServlet?account=lisi&password=1234

若密码错误localhost:8080/GJPServlet_war_exploded/DemoServlet?account=lisi&password=1235

参考:用IDEA进行Java后台开发(一)_小小9575的博客-CSDN博客_idea java开发










