问题描述:数据库中有张books表,存放了书籍的相关信息,如ISBN编号、书名、作者、价格和库存数量等信息。当我们新进了同样的书时,希望能更改库存数量。同时,如果有折扣,我们同样希望可以更改书的价格。 问题分析: 1. 使用三层结构来完成数据库操作,使用业务类来完成数据库books表的字段的更新操作。 2. 需要建立一个Servlet,用来以表格的形式显示数据库中book 表的所有信息,同时提供超链接。 3. 需要建立另外的Servlet,用来完成数据库books表的字段的修改。
时间: 2023-11-27 10:54:07 浏览: 190
问题解答:
1. 使用三层结构来完成数据库操作,使用业务类来完成数据库books表的字段的更新操作。
在三层架构中,我们可以将数据库操作分为三个层次:数据访问层(DAO)、业务逻辑层(Service)和表示层(Presentation)。其中,数据访问层用于与数据库交互,业务逻辑层用于完成业务逻辑的处理,表示层用于与用户进行交互。
对于本题所述的需求,我们可以定义如下的业务类:
```
public class BookService {
private BookDao bookDao = new BookDao();
public List<Book> getAllBooks() {
return bookDao.getAllBooks();
}
public void updateBook(Book book) {
bookDao.updateBook(book);
}
}
```
其中,BookDao 是数据访问层,用于与数据库进行交互;BookService 是业务逻辑层,用于完成业务逻辑的处理。在上述代码中,我们定义了两个方法:getAllBooks() 用于获取所有的书籍信息,updateBook(Book book) 用于更新书籍的库存数量和价格等信息。
2. 需要建立一个Servlet,用来以表格的形式显示数据库中book 表的所有信息,同时提供超链接。
我们可以编写如下的 Servlet:
```
public class BookListServlet extends HttpServlet {
private BookService bookService = new BookService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
List<Book> bookList = bookService.getAllBooks();
req.setAttribute("bookList", bookList);
req.getRequestDispatcher("/bookList.jsp").forward(req, resp);
}
}
```
在上述代码中,我们通过调用 BookService 的 getAllBooks() 方法来获取所有的书籍信息,并将其保存到 request 对象中。然后,我们通过请求转发的方式将其传递给 bookList.jsp 页面进行显示。
在 bookList.jsp 页面中,我们可以使用表格的形式来显示所有的书籍信息,并提供超链接来跳转到修改页面。具体代码如下:
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>图书列表</title>
</head>
<body>
<h1>图书列表</h1>
<table border="1">
<tr>
<th>ISBN编号</th>
<th>书名</th>
<th>作者</th>
<th>价格</th>
<th>库存数量</th>
<th>操作</th>
</tr>
<c:forEach var="book" items="${bookList}">
<tr>
<td>${book.isbn}</td>
<td>${book.bookName}</td>
<td>${book.author}</td>
<td>${book.price}</td>
<td>${book.stock}</td>
<td><a href="<c:url value='/bookEdit.jsp'><c:param name='isbn' value='${book.isbn}'/></c:url>">修改</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
```
在上述代码中,我们使用 JSTL 标签库来遍历所有的书籍信息,并将其显示在表格中。同时,我们使用 c:url 标签来生成修改页面的超链接,其中,通过 c:param 标签来传递 ISBN 编号。
3. 需要建立另外的Servlet,用来完成数据库books表的字段的修改。
我们可以编写如下的 Servlet:
```
public class BookEditServlet extends HttpServlet {
private BookService bookService = new BookService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String isbn = req.getParameter("isbn");
Book book = bookService.getBookByIsbn(isbn);
req.setAttribute("book", book);
req.getRequestDispatcher("/bookEdit.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String isbn = req.getParameter("isbn");
String bookName = req.getParameter("bookName");
String author = req.getParameter("author");
double price = Double.parseDouble(req.getParameter("price"));
int stock = Integer.parseInt(req.getParameter("stock"));
Book book = new Book(isbn, bookName, author, price, stock);
bookService.updateBook(book);
resp.sendRedirect("/bookList");
}
}
```
在上述代码中,我们通过调用 BookService 的 getBookByIsbn() 方法来获取指定 ISBN 编号的书籍信息,并将其保存到 request 对象中。然后,我们通过请求转发的方式将其传递给 bookEdit.jsp 页面进行显示。
在 bookEdit.jsp 页面中,我们可以使用表单的形式来编辑书籍的信息,并将其提交到 BookEditServlet 中进行处理。具体代码如下:
```
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>编辑图书</title>
</head>
<body>
<h1>编辑图书</h1>
<form action="<c:url value='/bookEdit'/>" method="post">
<input type="hidden" name="isbn" value="${book.isbn}"/>
<p>
<label>书名:</label>
<input type="text" name="bookName" value="${book.bookName}"/>
</p>
<p>
<label>作者:</label>
<input type="text" name="author" value="${book.author}"/>
</p>
<p>
<label>价格:</label>
<input type="text" name="price" value="${book.price}"/>
</p>
<p>
<label>库存数量:</label>
<input type="text" name="stock" value="${book.stock}"/>
</p>
<p>
<input type="submit" value="保存"/>
</p>
</form>
</body>
</html>
```
在上述代码中,我们使用表单的形式来编辑书籍的信息,并将其提交到 BookEditServlet 中进行处理。其中,我们通过隐藏域来传递 ISBN 编号。同时,我们使用 JSTL 标签库来生成表单的 action 属性。
阅读全文