国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

圖書管理系統【JavaWeb:部署開發環境、解決分類、圖書、前臺頁面模塊】

djfml / 3219人閱讀

摘要:前言鞏固開發模式,做一個比較完整的小項目成果圖該項目包含了兩個部分,前臺和后臺。前臺用于顯示后臺用于管理該項目可分為個模塊來組成分類模塊,用戶模塊,圖書模塊,購買模塊,訂單模塊。

前言

鞏固Servlet+JSP開發模式,做一個比較完整的小項目.

成果圖

該項目包含了兩個部分,前臺和后臺。

前臺用于顯示

后臺用于管理

該項目可分為5個模塊來組成:分類模塊,用戶模塊,圖書模塊,購買模塊,訂單模塊

搭建環境 建立包結構

導入開發包

前臺分幀頁面

index.jsp【沒有body標簽的】

  
    
    
  

head.jsp


歡迎來到購物中心

body是空白的jsp頁面

效果:

后臺分幀頁面

manager.jsp【嵌套了framset標簽,也是沒有body標簽的】


    

    
        
        
    

head.jsp


后臺管理

left.jsp


分類管理



圖書管理

訂單管理

body.jsp是空白的

效果:

分幀的文件夾目錄結構

值得注意的是:

文件夾的名字不能使用“manager”,不然會出現:403 Access Denied錯誤

frameset標簽是可以嵌套的,分列用“cols”,分行用“rows”

導入工具類和方法的代碼

過濾中文亂碼數據

HTML轉義

DAOFactory

JDBC連接池

UUID工具類

c3p0.xml配置文件

這些代碼都可以在我的博客分類:代碼庫中找到!

分類模塊

首先,我們來做分類模塊吧

創建實體Category
    private String id;
    private String name;
    private String description;

    //各種setter、getter
在數據庫創建表
CREATE TABLE category (

  id          VARCHAR(40) PRIMARY KEY,
  name        VARCHAR(10) NOT NULL UNIQUE ,
  description VARCHAR(255)


);
編寫CategoryDAO
/**
 * 分類模塊
 *  1:添加分類
 *  2:查找分類
 *  3:修改分類
 *
 *
 * */
public class CategoryImpl {

    public void addCategory(Category category) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "INSERT INTO category (id, name, description) VALUES(?,?,?)";
        try {
            queryRunner.update(sql, new Object[]{category.getId(), category.getName(), category.getDescription()});

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Category findCategory(String id) {
        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
        String sql = "SELECT * FROM category WHERE id=?";

        try {
            Category category = (Category) queryRunner.query(sql, id, new BeanHandler(Category.class));

            return category;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
 
    }

    public List getAllCategory() {
        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
        String sql = "SELECT * FROM category";

        try {
            List categories = (List) queryRunner.query(sql, new BeanListHandler(Category.class));

             return categories;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
     
    }
}
測試DAO
public class demo {

    @Test
    public void add() {

        Category category = new Category();
        category.setId("2");
        category.setName("數據庫系列");
        category.setDescription("這是數據庫系列");

        CategoryImpl category1 = new CategoryImpl();
        category1.addCategory(category);

    }

    @Test
    public void find() {

        String id = "1";
        CategoryImpl category1 = new CategoryImpl();
        Category category = category1.findCategory(id);

        System.out.println(category.getName());
    }
    @Test
    public void getAll() {


        CategoryImpl category1 = new CategoryImpl();
        List categories = category1.getAllCategory();

        for (Category category : categories) {
            System.out.println(category.getName());
        }
    }

}
抽取成DAO接口
public interface CategoryDao {
    void addCategory(Category category);

    Category findCategory(String id);

    List getAllCategory();
}
后臺頁面的添加分類

在超鏈接上,綁定顯示添加分類的頁面

添加分類

顯示添加分類的JSP頁面


分類名稱:
分類描述:

處理添加分類的Servlet

        if (method.equals("add")) {

            try {
                //把瀏覽器帶過來的數據封裝到bean中
                Category category = WebUtils.request2Bean(request, Category.class);
                category.setId(WebUtils.makeId());

                service.addCategory(category);
                request.setAttribute("message", "添加分類成功!");

            } catch (Exception e) {
                request.setAttribute("message","添加分類失敗");
                e.printStackTrace();
            }
            request.getRequestDispatcher("/message.jsp").forward(request, response);

        }

效果:

后臺頁面的查看分類

在超鏈接上,綁定處理請求的Servlet

        else if (method.equals("look")) {

            List list = service.getAllCategory();
            request.setAttribute("list", list);
            request.getRequestDispatcher("/background/lookCategory.jsp").forward(request, response);

        } 

顯示分類頁面的JSP



    暫時還沒有分類數據哦,請你添加把



    

        
分類名字 分類描述 操作
${category.name} ${category.description} 刪除 修改

效果:

圖書模塊 分析

在設計圖書管理的時候,我們應該想到:圖書和分類是有關系的。一個分類可以對應多本圖書。

為什么要這樣設計?這樣更加人性化,用戶在購買書籍的時候,用戶能夠查看相關分類后的圖書,而不是全部圖書都顯示給用戶,讓用戶一個一個去找。

設計實體
    private String id;
    private String name;
    private String author;
    private String description;
    private double price;

    //記住圖片的名稱
    private String image;

    //記住分類的id
    private String category_id;

    //各種setter和getter
設計數據庫表
CREATE TABLE book (
  id          VARCHAR(40) PRIMARY KEY,
  name        VARCHAR(10) NOT NULL UNIQUE,
  description VARCHAR(255),
  author      VARCHAR(10),
  price       FLOAT,
  image       VARCHAR(100),
  category_id VARCHAR(40),
  CONSTRAINT category_id_FK FOREIGN KEY (category_id) REFERENCES category (id)

);
編寫DAO

/**
 * 圖書模塊
 * 1:添加圖書
 * 2:查看圖書
 * 3:查找圖書的分頁數據【圖書一般來說有很多,所以要分頁】
 */
public class BookDaoImpl {

    public void addBook(Book book) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "INSERT INTO book (id,name,description,author,price,image,category_id) VALUES(?,?,?,?,?,?,?)";
        try {
            queryRunner.update(sql, new Object[]{book.getId(), book.getName(), book.getDescription(), book.getAuthor(), book.getPrice(),book.getImage(), book.getCategory_id()});

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Book findBook(String id) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "SELECT * FROM book WHERE id=?";

        try {
            return (Book) queryRunner.query(sql, id, new BeanHandler(Book.class));
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**得到圖書的分頁數據*/
    public List getPageData(int start, int end) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "SELECT * FROM book limit ?,?";

        try {
            return (List) queryRunner.query(sql, new BeanListHandler(Book.class), new Object[]{start, end});
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**得到按照分類圖書的分頁數據*/
    public List getPageData(int start, int end,String category_id) {

        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        //WHERE字句在limit字句的前邊,注意Object[]的參數位置!
        String sql = "SELECT * FROM book WHERE category_id=? limit ?,?";

        try {
            return (List) queryRunner.query(sql, new BeanListHandler(Book.class), new Object[]{ category_id,start, end});
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 得到圖書的總記錄數
     */
    public int getTotalRecord() {
        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

        String sql = "SELECT COUNT(*) FROM book";

        try {
            return (int) queryRunner.query(sql, new ScalarHandler());
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 得到分類后圖書的總記錄數
     * getCategoryTotalRecord
     */
    public long getCategoryTotalRecord(String category_id) {

        try {
            QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());

            String sql = "SELECT COUNT(*) FROM book WHERE category_id=?";
            return (long) queryRunner.query(sql, category_id, new ScalarHandler());

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

}
測試DAO
public class BookDemo {

    BookDaoImpl bookDao = new BookDaoImpl();


    @Test

    public void add() {
        Book book = new Book();
        book.setId("5");
        book.setName("SQLServer");
        book.setAuthor("我也不知道");
        book.setImage("33333332432");
        book.setPrice(33.22);
        book.setDescription("這是一本好書");
        book.setCategory_id("2");

        bookDao.addBook(book);
    }

    @Test
    public void look() {

        List bookList = bookDao.getPageData(3, 3);

        for (Book book : bookList) {
            System.out.println(book.getName());
        }

        List books = bookDao.getPageData(0,2,"2");

        for (Book book : books) {
            System.out.println(book.getName());

        }
    }

    @Test
    public void find() {
        String id = "2";
        Book book = bookDao.findBook(id);

        System.out.println(book.getName());
    }


}
抽取成DAO接口
public interface BookDao {
    void addBook(Book book);

    Book findBook(String id);

    List getPageData(int start, int end);

    List getPageData(int start, int end, String category_id);

    long getTotalRecord();

       long getCategoryTotalRecord(String category_id);
}
編寫Service層
    /*添加圖書*/
    public void addBook(Book book) {
        bookDao.addBook(book);

    }

    /*查找圖書*/
    public Book findBook(String id) {
        return bookDao.findBook(id);
    }

    /*查找圖書*/
    public Book findBook(String id) {
        return bookDao.findBook(id);
    }

    /*獲取圖書的分頁數據*/
    public Page getPageData(String pageNum) {
        
        Page page=null;
        if (pageNum == null) {
            page = new Page(1, bookDao.getTotalRecord());
        } else {
            page = new Page(Integer.valueOf(pageNum), bookDao.getTotalRecord());
        }

        List books = bookDao.getPageData(page.getStartIndex(), page.getLinesize());
        page.setList(books);
        
        return page;

    }

    /*獲取圖書分類后的分頁數據*/
    public Page getPageData(String currentPageCount,String category_id) {

        Page page=null;
        if (currentPageCount == null) {
            page = new Page(1, bookDao.getCategoryTotalRecord(category_id));
        } else {
            page = new Page(Integer.valueOf(currentPageCount), bookDao.getCategoryTotalRecord(category_id));
        }

        List books = bookDao.getPageData(page.getStartIndex(), page.getLinesize(), category_id);
        page.setList(books);
        return page;

    }

后臺添加圖書

后臺要添加圖書的時候,應該說明圖書的類型是什么。

要想在顯示添加圖書的頁面上知道全部類型的id,就要經過Servlet把類型的集合傳送過去

綁定鏈接
添加圖書
傳送類型集合的Servlet
        String method = request.getParameter("method");
        BussinessServiceImpl service = new BussinessServiceImpl();

        if (method.equals("addUI")) {

            List list = service.getAllCategory();
            request.setAttribute("list", list);
            request.getRequestDispatcher("/background/addBook.jsp").forward(request, response);

        } 
顯示JSP頁面
圖書名稱:
作者:
圖書價錢:
類型:
上傳圖片
詳細描述
處理表單數據Servlet
else if (method.equals("add")) {

            //上傳文件和普通數據分割開,封裝到Book對象上
            Book book = uploadData(request);

            book.setId(WebUtils.makeId());
            service.addBook(book);
            request.setAttribute("message", "添加圖書成功");
            request.getRequestDispatcher("/message.jsp").forward(request, response);
        }

uploadData()方法代碼

    private Book uploadData(HttpServletRequest request) {

        Book book = new Book();
        try{

            //1.得到解析器工廠
            DiskFileItemFactory factory = new DiskFileItemFactory();

            //2.得到解析器
            ServletFileUpload upload = new ServletFileUpload(factory);

            //設置編碼
            upload.setHeaderEncoding("UTF-8");


            //為上傳表單,則調用解析器解析上傳數據
            List list = upload.parseRequest(request);  //FileItem

            //遍歷list,得到用于封裝第一個上傳輸入項數據fileItem對象
            for(FileItem item : list){

                if(item.isFormField()){

                    //得到的是普通輸入項
                    String name = item.getFieldName();  //得到輸入項的名稱
                    String value = item.getString("UTF-8");

                    //使用BeanUtils封裝數據
                    BeanUtils.setProperty(book, name, value);
                }else{

                    //得到上傳輸入項

                    //得到上傳文件名全路徑
                    String filename = item.getName();

                    //截取文件名
                    filename = filename.substring(filename.lastIndexOf("")+1);

                    InputStream in = item.getInputStream();   //得到上傳數據

                    int len = 0;
                    byte buffer[]= new byte[1024];

                    //如果沒有這個目錄,就創建它
                    String savepath = this.getServletContext().getRealPath("/image");
                    File file = new File(savepath);
                    if (!file.exists()) {
                        file.mkdir();
                    }

                    FileOutputStream out = new FileOutputStream(savepath + "" + filename);
                    while((len=in.read(buffer))>0){
                        out.write(buffer, 0, len);
                    }
                    //設置圖片的名字
                    book.setImage(filename);

                    in.close();
                    out.close();

                    //關閉臨時文件
                    item.delete();
                }
            }

        }catch (Exception e) {
            e.printStackTrace();
        }
        return book;
    }

效果:

后臺顯示圖書模塊

由于我們用的是分頁技術,所以我們導入之前寫過的Page類和jsp吧.....這些代碼可以在我分類的代碼庫中找到

綁定超鏈接

查看圖書
Servlet處理請求
        else if (method.equals("look")) {

            String currentPageCount = request.getParameter("currentPageCount");
            Page page = service.getPageData(currentPageCount);

            request.setAttribute("page",page);
            request.getRequestDispatcher("/background/listBook.jsp").forward(request, response);
        }
顯示圖書JSP頁面

Servlet端傳過來的是Page對象,而不是list集合

可以根據記載在Book對象的圖片名稱,弄一個超鏈接,超鏈接指向服務端的圖片,這樣就可以查看圖片了!




    暫時還沒有任何圖書哦





   
           
書名 作者 價錢 描述 圖片 操作
${book.name} ${book.author} ${book.price} ${book.description} 查看圖片 刪除 修改

效果:

前臺頁面

看回我們前臺頁面的成果圖,我們可以把整個body頁面看成是三個div

body占整個div

導航條是一個div

顯示圖書的地方是一個div

設計好大概的布局

html代碼引入css

    

HTML三個div

這是導航條
這是書籍的地方
這是頁碼

CSS代碼:

#body {
    position: relative;
}


#category {
    border: 1px solid #000;
    position: absolute;
    width: 300px;
    height: 400px;
    float: left;
    left: 200px;
    top: 70px;;
}

#bookandpages {
    border: 1px solid #000000;
    position: absolute;
    width: 600px;
    height: 600px;;
    float: left;
    left: 500px;
    margin-left: 50px;
}

#books {
    border: 1px solid #000;
    width: 600px;
    height: 550px;;
}

#page {
    border: 1px solid #000;
    position: absolute;
    height: 48px;
    width: 600px;
}

大概的布局

IndexServlet

在顯示首頁的下部分的時候,應該先去尋找一個Servlet來把數據交給對應的JSP

因為我們的JSP一般都是放在WEB-INF下,是不能直接訪問的。還有就是JSP往往是需要我們后臺的數據的,因此我們使用Servlet來獲取得到數據,再交由JSP來展示就最好不過了。

    

Servlet代碼:

        //得到所有的分類數據,給body頁面
        BussinessServiceImpl service = new BussinessServiceImpl();
        List categories = service.getAllCategory();
        request.setAttribute("categories", categories);
        String currentPageCount = request.getParameter("currentPageCount");

        //得到所有分類的圖書,給body頁面
        Page page = service.getPageData(currentPageCount);
        request.setAttribute("page", page);

        request.getRequestDispatcher("/client/body.jsp").forward(request,response);
JSP顯示數據
書籍分類 :
  • ${categories.name}
  • CSS代碼:

    重要的是:如果div浮動都黏貼在一起了,那么在后邊多加個div,用于清除浮動效果

    #body {
        position: relative;
    }
    
    #category {
        border: 1px solid #000;
        position: absolute;
        width: 300px;
        height: 400px;
        float: left;
        left: 200px;
        top: 70px;;
    }
    
    #bookandpages {
        border: 1px solid #000000;
        position: absolute;
        width: 780px;
        height: 538px;;
        float: left;
        left: 500px;
        margin-left: 50px;
    }
    
    #books{
        margin-left: 50px;
        margin-top: 30px;
    }
    #image{
        float: left;
    }
    #bookinfo{
        float: left;
    }
    #page {
        height: 62px;
        width: 780px;
        position: fixed;
        margin-left: 549px;
        margin-top: 477px;
        text-align: center;
        line-height: 50px;
    }

    效果:

    按照分類顯示圖書

    我們可以根據左邊的導航條來顯示相對應的分類圖書。

    Servlet代碼:

            BussinessServiceImpl service = new BussinessServiceImpl();
            String currentPageCount = request.getParameter("currentPageCount");
            String category_id = request.getParameter("category_id");
    
            Page page = service.getPageData(currentPageCount, category_id);
            List  categories = service.getAllCategory();
    
            request.setAttribute("page", page);
            request.setAttribute("categories", categories);
            request.getRequestDispatcher("/client/body.jsp").forward(request,response);
    效果:

    如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y
    

    文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

    轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68592.html

    相關文章

    • Java3y文章目錄導航

      摘要:前言由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 前言 由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導航哦~想要獲取最新原創的技術文章歡迎關注我的公眾號:Java3y Java3y文章目錄導航 Java基礎 泛型就這么簡單 注解就這么簡單 Druid數據庫連接池...

      KevinYan 評論0 收藏0
    • JavaWeb圖書管理系統【總結】

      摘要:存在則購物項的數量提供購買功能,參數是和。用戶想要購買商品時,判斷用戶是否登陸了,還要判斷購物車是否存在購物車使用來保存,不存在則創建。得到未發貨的全部訂單和已發貨的全部訂單,其實就是檢索出不同狀態的全部訂單。 感想 該項目是目前為止,我寫過代碼量最多的項目了.....雖然清楚是沒有含金量的【跟著視頻來寫的】,但感覺自己也在進步中...... 寫的過程中,出了不少的問題.....非常多...

      張率功 評論0 收藏0
    • 基于SSM實現的圖書管理系統

      摘要:功能相對完整,界面美觀大方下面展示一下系統的部分功能系統登陸圖書分類管理圖書信息管理圖書借閱管理讀者信息管理系統管理以上是基于實現的圖書館管理系統的部分功能實現,系統功能完整,運行無誤,比較適合做畢業設計或課程設計使用。 項目類別: BS-XX-075 運行環境: 開發工具:IDEA / E...

      不知名網友 評論0 收藏0
    • JavaWEB開發21——綜合項目(圖書商城)

      數據庫 create database productstore character set utf8 collate utf8_bin; USE productstore; -- 用戶表 CREATE TABLE `user` ( `id` INT(11) AUTO_INCREMENT, `userName` VARCHAR(20) , `password` VARCHAR(20)...

      raledong 評論0 收藏0
    • Vue-book 2.0 一個移動端簡單的全棧 web APP

      摘要:本項目是一個簡單的全棧項目,前端新手可以拿來練練手。項目實現了一些簡單的功能,后臺可以對圖書進行錄入錄出掃碼或手動,前臺顯示錄入的圖書,并且前臺注冊登錄后可以將書的訂單發給服務器,并存到服務器。 Vue-book 2.0 Github 地址:https://github.com/percy507/v... 【覺得不錯就來個 star 吧 ^_^】 說明(菜鳥請進,大神繞道 ~) 前端...

      wh469012917 評論0 收藏0

    發表評論

    0條評論

    最新活動
    閱讀需要支付1元查看
    <