private void bookDel(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BookForm bookForm = new BookForm(); bookForm.setId(Integer.valueOf(request.getParameter("ID"))); int ret = this.bookDAO.delete(bookForm); if (ret == 0) { request.setAttribute("error", "删除图书信息失败!"); request.getRequestDispatcher("error.jsp").forward(request, response); } else { request.getRequestDispatcher("book_ok.jsp?para=3").forward(request, response); } }
时间: 2023-06-25 10:06:29 浏览: 138
这是一个Java Servlet中的bookDel方法,用于处理删除图书信息的请求。首先,从HttpServletRequest对象中获取ID参数并转换为整数类型,然后创建一个BookForm对象并将ID设置为获取到的值。接下来,调用BookDAO对象的delete方法来执行删除操作,返回结果存储在ret变量中。如果ret为0,则表示删除失败,设置一个错误信息并将请求转发到error.jsp页面;否则,将请求转发到book_ok.jsp页面,并传递参数para=3。
相关问题
问题描述:数据库中有张books表,存放了书籍的相关信息,如ISBN编号、书名、作者、价格和库存数量等信息。当我们新进了同样的书时,希望能更改库存数量。同时,如果有折扣,我们同样希望可以更改书的价格。 问题分析: 1. 使用三层结构来完成数据库操作,使用业务类来完成数据库books表的字段的更新操作。 2. 需要建立一个Servlet,用来以表格的形式显示数据库中book 表的所有信息,同时提供超链接。 3. 需要建立另外的Servlet,用来完成数据库books表的字段的修改。
问题解答:
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 属性。
图书信息包含图书编号、书名、作者、出版社、价格。请编写程序实现下列功能: 1)建立数据库book和表bookinfo 2)根据表bookinfo编写类BookInfo(它是JavaBean类) 3)编写Dao程序即对表bookinfo完成数据库连接、图书信息查询、插入等操作的类,类中插入图书的方法的参数是BookInfo类对象 4)编写jsp程序index.jsp,页面中包含录入、浏览等链接 5)当点击录入时,转向jsp程序input.jsp。input.jsp中利用表单录入图书信息,然后提交给servlet程序(/saveBook),同时提供返回index.jsp的链接。 6)点击浏览时,能够调用某servlet程序(/browse),利用Dao程序(第3题中)完成查询所有的图书并显示查询结果(浏览器中显示) 7)servlet程序(/saveBook,它是servlet程序的URL):接收页面传来的图书信息,根据信息构建BookInfo对象,然后将其作为实参传递给Dao中的方法(第3题中)完成图书信息的保存即插入到表bookinfo中7),保存成功后转到input.jsp程序。 8)servlet程序(/browse):调用Dao中的方法完成对图书信息的查询,并能在浏览器中显示查询结果,同时提供返回index.jsp的链接。代码
建立数据库book和表bookinfo:
```sql
CREATE DATABASE book;
USE book;
CREATE TABLE bookinfo (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
book_number VARCHAR(20),
book_name VARCHAR(50),
author VARCHAR(50),
publisher VARCHAR(50),
price DOUBLE(10, 2)
);
```
BookInfo类:
```java
public class BookInfo implements Serializable {
private int id;
private String bookNumber;
private String bookName;
private String author;
private String publisher;
private double price;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getBookNumber() {
return bookNumber;
}
public void setBookNumber(String bookNumber) {
this.bookNumber = bookNumber;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
```
Dao程序:
```java
public class BookDao {
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
public BookDao() {
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/book?useSSL=false";
String user = "root";
String password = "password";
conn = DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public List<BookInfo> queryAllBooks() {
List<BookInfo> bookList = new ArrayList<>();
try {
String sql = "SELECT * FROM bookinfo";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
BookInfo book = new BookInfo();
book.setId(rs.getInt("id"));
book.setBookNumber(rs.getString("book_number"));
book.setBookName(rs.getString("book_name"));
book.setAuthor(rs.getString("author"));
book.setPublisher(rs.getString("publisher"));
book.setPrice(rs.getDouble("price"));
bookList.add(book);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
return bookList;
}
public void insertBook(BookInfo book) {
try {
String sql = "INSERT INTO bookinfo(book_number, book_name, author, publisher, price) VALUES (?, ?, ?, ?, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, book.getBookNumber());
pstmt.setString(2, book.getBookName());
pstmt.setString(3, book.getAuthor());
pstmt.setString(4, book.getPublisher());
pstmt.setDouble(5, book.getPrice());
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
}
private void close() {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (conn != null) {
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
index.jsp页面:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图书管理系统</title>
</head>
<body>
<h1>图书管理系统</h1>
<a href="input.jsp">录入</a>
<a href="browse">浏览</a>
</body>
</html>
```
input.jsp页面:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>录入图书信息</title>
</head>
<body>
<h1>录入图书信息</h1>
<form action="saveBook" method="post">
<label>图书编号:<input type="text" name="bookNumber"></label><br>
<label>书名:<input type="text" name="bookName"></label><br>
<label>作者:<input type="text" name="author"></label><br>
<label>出版社:<input type="text" name="publisher"></label><br>
<label>价格:<input type="text" name="price"></label><br>
<input type="submit" value="保存">
</form>
<a href="index.jsp">返回</a>
</body>
</html>
```
saveBook servlet程序:
```java
public class SaveBookServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String bookNumber = request.getParameter("bookNumber");
String bookName = request.getParameter("bookName");
String author = request.getParameter("author");
String publisher = request.getParameter("publisher");
double price = Double.parseDouble(request.getParameter("price"));
BookInfo book = new BookInfo();
book.setBookNumber(bookNumber);
book.setBookName(bookName);
book.setAuthor(author);
book.setPublisher(publisher);
book.setPrice(price);
BookDao dao = new BookDao();
dao.insertBook(book);
response.sendRedirect("input.jsp");
}
}
```
browse servlet程序:
```java
public class BrowseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
BookDao dao = new BookDao();
List<BookInfo> bookList = dao.queryAllBooks();
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>图书列表</title></head>");
out.println("<body>");
out.println("<h1>图书列表</h1>");
out.println("<table border='1'>");
out.println("<tr><th>编号</th><th>图书编号</th><th>书名</th><th>作者</th><th>出版社</th><th>价格</th></tr>");
for (BookInfo book : bookList) {
out.println("<tr>");
out.println("<td>" + book.getId() + "</td>");
out.println("<td>" + book.getBookNumber() + "</td>");
out.println("<td>" + book.getBookName() + "</td>");
out.println("<td>" + book.getAuthor() + "</td>");
out.println("<td>" + book.getPublisher() + "</td>");
out.println("<td>" + book.getPrice() + "</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("<br><a href='index.jsp'>返回</a>");
out.println("</body>");
out.println("</html>");
}
}
```
阅读全文