Jsp應用實訓二

  • Servlet代碼演示
    • package cn.javabs.store.servlet;
      
      import cn.javabs.store.entity.Category;
      import cn.javabs.store.service.CategoryService;
      import cn.javabs.store.service.impl.CategoryServiceImpl;
      import com.alibaba.druid.sql.visitor.functions.If;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import javax.swing.text.EditorKit;
      import java.io.IOException;
      import java.util.List;
      
      /**
       * 類目的Servlet
       */
      @WebServlet("/categoryServlet")
      public class CategoryServlet extends HttpServlet {
      
          //實例化CategoryService
          CategoryService categoryService = new CategoryServiceImpl();
      
          public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              doGet(request, response);
          }
      
          public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
              // 0.在本方法內部進行分別調用如下分類操作的方法
              // ring methodName = "addCategory";
              // 去接收index.jsp頁面中的methodName參數
              String methodName = request.getParameter("methodName");
              // 1.如果字符串"addCategory"等於methodName的值(內容)
              if ("addCategory".equals(methodName)) {
                  addCategory(request, response);
                  // 2.如果字符串"delCategory"等於methodName的值(內容)
              } else if ("delCategory".equals(methodName)) {
                  delCategory(request, response);
                  // 3.如果字符串"editCategory"等於methodName的值(內容)
              } else if ("editCategory".equals(methodName)) {
                  editCategory(request, response);
                  // 4.如果字符串"findAllCategories"等於methodName的值(內容)
              } else if ("findAllCategories".equals(methodName)) {
                  findAllCategories(request, response);
              } else if ("editCategoryView".equals(methodName)) {
                  editCategoryView(request, response);
              }
              // 5.如果methodName的值(內容)沒有匹配的方法,則執行下方輸入語句
              else {
                  System.out.println("哥們,你要的方法不存在,檢查是否單詞有誤!");
              }
          }
      
      //-------------------------------------------------------------------------------------------------------------------------------------------------------
      
          /**
           * 查詢全部分類
           */
          public void findAllCategories(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              List<Category> categoryList = categoryService.findAllCategries();
              System.out.println(categoryList);
              request.setAttribute("list", categoryList); //list是一個標記、記號
              request.getRequestDispatcher("/categoryList.jsp").forward(request, response);
          }
      
          /**
           * 根據id指示查詢
           */
          public void findCategoryById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              Category category = categoryService.findCategoryById(2);
              System.out.println("因爲index.jsp訪問了頁面中查詢全部的方法,內容:" + category);
          }
      
          /**
           * 添加分類
           */
          public void addCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              // 接受前臺的參數
              String cname = request.getParameter("cname");
      
              Category category = new Category();
              category.setCid(null); //因爲數據庫會自動生成
              //category.setCname("內存卡"); //目前的數據是 寫死的 不是前臺傳遞過來的
              category.setCname(cname); //目前的數據是 寫活的 是前臺傳遞過來的cname
              int rowNumber = categoryService.addCategory(category);
              if (rowNumber > 0) {
                  System.out.println("插入成功!");
              } else {
                  System.out.println("插入失敗!");
              }
          }
      
          /**
           * 修改分類 之 數據回顯
           */
          private void editCategoryView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String cid = request.getParameter("cid");
              int id = Integer.parseInt(cid);//將 "3" 轉爲 3
              Category category = categoryService.findCategoryById(id);
              // 數據回顯 同時顯示 所有分類列表
              List<Category> categoryList = categoryService.findAllCategries();
              if (category != null){
                  request.setAttribute("data",category);
                  if (categoryList.size()>0 && categoryList != null){
                      request.setAttribute("list",categoryList);
                  }
                  request.getRequestDispatcher("/categoryList.jsp").forward(request,response) ;
                  }else{
                      request.setAttribute("data","修改失敗");
                      request.getRequestDispatcher("/message.jsp").forward(request,response);
                  }
              }
      
          /**
           * 修改分類
           */
          public void editCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String cid = request.getParameter("cid");
              String cname = request.getParameter("cname");
              int id = Integer.parseInt(cid);
      
              Category category = new Category();
              category.setCid(id);
              category.setCname(cname);
              int rowNumber = categoryService.editCategory(category);
              if (rowNumber > 0) {
                  System.out.println("修改成功!");
                  response.getWriter().write("修改成功!");//在頁面中顯示結果
              } else {
                  System.out.println("修改失敗!");
              }
          }
      
          /**
           * 刪除分類
           */
          public void delCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              String cid = request.getParameter("cid"); //cid = 3
              int id = Integer.parseInt(cid); // 字符串 轉爲 整數
              int rowNumber = categoryService.delCategory(id); //需要的類型是Integer(int)整數
              if (rowNumber > 0) {
                  System.out.println("刪除成功!");
              } else {
                  System.out.println("刪除失敗!");
              }
          }
      }
      
  • 商品類的實體類
    • Phone
      package cn.javabs.store.entity;
      
      public class Phone {
          private Integer pid; //商品的編號
          private String pname; //商品的名稱
          private String pdescription; //商品描述
          private double price; //單價
          private Integer stock; //庫存
          private String photoPath; //圖片路徑
          private String photoName;
          private Category category; //分類
      
          @Override
          public String toString() {
              return "Phone{" +
                      "pid=" + pid +
                      ", pname='" + pname + '\'' +
                      ", pdescription='" + pdescription + '\'' +
                      ", price=" + price +
                      ", stock=" + stock +
                      ", photoPath='" + photoPath + '\'' +
                      ", photoName='" + photoName + '\'' +
                      ", category=" + category +
                      '}';
          }
      
          public Phone(Integer pid, String pname, String pdescription, double price, Integer stock, String photoPath, String photoName, Category category) {
              this.pid = pid;
              this.pname = pname;
              this.pdescription = pdescription;
              this.price = price;
              this.stock = stock;
              this.photoPath = photoPath;
              this.photoName = photoName;
              this.category = category;
          }
      
          public Phone() {super();}
      
          public Integer getPid() { return pid;}
      
          public void setPid(Integer pid) {this.pid = pid;}
      
          public String getPname() {return pname;}
      
          public void setPname(String pname) {this.pname = pname;}
      
          public String getPdescription() {return pdescription;}
      
          public void setPdescription(String pdescription) {this.pdescription = pdescription;}
      
          public double getPrice() {return price;}
      
          public void setPrice(double price) {this.price = price;}
      
          public Integer getStock() {return stock;}
      
          public void setStock(Integer stock) { this.stock = stock;}
      
          public String getPhotoPath() {return photoPath;}
      
          public void setPhotoPath(String photoPath) { this.photoPath = photoPath;}
      
          public String getPhotoName() { return photoName;}
      
          public void setPhotoName(String photoName) {this.photoName = photoName;}
      
          public Category getCategory() {return category;}
      
          public void setCategory(Category category) { this.category = category;}
      }
      
  • 設計通用類 Page
    • Page
      package cn.javabs.store.commons;
      
      import java.util.List;
      
      public class Page {
          private List records;       // 查詢到的List中的數據 比如說,查詢到的前5條數 據
          private int totalItems;     //總條數 共有多少條
          private int currentPage;    //當前是第幾頁
          private int totalPage;      //共有多少頁
          private int startIndex;     // 開始索引值
          private int pageSize = 5;   //當前頁面有5條數 | 注意: 一般網頁有 10 條
          private int prePageNum;     // 上一頁
          private int nextPageNum;    //下一頁
      
      /*------------------有參數的構造方法(totalItems,currentPage)------------------ -----*/
          /**
           * 根據已知的 總條數totalItems 可以推算出 總頁數totalPage
           */
          public Page(int totalItems, int currentPage) {
              this.totalItems = totalItems;
              this.currentPage = currentPage;
              // 條件: otalItems % pageSize == 0
              // | 滿足條件: totalItems / pageSize | 不滿 足條件: totalItems / pageSize +1
              totalPage = totalItems % pageSize == 0 ? totalItems / pageSize : totalItems / pageSize + 1;
              startIndex = (currentPage-1)* pageSize;
          }
          /*------------------GetterAndSetter方法-----------------------*/
      
          public List getRecords() {
              return records;
          }
      
          public void setRecords(List records) {
              this.records = records;
          }
      
          public int getTotalItems() {
              return totalItems;
          }
      
          public void setTotalItems(int totalItems) {
              this.totalItems = totalItems;
          }
      
          public int getCurrentPage() {
              return currentPage;
          }
      
          public void setCurrentPage(int currentPage) {
              this.currentPage = currentPage;
          }
      
          public int getTotalPage() {
              return totalPage;
          }
      
          public void setTotalPage(int totalPage) {
              this.totalPage = totalPage;
          }
      
          public int getStartIndex() {
              return startIndex;
          }
      
          public void setStartIndex(int startIndex) {
              this.startIndex = startIndex;
          }
      
          public int getPageSize() {
              return pageSize;
          }
      
          public void setPageSize(int pageSize) {
              this.pageSize = pageSize;
          }
      
          /**
           * 獲取上一頁的頁碼
           */
          public int getPrePageNum() {
              // 判斷當前頁面是不是第一頁 如果是第一頁,顯示1 如果不是第一頁,顯示當前頁面減一
              prePageNum = currentPage - 1 > 0 ? currentPage - 1 : 1;
              return prePageNum;
          }
      
          public void setPrePageNum(int prePageNum) {
              this.prePageNum = prePageNum;
          }
      
          /**
           * 獲取下一頁的頁碼
           */
          public int getNextPageNum() {
              // 3 = 3+1 >3? 3(滿足表達式) : 3+1(不滿足表達式)
              // 3 = 2+1 >3? 3(滿足表達式) : 2+1(不滿足表達式)
              // 2 = 1+1 >3? 3(滿足表達式) : 1+1(不滿足表達式)
              nextPageNum = currentPage + 1 > totalPage ? totalPage : currentPage+ 1 ;
              return nextPageNum;
          }
      
          public void setNextPageNum(int nextPageNum) {
              this.nextPageNum = nextPageNum;
          }
      }
      
  • 商品的數據訪問層接口設計 dao
    • PhoneDao
      package cn.javabs.store.dao;
      
      import cn.javabs.store.entity.Phone;
      
      import java.util.List;
      
      public interface PhoneDao {
          
          //添加商品
          int add(Phone phone);
          
          //刪除商品
          int del(Integer pid);
          
          //修改商品
          int update(Phone phone);
          
          // 指定id查詢
          Phone findById(Integer pid);
      
          //查詢所有商品
          List<Phone> findAll(int startIndex , int pageSize);
      
          //查詢總記錄條數(數據庫共有幾條數據)
          int findTotalItems();
      }
      
  • 商品的數據訪問層接口的實現類設計 dao.impl
    • PhoneDaoImpl
      package cn.javabs.store.dao.impl;
      
      import cn.javabs.store.dao.PhoneDao;
      import cn.javabs.store.entity.Phone;
      import cn.javabs.store.util.DruidUtil;
      import org.apache.commons.dbutils.QueryRunner;
      import org.apache.commons.dbutils.handlers.BeanHandler;
      import org.apache.commons.dbutils.handlers.BeanListHandler;
      import org.apache.commons.dbutils.handlers.ScalarHandler;
      
      import java.sql.SQLException;
      import java.util.List;
      
      /**
       * 商品的Dao接口的impl實現類設計
       */
      public class PhoneDaoImpl implements PhoneDao {
          // 增刪改:採用update方法 | 查 :採用query方法
          QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());
      
          /**
           * 添加商品
           */
          @Override
          public int add(Phone phone) {
              int number = 0;
              try {
                  number = qr.update("insert into phone(pid,pname,pdescription,price,stock,photoPath,photoName,cid)"
                  +"values(null,?,?,?,?,?,?,?)",
                          phone.getPid(),
                          phone.getPname(),
                          phone.getPdescription(),
                          phone.getPrice(),
                          phone.getStock(),
                          phone.getPhotoPath(),
                          phone.getPhotoName(),
                          phone.getCategory().getCid()
                  );
                  return number;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      
          /**
           * 刪除商品
           */
          @Override
          public int del(Integer pid) {
              try {
                  int number = qr.update("delete from phone where pid = ?",pid);
                  return number;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      
          /**
           * 修改商品
           */
          @Override
          public int update(Phone phone) {
              int number = 0;
              try {
                  number = qr.update("update phone set pname=?,pdescription=?,price=?,stock=?,photoPath=?,photoName=?,cid=? where pic=?",
                          phone.getPname(),
                          phone.getPdescription(),
                          phone.getPrice(),
                          phone.getStock(),
                          phone.getPhotoPath(),
                          phone.getPhotoName(),
                          phone.getCategory().getCid(),
                          phone.getPid()
                  );
                  return number;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      
          /**
           * 根據指定查詢
           */
          @Override
          public Phone findById(Integer pid) {
              // 第一種寫法: 拆解法
              // Class tel = Phone.class;
              // ResultSetHandler rsh = new BeanHandler(tel);
              // Phone phone = (Phone) queryRunner.query("select * from phone where pid=?",rsh,pid);
              // 第二種寫法: 合併法
              Phone phone = null;
              try {
                  phone = qr.query("select * from phone where pid=?",new BeanHandler<>(Phone.class),pid);
                  return phone;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      
          /**
           * 查詢所有商品(參數有兩個)
           */
          @Override
          public List<Phone> findAll(int startIndex, int pageSize) {
              try {
                  List<Phone> list = qr.query("select * from phone limit ?,?",new BeanListHandler<>(Phone.class),
                          startIndex,pageSize);
                  return list;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
      
          }
      
          /**
           * 查詢總記錄條數(數據庫共有幾條數據)
           */
          @Override
          public int findTotalItems() {
              long longNumber = 0;
              try {
                  longNumber = qr.query("select count(*) from phone",new ScalarHandler<>(1));
                  int number = longNumber.intValue();
                  return number;
              } catch (SQLException e) {
                  throw new RuntimeException(e);
              }
          }
      }
      
  • 商品的業務邏輯層接口設計 service
    • PhoneService
      package cn.javabs.store.service;
      
      import cn.javabs.store.commons.Page;
      import cn.javabs.store.entity.Phone;
      
      public interface PhoneService {
          //查詢全部
          Page findAllPhones(String pageNum);
      
          //根據商品的編號查詢商品
          Phone findPhoneByPid(Integer pid);
      
          //添加商品
          int addPhone(Phone phone);
      
          //修改商品
          int editPhone(Phone phone);
      
          //刪除商品
          int delPhone(Integer pid);
      }
      
  • 商品的業務邏輯層接口的實現類設計 service.impl
    • PhoneServiceImpl
      package cn.javabs.store.service.impl;
      
      import cn.javabs.store.commons.Page;
      import cn.javabs.store.dao.PhoneDao;
      import cn.javabs.store.entity.Phone;
      import cn.javabs.store.service.PhoneService;
      
      /**
       * 商品的service接口的實現類設計
       */
      public class PhoneServiceImpl implements PhoneService {
          /**
           * 查詢全部
           */
          @Override
          public Page findAllPhones(String pageNum) {
              return null;
          }
      
          /**
           * 根據商品的編號查詢商品
           */
          @Override
          public Phone findPhoneByPid(Integer pid) {
              return null;
          }
      
          /**
           * 添加商品
           */
          @Override
          public int addPhone(Phone phone) {
              return 0;
          }
      
          /**
           * 修改商品
           */
          @Override
          public int editPhone(Phone phone) {
              return 0;
          }
      
          /**
           * 刪除商品
           */
          @Override
          public int delPhone(Integer pid) {
              return 0;
          }
      }
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章