1、删除功能设计
1)V部分
输入:可以在图书列表界面中添加一列,使用超链链接到删除功能,需要把将要删除的图书的编号传递过去。
输出:删除成功或者失败的提示界面。
2)M部分
删除功能需要在BookBean添加一个删除的方法,方法需要参数来指定删除哪一本书。
3)C部分
4句话:从输入界面获取要删除的图书的编号;根据编号调用JavaBean的删除图书的方法;把删除成功或者失败的消息传递到界面(通过request);转向响应界面。
2、输入界面
在books.jsp中的表格后面增加一列。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="header.jsp"%>
<tr>
<td>
<table align="center" border="1">
<tr>
<td>图书编号</td><td>图书名称</td><td>作者</td><td>价格</td><td>出版社</td><td></td>
</tr>
<!-- c:forEach用于循环控制,items属性指出要循环遍历的集合,var定义一个循环变量,表示集合中的一个元素 -->
<c:forEach var="book" items="${books}">
<tr>
<td>${book.bookid}</td>
<td>${book.bookname}</td>
<td>${book.author}</td>
<td>${book.price}</td>
<td>${book.publisher}</td>
<td> <a href="deleteBook?bookid=${book.bookid}">删除</a> </td>
</tr>
</c:forEach>
</table>
</td>
</tr>
</table>
3、输出界面
把success.jsp作为输出界面。
4、M部分
在BookBean中添加deleteBook方法,代码如下:
// 根据编号删除图书
public boolean deleteBook(String bookid){
// 表示删除成功还是失败
boolean success=true;
// 编写SQL语句
String sql = "delete from books where bookid=?";
try{
// 创建语句对象
createStatement(sql);
// 对SQL中的参数赋值
stmt.setString(1,bookid);
if( stmt.executeUpdate()>0 )
success = true;
else
success = false;
}catch(Exception e){
success = false;
System.out.println(e.toString());
}finally{
close();
}
return success;
}
5、C部分
记住4句话即可。参考代码如下:
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import bean.*;
import java.util.ArrayList;
public class DeleteBook extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
// 第一句话:获取要删除的图书
String bookid = request.getParameter("bookid");
// 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
BookBean book = new BookBean();
boolean success = book.deleteBook(bookid);
// 第三句话:向页面传递信息,第一个参数是使用的名字,应该和显示时候使用的名字一致,第二个参数传递的值本身
String info;
if(success)
info="删除成功!";
else
info="删除失败";
request.setAttribute("info",info);
// 第四句话:转向响应界面
RequestDispatcher rd = request.getRequestDispatcher("success.jsp");
rd.forward(request,response); // 完成跳转
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
doGet(request,response);
}
}
在web.xml中添加配置,相关代码如下:
<servlet>
<servlet-name>deleteBook</servlet-name>
<servlet-class>servlet.DeleteBook</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>deleteBook</servlet-name>
<url-pattern>/deleteBook</url-pattern>
</servlet-mapping>
6、图书信息修改功能设计
用户操作过程:首先先显示要修改的图书信息,然后修改后提交更新数据库。
首先考虑显示信息的过程:根据用户的选择显示相应图书的信息。
采用MVC模式设计如下:
V部分:输入可以采用与删除功能类似的方式,在图书列表之后增加一修改列。输出是修改界面。
M部分:根据图书编号查询图书信息。需要在BookBean中添加一个根据编号查询图书的方法。
C部分:4句话,获取图书编号;把编号作为参数调用JavaBean中查询图书的方法;把查询到的图书对象保存到request;转向修改界面。
7、输入界面
修改books.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ include file="header.jsp"%>
<tr>
<td>
<table align="center" border="1">
<tr>
<td>图书编号</td><td>图书名称</td><td>作者</td><td>价格</td><td>出版社</td><td></td><td></td>
</tr>
<!-- c:forEach用于循环控制,items属性指出要循环遍历的集合,var定义一个循环变量,表示集合中的一个元素 -->
<c:forEach var="book" items="${books}">
<tr>
<td>${book.bookid}</td>
<td>${book.bookname}</td>
<td>${book.author}</td>
<td>${book.price}</td>
<td>${book.publisher}</td>
<td> <a href="deleteBook?bookid=${book.bookid}">删除</a> </td>
<td> <a href="findBookByID?bookid=${book.bookid}">修改</a> </td>
</tr>
</c:forEach>
</table>
</td>
</tr>
</table>
8、输出界面
修改界面:显示从控制器传递过来的BookBean对象book。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ include file="header.jsp"%>
<tr>
<td>
<form action="updateBook" method="post" name="form1">
<table align="center">
<tr>
<td>图书编号:</td>
<td><input type="hidden" name="bookid" value="${book.bookid}">${book.bookid}</td>
</tr>
<tr>
<td>图书名:</td>
<td><input type="text" name="bookname" value="${book.bookname}"></td>
</tr>
<tr>
<td>作者:</td>
<td><input type="text" name="author" value="${book.author}"></td>
</tr>
<tr>
<td>价格:</td>
<td><input type="text" name="price" value="${book.price}"></td>
</tr>
<tr>
<td>出版社:</td>
<td><input type="text" name="publisher" value="${book.publisher}"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<td><input type="reset" value="重写"></td>
</tr>
</table>
</form>
</td>
</tr>
</table>
9、编写根据ID查询图书的方法
在BookBean中添加方法
// 根据编号查询图书
public BookBean findBookByID(String bookid){
BookBean book=new BookBean();
String sql = "select * from books where bookid=?";
try{
createStatement(sql);
stmt.setString(1,bookid);
rs = executeQuery();
// 转换成对象
rs.next();
// 使用rs的getString方法,以字符串的形式获取第一列,参数也可以是列的名字
// 可以得到当前记录的每一列
String tempBookname = rs.getString(2);
String tempAuthor = rs.getString(3);
float tempPrice = rs.getFloat(4);
String tempPublisher = rs.getString(5);
// 创建图书对象
book.setBookid(bookid);
book.setBookname(tempBookname);
book.setAuthor(tempAuthor);
book.setPrice(tempPrice);
book.setPublisher(tempPublisher);
}catch(Exception e){
System.out.println(e.toString());
}finally{
close();
}
return book;
}
10、编写Servlet控制器
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import bean.*;
import java.util.ArrayList;
public class FindBookByID extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
// 第一句话:获取用户选择图书编号
String bookid = request.getParameter("bookid");
// 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
BookBean book = new BookBean();
book = book.findBookByID(bookid);
// 第三句话:向页面传递信息,第一个参数是使用的名字,应该和显示时候使用的名字一致,第二个参数传递的值本身
request.setAttribute("book",book);
// 第四句话:转向响应界面
RequestDispatcher rd = request.getRequestDispatcher("updateBook.jsp");
rd.forward(request,response); // 完成跳转
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
doGet(request,response);
}
}
在web.xml中配置:
<servlet>
<servlet-name>findBookByID</servlet-name>
<servlet-class>servlet.FindBookByID</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>findBookByID</servlet-name>
<url-pattern>/findBookByID</url-pattern>
</servlet-mapping>
11、修改功能的设计
V部分:输入是修改界面不用修改,只要设置form的action属性为updateBook即可。输出可以采用success.jsp界面。
M部分:在BookBean中添加修改方法。
C部分:4句话,获取用户修改后的信息;调用JavaBean,包括初始化;把执行的结果传递到界面;转向界面。
12、修改BookBean中的代码
增加update方法,代码如下:
// 更新图书信息
public boolean update(){
boolean success = false;
String sql = "update books set bookname=?,author=?,price=?,publisher=? where bookid=?";
try{
createStatement(sql);
stmt.setString(1,bookname);
stmt.setString(2,author);
stmt.setFloat(3,price);
stmt.setString(4,publisher);
stmt.setString(5,bookid);
int n = executeUpdate();
if(n>0)
success = true;
else
success = false;
}catch(Exception e){
success = false;
System.out.println(e.toString());
}finally{
close();
}
return success;
}
13、编写控制器
为了解决乱码,在控制器中获取信息之前,增加如下语句:
request.setCharacterEncoding("gb2312");
代码如下:
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import bean.*;
import java.util.ArrayList;
public class UpdateBook extends HttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
request.setCharacterEncoding("gb2312");
// 第一句话:获取用户选择图书编号
String bookid = request.getParameter("bookid");
String bookname = request.getParameter("bookname");
String price = request.getParameter("price");
String author = request.getParameter("author");
String publisher = request.getParameter("publisher");
float fPrice = 0f;
try{
// 把字符串转换成浮点型变量
fPrice = Float.parseFloat(price);
}catch(Exception e){
}
// 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
BookBean book = new BookBean();
book.setBookid(bookid);
book.setBookname(bookname);
book.setPrice(fPrice);
book.setAuthor(author);
book.setPublisher(publisher);
boolean success = book.update();
String info ;
if(success)
info = "修改成功!";
else
info = "修改失败";
// 第三句话:向页面传递信息,第一个参数是使用的名字,应该和显示时候使用的名字一致,第二个参数传递的值本身
request.setAttribute("info",info);
// 第四句话:转向响应界面
RequestDispatcher rd = request.getRequestDispatcher("success.jsp");
rd.forward(request,response); // 完成跳转
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
doGet(request,response);
}
}
修改配置文件:
<servlet>
<servlet-name>updateBook</servlet-name>
<servlet-class>servlet.UpdateBook</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>updateBook</servlet-name>
<url-pattern>/updateBook</url-pattern>
</servlet-mapping>