显示图书信息功能
(图书信息保存在数据库中)
用户身份登录显示的界面:
管理员身份登录所显示的界面:
关键代码
1、显示图书列表(区别登录者的身份)
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录,并区分登录的身份
// 登录身份不同显示的页面不同(添加图书和对图书的删除只有管理员身份登录时才会显示)
// 管理员可以对图书进行浏览、删除、添加操作,也可以加入购物车;
// 普通用户只能加入购物车
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
List<Object> userLogin = (List<Object>) context.getAttribute("userLogin");
int totalNum;
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
// 当登录失败时,访问人数为List的长度-1,并在List记录中删除最近添加的记录
totalNum = userLogin.size() - 1;
userLogin.remove(totalNum);
} else {
// 只有当登录成功时,才算入到访问人数
totalNum = userLogin.size();
// 获取图书信息
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>");
if (logIn.equals("1")) {// 管理员身份登录时显示
writer.write("<th width='50'>删除</th>");
writer.write("<th width='50'>修改</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>");
if (logIn.equals("1")) {// 管理员身份登录时显示
// 删除图书
writer.write("<td align='center'>");
writer.write("<a href='deleteBook.action?bookName=" + book.getBookName() + "'>删除</a>");
writer.write("</td>");
// 修改图书
writer.write("<td align='center'>");
writer.write("<a href='updateBook.action?bookName=" + book.getBookName() + "&bookPrice="
+ book.getBookPrice() + "&bookPublisher=" + book.getBookPublisher() + "&bookDesc="
+ book.getBookDesc() + "'>修改</a>");
writer.write("</td>");
}
// 加入购物车
writer.write("<td align='center'>");
writer.write("<a href='shopping.action?bookName=" + book.getBookName() + "&bookPrice="
+ book.getBookPrice() + "'>加入购物车</a>");
writer.write("</td>");
writer.write("</tr>");
}
writer.write("</table>");
writer.write("<br/><br/>");
if (logIn.equals("1")) {// 管理员身份登录时显示
writer.write("<a href='bookServlet.action'>添加新图书</a>");
writer.write("      ");
}
writer.write("<a href='createOrder.action'>查看历史订单</a>");
writer.write("      ");
writer.write("<a href='ShowShoppingCart.action'>查看购物车</a>");
writer.write("      访问人数:" + totalNum);
}
}
2、BookService中相应的显示图书列表的方法:
/**
* 获取所有图书信息
*
* @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;
}
添加图书功能
添加图书的界面:
1、添加图书界面的关键代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
} else {
// 只有管理员身份登录时才有添加图书选项,因此不需要判断登录者的身份
writer.write("<form action='addBook.action' method='post'>");
writer.write("图书名称:<input type='text' name='bookName'>");
writer.write("<br/><br/>");
writer.write("图书价格:<input type='text' name='bookPrice'>");
writer.write("<br/><br/>");
writer.write("出 版 社 :<input type='text' name='bookPublisher'>");
writer.write("<br/><br/>");
writer.write("图书简介:<input type='text' name='bookDesc'>");
writer.write("<br/><br/>");
writer.write("<input type='submit' value='提交'>");
writer.write("</form>");
}
}
2、处理新增图书的Servlet中的关键代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
} else {
// 只有管理员身份登录时才有添加图书选项,因此不需要判断登录者的身份
// 获取输入的图书信息
String bookName = request.getParameter("bookName");
String price = request.getParameter("bookPrice");
if (bookName.isEmpty() || price.isEmpty()) {
response.sendRedirect("addfalse.html");
} else {
float bookPrice = Float.parseFloat(price);
String bookPublisher = request.getParameter("bookPublisher");
String bookDesc = request.getParameter("bookDesc");
// 将图书信息添加到数据库
Book book = new Book();
book.setBookName(bookName);
book.setBookPrice(bookPrice);
book.setBookPublisher(bookPublisher);
book.setBookDesc(bookDesc);
boolean flag = new BookService().addBook(book);
if (flag) {
// 跳转到显示图书的界面
response.sendRedirect("book.action");
} else {
// 提示图书添加失败
writer.write("该图书已被添加过,<a href='bookServlet.action'>点此返回添加图书界面</a>");
}
}
}
}
3、BookService中处理添加图书的代码:
/**
* 添加图书
*
* @param book 待添加的图书对象
* @return 添加图书是否成功,成功返回true,否则返回false
*/
public boolean addBook(Book book) {
// 获取图书信息
String bookName = book.getBookName();
float bookPrice = book.getBookPrice();
String bookPublisher = book.getBookPublisher();
String bookDesc = book.getBookDesc();
// 存储插入的记录数
int n = -1;
try {
// 查询数据库中是否存在要添加的这本书的名称
String select = "select book_name from Book where book_name='" + bookName + "'";
boolean isExist = dbUtil.isExist(select);
// 如果不存在,则添加该图书
if (!isExist) {
// 拼接插入图书的SQL语句
String sql = "insert into Book(book_name,book_price,book_publisher,book_description) values('"
+ bookName + "', '" + bookPrice + "', '" + bookPublisher + "', '" + bookDesc + "')";
// 将图书信息插入图书表中
n = dbUtil.addDataToTable(sql);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return n > 0 ? true : false;
}
根据图书名删除图书
1、处理删除图书的Servlet中的关键代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
} else {
// 只有管理员身份登录时才会显示有删除图书的操作,因此不需要判断登录者的身份
// 获取图书名称
String bookName = request.getParameter("bookName");
boolean flag = new BookService().deleteBookByName(bookName);
if (flag) {
// 跳转到显示图书的界面
response.sendRedirect("book.action");
} else {
writer.write("删除图书信息失败!" + "<a href='book.action'>点击返回图书界面</a>");
}
}
}
2、BookService中处理删除图书的代码:
/**
* 根据图书名称删除指定图书
*
* @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.updateData(sql);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return n > 0 ? true : false;
}
修改图书信息
修改图书信息的界面:
1、修改图书信息界面的关键代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
} else {
// 只有管理员身份登录时才有修改图书选项,因此不需要判断登录者的身份
writer.write("<form action='UpdateBookServlet.action' method='post'>");
writer.write("图 书 ID:<input type='text' name='bookId'>");
writer.write("<br/><br/>");
writer.write("图书名称:<input type='text' name='bookName'>");
writer.write("<br/><br/>");
writer.write("图书价格:<input type='text' name='bookPrice'>");
writer.write("<br/><br/>");
writer.write("出 版 社 :<input type='text' name='bookPublisher'>");
writer.write("<br/><br/>");
writer.write("图书简介:<input type='text' name='bookDesc'>");
writer.write("<br/><br/>");
writer.write("<input type='submit' value='提交'>");
writer.write("</form>");
}
}
2、处理修改图书信息的Servlet中的关键代码:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取PrintWriter对象
PrintWriter writer = response.getWriter();
// 检测用户是否已经登录
ServletContext context = getServletContext();
Object user = context.getAttribute("user");
String logIn = (String) context.getAttribute("admin");
if (null == user) {// 还未登录
writer.write("您还未登录,<a href='login.html'>点此重新登录</a>");
} else if (logIn == null) {
writer.write("请选择登录身份!<a href='login.html'>点此重新登录</a>");
} else {
// 只有管理员身份登录时才会显示有修改图书的操作,因此不需要判断登录者的身份
// 获取图书Id
int bookId = Integer.parseInt(request.getParameter("bookId"));
// 获取图书名称
String bookName = request.getParameter("bookName");
// 获取图书价格
float bookPrice = Float.parseFloat(request.getParameter("bookPrice"));
// 获取图书出版社
String bookPublisher = request.getParameter("bookPublisher");
// 获取图书描述
String bookDesc = request.getParameter("bookDesc");
boolean flag;
try {
flag = new BookService().updateBookById(bookId,bookName, bookPrice, bookPublisher, bookDesc);
if (flag) {
// 跳转到显示图书的界面
response.sendRedirect("book.action");
} else {
writer.write("修改图书信息失败!" + "<a href='book.action'>点击返回图书界面</a>");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3、BookService中处理修改图书信息的代码:
/**
* 根据图书id称修改图书信息(不可更改图书id) 图书修改后的名称不可与原有图书重名
*
* @param bookId 图书id
* @return 是否修改图书,成功修改返回true,否则返回false
* @throws SQLException
*/
public boolean updateBookById(int bookId, String bookName, float bookPrice, String bookPublisher, String bookDesc)
throws SQLException {
// 拼接修改图书信息的SQL语句
String sql = "update Book set book_name='" + bookName + "',book_price=" + bookPrice + ",book_publisher='"
+ bookPublisher + "',book_description='" + bookDesc + "' where book_id='" + bookId + "'";
int n = -1;// 存储修改的记录数
try {
// 查询数据库中是否存在要修改的这本书的名称
String select = "select book_name from Book where book_name='" + bookName + "'";
boolean isExist = dbUtil.isExist(select);
if (!isExist) {
// 对图书信息进行修改
n = dbUtil.updateData(sql);
}
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return n > 0 ? true : false;
}