Java Web快速入门——第8讲

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>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值