步骤
一、创建数据库和表并执行查询操作
-- 判断存在即删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
-- 使用数据库
use mydb;
-- 删除重复的表
drop table if exists t_user;
-- 创建t_user表
create table t_user(
uid int primary key auto_increment,
username varchar(20),
password varchar(20),
phone varchar(11),
address varchar(50)
);
-- 新增
insert into t_user(username,password,phone,address)values('张三','666','18965423548','南阳');
insert into t_user(username,password,phone,address)values('李四','333','18754263548','许昌');
insert into t_user(username,password,phone,address)values('小美','123','18565234759','信阳');
-- 查询
#select * from t_user where username=? and password=?
select * from t_user;
-- 创建t_goods表
create table t_goods(
gid int primary key auto_increment,
gname varchar(20),
price double,
mark varchar(200)
);
-- 新增
insert into t_goods(gname,price,mark) values('泡面',4.5,'够香够辣就是这个味!');
insert into t_goods(gname,price,mark) values('火腿',8.5,'肉质细腻Q弹!');
insert into t_goods(gname,price,mark) values('雪碧',3.5,'清爽冰凉随心爽!');
-- 查询
select * from t_goods;
二、创建两个与表名相似的实体类User和Goods
package com.chen.bean;
public class User {
private Integer uid;
private String username;
private String password;
private String phone;
private String address;
//无参构造函数
public User() {
}
//set和get方法
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//toString方法
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
'}';
}
}
package com.chen.bean;
public class Goods {
private Integer gid;
private String gname;
private Double price;
private String mark;
//无参构造函数
public Goods() {
}
//set和get方法
public Integer getGid() {
return gid;
}
public void setGid(Integer gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
//toString方法
@Override
public String toString() {
return "Goods{" +
"gid=" + gid +
", gname='" + gname + '\'' +
", price=" + price +
", mark='" + mark + '\'' +
'}';
}
}
三、登录操作
index.jsp页面
<html>
<head>
<title>第一个Web项目</title>
</head>
<body>
<h2>欢迎学习Java Web!</h2>
<a href="login.jsp">去登录</a>
</body>
</html>
login.jsp页面
<html>
<head>
<title>登录页</title>
</head>
<body>
<h2>登录</h2>
<!--action是表单要提交的地址 method表单提交的方式 -->
<form action="login" method="post">
账户:<input type="text" name="username" value=""> <br>
密码:<input type="password" name="password" value=""> <br>
<input type="submit" value="登录">
</form>
</body>
zhuye.jsp页面
<html>
<head>
<title>主页</title>
</head>
<body>
<h2>欢迎来到主页!</h2>
</body>
</html>
error.jsp页面
<html>
<head>
<title>错误页</title>
</head>
<body>
<h2>出错啦!</h2>
<a href="login.jsp">返回登录</a>
</body>
</html>
使用JDBC完成登录
1.设置请求和响应的编码
package com.chen.servlet;
import com.chen.bean.User;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Login extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.设置请求和响应的编码
request.setCharacterEncoding("utf-8");//设置请求的编码格式
response.setCharacterEncoding("utf-8");//设置响应的编码格式
response.setContentType("text/html;charset=UTF-8");//设置响应的格式为:文本/html;中文编码
}
}
2.获取请求参数
//2.获取请求参数
String username = request.getParameter("username");//根据表单的name属性获取用户输入的值
String password = request.getParameter("password");
System.out.println(username);
System.out.println(password);
3.业务处理-JDBC
3.1、加载驱动包
3.2、获得数据库连接对象
3.3、定义sql语句
3.4、获取预处理对象
3.5、传参
3.6、执行sql语句
3.7、结果集处理
3.8、关闭资源
//3.业务处理-JDBC
Connection con = null;
PreparedStatement pstm = null;
ResultSet rs = null;
User login = null;
try{
//1.加载驱动包
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获得数据库连接对象
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC","root","root");
//3.定义sql语句
String sql = "select * from t_user where username=? and password=?";
//4.获取预处理对象
pstm = con.prepareStatement(sql);
//5.传参
pstm.setObject(1,username);
pstm.setObject(2,password);
//6.执行sql语句
rs = pstm.executeQuery();
//7.结果集处理
if(rs.next()){
login = new User();
//从结果集中获取数据,然后封装到实体类对象中
login.setUid(rs.getInt("uid"));
login.setUsername(rs.getString("username"));
login.setPassword(rs.getString("password"));
login.setPhone(rs.getString("phone"));
login.setAddress(rs.getString("address"));
}
}catch(Exception e){
e.printStackTrace();
}finally{
//8.关闭资源
try{
if(rs!=null){
rs.close();
}
if(pstm!=null){
pstm.close();
}
if(con!=null){
con.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
4.判断业务处理结果,给前端做出响应
//4.判断业务处理结果,给前端做出响应
if(login!=null){
//登录成功
response.sendRedirect("zhuye.jsp");
}else{
//登录失败
response.sendRedirect("error.jsp");
}
运行后的浏览器页面
控制台页面