0
点赞
收藏
分享

微信扫一扫

Java后端开发之Servlet连接MySQL(使用IDEA)

快乐小码农 2022-04-18 阅读 72

准备: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开发

举报

相关推荐

0 条评论