用 Servlet、JDBC、Maven完成最基础的web项目,实现增删改查功能使用IDEA编译
主要功能
1.用户注册
2.用户登录
3.用户列表展示
4.用户信息修改
5.用户信息删除
整体架构
1.新建mysql表
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`pwd` varchar(255) NOT NULL,
`sex` varchar(255) NOT NULL,
`home` varchar(255) NOT NULL,
`info` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
/*添加两个值用于测试*/
INSERT INTO `user` VALUES ('1', '小明', '123', '男', '北京', '鹅鹅鹅!');
INSERT INTO `user` VALUES ('2', '小强', '123456', '男', '北京', '我家住东北a!');
2.IDEA新建maven项目
3.整理pom.xml文件
导入需要使用的依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 1.数据库连接包 mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- 2.servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- taglib prefix="c" jsp 支持包-->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
<!--4. jstl 支持包 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- 6.lombok 数据库包 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
4.过滤器
作用:过滤所有页面解决乱码问题
注意:在web.xml里注册
package com.filter;
import javax.servlet.*;
import java.io.IOException;
public class EncodingFilter implements Filter {
public EncodingFilter() {
System.out.println("执行过滤器");
}
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
filterChain.doFilter(request, response);
}
public void destroy() {
}
}
5.实体类User
作用:映射数据库创建的user表
注意:这里我使用到了lombok包,需要先下载lombok插件再在pom.xml里导入lombok依赖,在方法上加上**@Data**就会生成这个类所有属性的setter和getter方法,在左侧Structure里可以看到生成的方法,也可以手动生成setter和getter方法,二者没区别
package com.entiy;
import lombok.Data;
@Data
public class User {
private int id;
private String name;
private String pwd;
private String sex;
private String home;
private String info;
}
6.数据库工具类DBCoon
作用:用于连接数据库,执行SQL语句和返回执行结果
注:我使用了PreparedStatement 预编译SQL方法通过遍历Object数组的方式传递SQL参数,
package com.util;
import java.sql.*;
/*数据库工具类:
* 1.连接数据库
* 2.增删改查
* 3.执行SQL语句并返回执行结果
* 4.关流
* */
public class DBCoon {
//serverTimezone=UTC设置连接时区,不设置可能会报时区错误
static String url = "jdbc:mysql://localhost:3306/vip05?serverTimezone=UTC" +
"&useUnicode=true&characterEncoding=utf-8";
static String username = "root";
static String password = "123456";
static Connection conn = null;
static ResultSet rs = null;
static PreparedStatement ps = null;
/*连接数据库*/
public static void init() {
try {
/*1.加载驱动获得驱动管理器*/
Class.forName("com.mysql.jdbc.Driver");
/*2.连接数据库*/
conn = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功");
} catch (Exception e) {
e.printStackTrace();
System.out.println("数据库连接失败");
}
}
/*查询数据(传递参数)*/
public static ResultSet searchSql(String sql, Object[] args) {
try {
ps = conn.prepareStatement(sql);
for (int j = 0; j < args.length; j++) {
ps.setObject(j + 1, args[j]);
}
rs = ps.executeQuery();
System.out.println("数据查询成功");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("数据查询失败");
}
return rs;
}
/*增删改查数据(传递参数)*/
public static int addUpdDel(String sql, Object[] args) {
int i = 0;
try {
ps = conn.prepareStatement(sql);
for (int j = 0; j < args.length; j++) {
ps.setObject(j +