本项目是基于JDBC技术实现对数据库的连接,从而实现简单系统的管理,项目实现了,用户注册、用户登录、图书信息显示、添加图书和删除图书的功能
目录
一:功能展示
先给大家看一下思维导图:
1.用户注册
2.用户登录
3.添加图书
4.删除图书
二:准备
-
1.首先在本地数据库中创建两张表,一张存储用户信息,一张存储图书信息
-
2.Servlet 开发环境(tomcat服务器)
三:流程
1.在工程中创建Book类和User类
图书类:
import java.util.ArrayList;
import java.util.List;
public class Book {
private int bookId; //图书ID
private String bookName; //图书名称
private float bookPrice; //图书价格
private String bookPublisher; //出版社
private String bookDesc; //图书描述
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public float getBookPrice() {
return bookPrice;
}
public void setBookPrice(float bookPrice) {
this.bookPrice = bookPrice;
}
public String getBookPublisher() {
return bookPublisher;
}
public void setBookPublisher(String bookPublisher) {
this.bookPublisher = bookPublisher;
}
public String getBookDesc() {
return bookDesc;
}
public void setBookDesc(String bookDesc) {
this.bookDesc = bookDesc;
}
@Override
public String toString() {
return "Book [bookId=" + bookId + ", bookName=" + bookName + ", bookPrice=" + bookPrice + ", bookPublisher="
+ bookPublisher + ", bookDesc=" + bookDesc + "]";
}
}
用户类:
public class User {
private String uName; //用户名
private String uPwd; //用户密码
public String getUName() {
return uName;
}
public void setUName(String uName) {
this.uName = uName;
}
public String getUPwd() {
return uPwd;
}
public void setUPwd(String uPwd) {
this.uPwd = uPwd;
}
@Override
public String toString() {
return "User [uName=" + uName + ", uPwd=" + uPwd + "]";
}
}
2.创建DBUtil类连接数据库
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBUtil {
// 连接SqlServer的配置信息
private String driver;
private String connStr;
private String user;
private String pwd;
private Connection conn = null;
public DBUtil() {
// 加载配置文件,初始化SqlServer配置属性
try {
loadDBProperty("DBConfig.properties");
} catch (ClassNotFoundException | IOException | SQLException e) {
e.printStackTrace();
}
}
/**
* 加载数据库配置文件
*
* @param pFile
* @throws IOException
* @throws ClassNotFoundException
* @throws SQLException
*/
private void loadDBProperty(String pFile) throws IOException, ClassNotFoundException, SQLException {
// 创建Properties对象
Properties prop = new Properties();
// 加载配置文件
prop.load(DBUtil.class.getClassLoader().getResourceAsStream(pFile));
driver = prop.getProperty("DRIVER");
connStr = prop.getProperty("CONN_STR");
user = prop.getProperty("USER");
pwd = prop.getProperty("PWD");
}
// 获取连接对象
private void connectToDB() throws SQLException, ClassNotFoundException {
if (null == conn || conn.isClosed()) {
Class.forName(driver);
conn = DriverManager.getConnection(connStr, user, pwd);
}
}
/**
* 查询数据
*
* @param sql 查询数据的sql语句
* @return 查询到的数据集
* @throws ClassNotFoundException
* @throws SQLException
*/
public ResultSet queryDate(String sql) throws ClassNotFoundException, SQLException {
// 连接到数据库
connectToDB();
Statement stmt = conn.createStatement();
// 执行查询
ResultSet rs = stmt.executeQuery(sql);
return rs;
}
/**
* 判断数据是否存在
*
* @param sql 查询的sql语句
* @return 存在则返回true,否则返回false
* @throws ClassNotFoundException
* @throws SQLException
*/
public boolean isExist(String sql) throws ClassNotFoundException, SQLException {
// 连接到数据库
connectToDB();
Statement stmt = conn.createStatement();
// 执行查询
ResultSet rs = stmt.executeQuery(sql);
return rs.next();
}
/**
* 插入数据
*
* @param sql 执行插入的sql语句
* @return 插入记录的行数
* @throws ClassNotFoundException
* @throws SQLException
*/
public int addDataToTable(String sql) throws ClassNotFoundException, SQLException {
// 连接到数据库
connectToDB();
Statement stmt = conn.createStatement();
return stmt.executeUpdate(sql);
}
/**
* 修改或删除数据
*
* @param sql 待操作的SQL语句
* @return 修改或删除的记录行数
* @throws SQLException
* @throws ClassNotFoundException
*/
public int updateData(String sql) throws ClassNotFoundException, SQLException {
// 连接到数据库
connectToDB();
Statement stmt = conn.createStatement();
return stmt.executeUpdate(sql);
}
/**
* 关闭数据库连接
*
* @throws SQLException
*/
public void closeDB() throws SQLException {
if (null != conn && !conn.isClosed()) {
conn.close();
}
}
}
3.制作登录、登录失败、添加图书、注册的静态页面
登录页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>
<h1>用户登录</h1>
</p>
<p>
<form action="login.action" method="post">
用户名: <input type="text" name="uName"><br/><br/>
密 码: <input type="password" name="uPwd"><br/><br/>
<input type="submit" value="登录"><br/><br/>
<a href="regest.html">注册新用户</a>
</form>
</p>
</body>
</html>
登录失败:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>用户名或密码错误,<a href="login.html">请返回重新登录</a></h1>
</body>
</html>
注册:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>
<h1>用户注册</h1>
</p>
<p>
<form action="regest.action" method="post">
用户名: <input type="text" name="uName"><br/><br/>
密 码: <input type="password" name="uPwd"><br/><br/>
确认密码: <input type="password" name="uPwdCopy"><br/><br/>
<input type="submit" value="注册">
</body>
</html>
添加图书:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>添加图书</h1>
<form action="addBook.action" method="post">
bookName: <input type="text" name="bookName"><br/>
bookPrice: <input type="text" name="bookPrice"><br/>
bookPublisher: <input type="text" name="bookPublisher"><br/>
bookDescription:<input type="text" name="bookDescription"><br/>
<input type="submit" value="添加图书">
</form>
</body>
</html>
4.管理图书和用户
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import net.lww.entitys.Book;
import net.lww.utils.DBUtil;
public class BookService {
private List<Book> books;
private DBUtil dbUtil;
public BookService() {
//初始化图书集合
books = new ArrayList<Book>();
dbUtil = new DBUtil();
}
/**
* 获取所有图书信息
* @param sql 查询图书的sql语句
* @return 图书集合
*/
public List<Book> getBooks(String sql){
try {
//查询所有图书
ResultSet rs = dbUtil.queryDate("select * from Book");
while(rs.next()) {
//获取图书表字段book_id的值
int bookId = rs.getInt("book_id");
//获取图书表字段book_name的值
String bookName = rs.getString("book_name");
//获取图书表字段book_price的值
float bookPrice = rs.getFloat("book_price");
//获取图书表字段book_publisher的值
String bookPublisher = rs.getString("book_publisher");
//获取图书表字段book_description的值
String bookDesc = rs.getString("book_description");
//根据获取到的图书信息构造图书对象
Book book = createBook(bookId, bookName, bookPrice, bookPublisher, bookDesc);
books.add(book);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return books;
}
/**
* 根据图书信息构造图书对象
* @param bookId 图书编号
* @param bookName 图书名称
* @param bookPrice 图书价格
* @param bookPublisher 出版社
* @param bookDesc 图书描述
* @return 构造的图书对象
*/
private Book createBook(int bookId, String bookName, float bookPrice, String bookPublisher, String bookDesc) {
Book book = new Book();
book.setBookId(bookId);
book.setBookName(bookName);
book.setBookPrice(bookPrice);
book.setBookPublisher(bookPublisher);
book.setBookDesc(bookDesc);
return book;
}
/**
* 添加图书
* @param book 待添加的图书对象
* @return 添加图书是否成功,成功返回true,否则返回false
*/
public boolean addBook(Book book) {
//获取图书信息
String bookName=book.getBookName();
float bookPrice=book.getBookPrice();
String bookPublisher=book.getBookPublisher();
String bookDespriction=book.getBookDesc();
//拼接插入图书的sql语句
String sql="insert into Book(book_name,book_price,book_publisher,book_description) values ('"+bookName
+"',"+bookPrice+",'"+bookPublisher+"','"+bookDespriction+"')";
int n=-1;//存储插入的记录数
try {
n=dbUtil.addDataToTable(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return n>0?true:false;
}
/**
* 根据图书名称删除指定图书
* @param bookName 图书名称
* @return 是否删除图书,成功删除返回true,否则返回false
*/
public boolean deleteBookByName(String bookName) {
//拼接删除图书的sql语句
String sql="delete from Book where book_name='"+bookName+"'";
int n=-1;//存储插入的记录数
try {
n=dbUtil.addDataToTable(sql);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return n>0?true:false;
}
}
package net.lww.services;
import java.sql.SQLException;
import net.lww.entitys.User;
import net.lww.utils.DBUtil;
public class UserService {
private DBUtil dbUtil;
public UserService() {
dbUtil = new DBUtil();
}
/**
* 判断用户是否存在
* @param user 待判断的用户
* @return 存在则返回true,否则返回false
*/
public boolean isExistUser(User user) {
//获取待判断的用户信息
String uName = user.getUName();
String uPwd = user.getUPwd();
//根据用户信息拼接sql语句
String sql = "select * from UserInfo where user_name = '" + uName +"' and user_pwd = '" + uPwd +"'";
System.out.println(sql);
boolean b = false;
try {
b = dbUtil.isExist(sql);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return b;
}
/**
* 注册用户
* @param user 待注册的用户
* @return 注册是否成功,成功返回true,否则返回false
*/
public boolean regestUser(User user) {
//获取用户信息
String uName = user.getUName();
String uPwd = user.getUPwd();
//拼接插入用户的sql语句
String sql = "insert into UserInfo(user_name, user_pwd) values('" + uName + "', '" + uPwd + "')";
//将用户的信息插入用户表中
int n = -1;//存储插入的记录数
try {
n = dbUtil.addDataToTable(sql);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return n > 0 ? true : false;
}
}
5.在servlet中实现添加图书、显示图书信息,删除图书、注册用户
检测登录是否有效:
package net.lww.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.lww.entitys.User;
import net.lww.services.UserService;
/**
* 处理用户登录
*/
@WebServlet("/login.action")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public LoginServlet() {
// 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");
// 获取请求参数
String uName = request.getParameter("uName");
String uPwd = request.getParameter("uPwd");
if (null != uName && null != uPwd) {
// 根据请求参数构造User对象
User user = new User();
user.setUName(uName);
user.setUPwd(uPwd);
// 调用服务层接口查询用户是否存在
boolean b = new UserService().isExistUser(user);
if (b) {// 如果存在该用户,则跳转到首页显示图书信息
// 将用户存入ServletContext
getServletContext().setAttribute("user", uName);
response.sendRedirect("book.action");
} else {
response.sendRedirect("loginfalse.html");
}
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
添加图书:
package net.lww.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.lww.entitys.Book;
import net.lww.entitys.User;
import net.lww.services.BookService;
import net.lww.services.UserService;
/**
* 新增图书
*/
@WebServlet("/addBook.action")
public class AddBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AddBookServlet() {
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");
//获取图书信息
String bookName=request.getParameter("bookName");
String bookPrice=request.getParameter("bookPrice");
String bookPublisher=request.getParameter("bookPublisher");
String bookDescription=request.getParameter("bookDescription");
// 将图书信息添加到数据库
Book book=new Book();
book.setBookName(bookName);
book.setBookPrice(Float.parseFloat(bookPrice));
book.setBookPublisher(bookPublisher);
book.setBookDesc(bookDescription);
boolean flag=new BookService().addBook(book);
if(flag) {
//添加成功,跳转到显示图书信息界面
response.sendRedirect("book.action");
}else {
//添加失败,返回信息给客户端
response.getWriter().write("图书添加失败");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
显示图书信息:
package net.lww.actions;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.lww.entitys.Book;
import net.lww.services.BookService;
/**
* 显示图书信息
*/
@WebServlet("/book.action")
public class BooksInfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BooksInfoServlet() {
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");
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else {// 已经登录,显示图书信息
// 获取图书信息
BookService bookService = new BookService();
List<Book> books = bookService.getBooks("select * from Book");
// 以表格形式将图书信息返回给客户端浏览器
// 打印表格表头
writer.write("<table border='1'>");
writer.write("<tr align='center'>");
writer.write("<th width='30'>编号</th>");
writer.write("<th width='150'>图书名称</th>");
writer.write("<th width='100'>图书价格</th>");
writer.write("<th width='150'>出版社</th>");
writer.write("<th>图书介绍</th>");
writer.write("<th width='100'>删除按钮</th>");
writer.write("</tr>");
// 打印图书信息
for (Book book : books) {
writer.write("<tr align='center'>");
// 打印图书编号
writer.write("<td>");
writer.write(new String((book.getBookId() + "").getBytes(), "utf-8"));
writer.write("</td>");
// 打印图书名称
writer.write("<td>");
writer.write(book.getBookName());
writer.write("</td>");
// 打印图书价格
writer.write("<td>");
writer.write(book.getBookPrice() + "");
writer.write("</td>");
// 打印出版社
writer.write("<td>");
writer.write(book.getBookPublisher());
writer.write("</td>");
// 打印图书介绍
writer.write("<td align='left'>");
writer.write(book.getBookDesc());
writer.write("</td>");
//删除图书按钮
writer.write("<td>");
writer.write("<a href='deleteBook.action?bookName="+book.getBookName()+"'>删除</a>");
writer.write("</td>");
writer.write("</tr>");
}
writer.write("</table>");
writer.write("<br/><br/>");
writer.write("<a href='addBook.html'>添加新图书</a>");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
删除图书:
package net.lww.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.lww.services.BookService;
/**
* 根据图书名称删除图书
*/
@WebServlet("/deleteBook.action")
public class DeleteBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DeleteBookServlet() {
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");
//获取图书名称对象
Object obj=request.getParameter("bookName");
boolean flag=new BookService().deleteBookByName(obj.toString());
if(flag) {
//删除成功,跳转到显示图书信息界面
response.sendRedirect("book.action");
}else {
//删除失败,返回信息给客户端
response.getWriter().write("图书删除失败");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
注册用户:
package net.lww.actions;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.lww.entitys.User;
import net.lww.services.UserService;
/**
* 注册新用户
*/
@WebServlet("/regest.action")
public class RegestUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RegestUserServlet() {
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");
// 获取用户信息
String uName = request.getParameter("uName");
String uPwd = request.getParameter("uPwd");
String uPwdCopy = request.getParameter("uPwdCopy");
if (!uName.equals("") && !uPwd.equals("") && !uPwdCopy.equals("") && uPwd.equals(uPwdCopy)) {// 两次密码相同
// 将用户信息添加到数据库
User user = new User();
user.setUName(uName);
user.setUPwd(uPwd);
boolean flag = new UserService().regestUser(user);
if (flag) {
// 跳转到登录页面
response.sendRedirect("login.html");
} else {
response.sendRedirect("regest.html");
}
} else {// 两次密码不相同或用户名、密码为空
response.sendRedirect("regest.html");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}