文章都是原创文章,配图来源于网络或者小编,如遇侵权,请联系小编,认准微信公众号:“阿祁爱编程” !
点击上方
蓝字
关注我们
文章都是原创文章,配图来源于网络或者小编,如遇侵权,请联系小编,认准微信公众号:“阿祁爱编程” !
使用JDBC连接数据库进行用户注册
1.环境介绍
电脑:联想小新
软件:Eclipse
JDK版本:1.8
Tomcat版本:8.5
2. 背景
我们平时能够登陆是因为我们注册过,所以可以输入账号密码进行登陆,这次我们基于上一个登陆页面来写注册页面以及后台,顺便连接上我们的数据库将注册信息保存在数据库中。
3. 正文
首先,我们来理一理注册的步骤
我们首先要写一个注册的jsp页面
我们需要写一个servlet后台,用来处理注册功能
在后台我们要讲传过来的值存放在数据库中
注册完跳转到登陆页面,然后进行登陆以及判断
登陆成功展示个人信息
我们来实现第一步,写一个注册的jsp页面
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>注册页面</title>
<style>
*{
margin: 0;
padding: 0;
outline: none;
box-sizing: border-box;
}
html{
height: 100%;
background: linear-gradient(to bottom, #acb6e5, #86fde8);
display: flex;
justify-content: center;
align-items: center;
}
p {
text-align: center;
font-size: 34px;
font-weight: bold;
margin-bottom: 20px;
letter-spacing: 10px;
}
form {
width: 600px;
font-size: 17px;
color: #434343;
font-family: "微软雅黑";
font-weight: 500;
background: rgba(230,255,251,0.4);
padding: 40px 110px;
border-radius: 20px;
box-shadow: 0 0 10px #d9d9d9;
}
label {
height: 40px;
line-height: 40px;
display: block;
}
span {
display: inline-block;
width: 80px;
text-align: center;
}
input,select{
height: 30px;
width:250px;
border-radius: 10px;
padding-left: 10px;
border: 1px solid #ffffff;
color: #434343;
}
input:hover,select:hover{
border: 1px solid #1890ff;
box-shadow: 0 0 5px #1890ff;
}
input[type="radio"]{
width: 20px;
height:13px;
vertical-align:center;
margin-left: 10px;
}
.submit{
border: 1px solid #1890ff;
background: #1890ff;
text-align: center;
width: 150px;
margin-left: 110px;
margin-top: 30px;
height: 40px;
letter-spacing: 10px;
color: #ffffff;
}
</style>
</head>
<body>
<form action="/Demo01/register" method="post" onsubmit="show()">
<p>注册页面</p>
<label class="user">
<span>账 号:</span>
<input type="text" name="user" placeholder="请输入账号">
</label>
<label class="pass">
<span>密 码:</span>
<input type="password" name="pass" placeholder="请输入密码">
</label>
<label class="name">
<span>姓 名:</span>
<input type="text" name="name" placeholder="请输入姓名">
</label>
<label class="sex">
<span>性 别:</span>
男<input type="radio" name="sex" value="male">
女<input type="radio" name="sex" value="female">
</label>
<label class="age">
<span>年 龄:</span>
<input type="text" name="age" placeholder="请输入年龄">
</label>
<label class="tel">
<span>手机号:</span>
<input type="text" name="telephone" placeholder="请输入手机号">
</label>
<label class="address">
<span>地 址:</span>
<input type="text" name="address" placeholder="请输入地址">
</label>
<label class="职业">
<span>职 业:</span>
<select name="job">
<option value="teacher">教师</option>
<option value="Programmer">程序员</option>
<option value="boss">老板</option>
</select>
</label>
<input class="submit" type="submit" value="注册"/>
</form>
<script type="text/javascript">
function show() {
alert("提交表单!")
}
</script>
</body>
</html>
写完以后我们去查看页面有没有成功,在地址栏输入localhost:8080/Demo01/views/register.jsp
然后第二步,我们去写处理注册功能的servlet,继承HttpServlet,重写doGet和doPost方法
第三步,连接数据库,把表单里的数据提交到数据库中,然后跳转到登陆页面。
package top.wangqi2020.demo;
import java.awt.print.Printable;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import top.wangqi2020.utils.JdbcUtils;
public class UserServlet02 extends HttpServlet{
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//修改接受和返回的编码格式
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
//连接数据库 获取连接对象
connection = JdbcUtils.getConnection();
//编写sql
String sql = "insert into t_user1(user,pass,name,sex,age,tele,address,job) values(?,?,?,?,?,?,?,?)";
//获取执行对象
preparedStatement = connection.prepareStatement(sql);
//给对象赋值
preparedStatement.setString(1, req.getParameter("user"));
preparedStatement.setString(2, req.getParameter("pass"));
preparedStatement.setString(3, req.getParameter("name"));
preparedStatement.setString(4, req.getParameter("sex"));
preparedStatement.setInt(5, Integer.parseInt(req.getParameter("age")));
preparedStatement.setString(6, req.getParameter("telephone"));
preparedStatement.setString(7, req.getParameter("address"));
preparedStatement.setString(8, req.getParameter("job"));
//执行sql
int count = preparedStatement.executeUpdate();
String msg = "";
if (count > 0) {
msg = "注册成功!";
System.out.println("注册成功!");
}else {
msg = "注册失败!";
System.out.println("注册失败!");
}
//设置给前端返回的信息
req.setAttribute("msg", msg);
//resp.sendRedirect("/Demo01/"); 跳转到注册状态页面
req.getRequestDispatcher("views/error.jsp").forward(req, resp);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(connection, preparedStatement);
}
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(req, resp);
}
}
我们还要在index.jsp中写一个跳转到注册页面的a标签
第四步,把UserServlet01中的doGet方法重新写一下,从数据库拿值来进行比较,跳转对应的页面
UserServlet01,处理登录请求
package top.wangqi2020.demo;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import top.wangqi2020.utils.JdbcUtils;
/**
* Servlet implementation class UserServlet01
*/
//@WebServlet("/UserServlet01")
public class UserServlet01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public UserServlet01() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改接受和返回的编码格式
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet rs = null;
try {
//连接数据库 获取连接对象
connection = JdbcUtils.getConnection();
String sql = "select * from t_user1 where user=? and pass=?";
preparedStatement = connection.prepareStatement(sql);
String username = request.getParameter("username");
preparedStatement.setString(1, username);
preparedStatement.setString(2, request.getParameter("password"));
rs = preparedStatement.executeQuery();
if (rs.next()) {
request.setAttribute("username", rs.getString("name"));
//如果数据库中有数据,就跳转页面
request.getRequestDispatcher("views/success.jsp").forward(request, response);
}else {
// request.getRequestDispatcher("index.jsp").forward(request, response);
request.setAttribute("msg", "账户名或密码错误!");
request.getRequestDispatcher("views/error.jsp").forward(request, response);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
JdbcUtils.close(connection, preparedStatement);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
this.doGet(request, response);
}
}
当登录失败进入失败页面
当登录成功进入用户界面
第五步,展示个人信息,从数据库拿值,通过user账户名获取到id值,通过id拿值,展示出来,这里我简单写,只拿到了用户姓名
4. 补充
在这里补充一下,当我们正常操作时,不会出现问题,但是当我们登录时传的是空值,或者注册的时候传的值时空的,那么会出现以下错误!
所以我们这里需要try catch异常,然后处理异常
我们打开处理注册页面的servlet02
5. 结语
这个文章可能讲的有点模糊,但是一定要自己理解是什么意思,而且要能知道步骤,后边我会录屏具体讲一下
下边就是完成以后的效果
点个在看,你最好看