Jsp、Servlet、MySQL实现网页注册、查找账号操作
作者想说的话
本篇作品为自己为了学业所做作业,如果有帮助到你,一起加油。如果有什么说错的,因为本人也没查什么资料,纯凭自我理解的,还请见谅。
(Tomcat连接、部署、JavaWeb项目初始创建部署请查看之前的博客,文章地址:https://blog.csdn.net/Zzve_Takui/article/details/107030034)
环境配置要求
1、IDEA(本人用的是2019.2,大家可下载别的新版本)
2、JDK1.8(推荐用此版本)
3、Tomcat 8.5.32
下载链接:https://pan.baidu.com/s/1E_Pnnnhu3usyXVwcMjPXwA
提取码:1i8j
4、Navicat for MySQL
下载链接:https://pan.baidu.com/s/1uXImn-3UrE4TVEAXzq67MA
提取码:j2fd
5、MySQL Server(这边是用的是5.7.10,最好版本号是5开头)
具体上述软件的安装使用配置,等后期有空了会补上推文的,真的猴急可以私聊我啊。
Navicat for MySQL安装破解
1、安装
傻瓜式安装一键到位,按下一步就完事了
2、破解
安装完毕后双击压缩包中的另外一个程序
根据如下图片选择路径,点击打开,破解完毕!
创建user数据表
关于MySQL安装,其他人的博客写的更加详细,可以查看,这边后期可能会写一篇关于MySQL安装的博客。
1、新建数据库(此处创建test数据库)
打开安装好的Navicat for MySQL
2、新建user表
填写如下数据
新建成功!!
填写数据
项目新建各种文件夹及其介绍
(注意:本次项目为上篇文章的延续,具体项目创建、搭建可看上篇文章,文章地址:https://blog.csdn.net/Zzve_Takui/article/details/107030034)
开始编写项目
前期准备
1、添加依赖包
jstl 1.2依赖包
下载链接:https://pan.baidu.com/s/1yXk2G1jJxHTjaDa-Af_UGQ
提取码:7qw4
mysql-connector-java-5.1.47-bin依赖包
下载链接:https://pan.baidu.com/s/1a7nK6FCMM4l3ZIDaZ-abcw
提取码:q9pn
2、启动依赖包
jsp网页编写
1、添加账户网页
代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注册页面</title>
</head>
<body>
<form action="/add?method=save" method="post">
name:<input name="name" type="text">
password:<input name="password" type="password">
age:<input name="age" type="text">
<input type="submit" value="注册">
</form>
</body>
</html>
2、查询账户网页
代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查询</title>
</head>
<body>
<form action="/add?method=search" method="post">
<input type="text" name="name" placeholder="请输入需要查找的名字">
<input type="submit" value="查找">
</form>
</body>
</html>
3、页面跳转
记得在index.jsp主页添加两个a标签实现跳转。
类的编写
1、编写数据库连接(utill)类编写
数据库连接类中应包括连接方法getConnection(),以及使用结束后的关闭方法closeAll()。
代码如下:
package com.util;
import java.sql.*;
public class DBUtil {
//数据库连接方法
public static Connection getConnection() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("连接数据库");
//创建连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/abc?useSSL=false", "root", "123456");
return conn;
}
//关闭接口方法
public static void closeAll(ResultSet rs, Statement stmt, Connection conn) throws SQLException {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
}
2、底层(modle)实体类编写
实体类即为,数据库中表元素为被调用,所需封装在java类中的对象。
我们需要:
1、添加类中的对象及其属性
2、创建get、set方法
3、重写toString()方法
3、底层(dao)操作执行方法类编写
操作方法执行类,需要添加对数据库执行操作的方法,其中应该包括:添加账户、账户查询(用于登录)。
类代码如下:
package com.dao;
import com.modle.User;
import com.util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDao {
public int add(User user) throws SQLException {
Connection connection = null;
PreparedStatement pstmt = null;
int count = 0;
try {
connection = DBUtil.getConnection(); //创建数据库连接
//获得执行sql语句的Statement对象
pstmt = connection.prepareStatement("INSERT into user(name,password,age) values (?,?,?)");
pstmt.setString(1, user.getName());
pstmt.setString(2, user.getPassword());
pstmt.setString(3, user.getAge());
//上方执行sql语句后,返回结果
count = pstmt.executeUpdate();
System.out.println("add操作:" + count);
return count;
} catch (Exception e) {
e.printStackTrace(); //异常抛出
} finally {
DBUtil.closeAll(null, pstmt, connection); //最后finally关闭所有创建的接口
}
return count;
}
public User selectByName(String name) {
ResultSet rs = null;
Connection connection = null;
PreparedStatement pstmt = null;
DBUtil util = new DBUtil();
User user = new User();
try {
connection = util.getConnection();
pstmt = connection.prepareStatement("select * from user where name = ?");
pstmt.setString(1, name);
rs = pstmt.executeQuery();
//处理结果集
while (rs.next()) {
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPassword(rs.getString(3));
user.setAge(rs.getString(4));
}
return user;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
util.closeAll(rs, pstmt, connection);
} catch (SQLException e) {
e.printStackTrace();
}
}
return user;
}
}
4、逻辑层(Service)类编写
逻辑层就是三层架构中的一个概念,简单来说就是找个地方执行底层数据库操作类的一个地方,别问为什么要多此一举,和你吃了饭之后才去上厕所一个道理。
5、中间层(Servlet)实现层类编写
实现层代码包括了dopost主要执行模块、自定义添加方法insert、自定义查询方法search。
其中dopost主要执行模块中主要是通过从jsp页面中接受method所传输出来的字段值,来判断操作是添加还是查询。
代码如下:
package com.Servlet;
import com.service.UserService;
import com.modle.User;
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.sql.SQLException;
public class AddServlet extends HttpServlet {
UserService userService = new UserService();
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行了doPost");
String method = req.getParameter("method"); //语句意思:从jsp页面中接受名为method的字段值
if (method.equals("save")) { //如若传进来的method字段置为save,则使用添加方法
try {
insert(req, resp);
} catch (SQLException e) {
e.printStackTrace();
}
} else if (method.equals("search")) { //如若传进来的method字段置为search,则使用search方法
try {
search(req, resp);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public void insert(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException {
User user = new User();
//将提交上来的表单元素输入给user
user.setName(req.getParameter("name"));
user.setPassword(req.getParameter("password"));
user.setAge(req.getParameter("age"));
System.out.println(user);
//add方法成功后将传出1,对其捕获
int count = userService.add(user);
if (count > 0) {
resp.sendRedirect("/index.jsp"); //成功则跳转至首页
} else {
resp.getWriter().write("<h2>Failed!</h2>"); //失败则添加一个h2标签
}
}
public void search(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException, SQLException {
//撰写编码格式,防止中文乱码
resp.setContentType("text/html;charset=GBK");
resp.setContentType("text/html");
//获取表单提交上来的name
String name = req.getParameter("name");
//执行查询语句方法
User user = userService.selectByName(name);
if (user != null) { //如果user不为空,即存在此名字的用户,进行输出
resp.getWriter().write("用户名:" + user.getName() +
"密码:" + user.getPassword() +
"年龄:" + user.getAge());
} else { //否则user为空,不存在
resp.getWriter().write("错误!");
}
}
}
web文件部署
对web文件进行部署配置,实现地址部署。
添加的代码如下:
<servlet>
<servlet-name>addServlet</servlet-name>
<servlet-class>com.Servlet.AddServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addServlet</servlet-name>
<url-pattern>/add</url-pattern>
</servlet-mapping>
结果运行
index主页面:
insert注册页面:
注册结果
search页面:
查询结果