0
点赞
收藏
分享

微信扫一扫

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

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

准备: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 条评论