圖書管理系統(tǒng)【JavaWeb:部署開發(fā)環(huán)境、解決分類吃嘿、圖書祠乃、前臺頁面模塊】

前言

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

成果圖

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

前臺用于顯示

這里寫圖片描述

后臺用于管理

這里寫圖片描述

該項目可分為5個模塊來組成:分類模塊,用戶模塊降瞳,圖書模塊嘱支,購買模塊,訂單模塊挣饥。


搭建環(huán)境

建立包結(jié)構(gòu)

這里寫圖片描述

導(dǎo)入開發(fā)包

這里寫圖片描述

前臺分幀頁面

  • index.jsp【沒有body標(biāo)簽的】

  <frameset rows="25%,*">
    <frame src="${pageContext.request.contextPath}/client/head.jsp"/>
    <frame src="${pageContext.request.contextPath}/client/body.jsp"/>
  </frameset>
  • head.jsp
<body style="text-align: center">
<h1>歡迎來到購物中心</h1>
  • body是空白的jsp頁面

  • 效果:

這里寫圖片描述

后臺分幀頁面

  • manager.jsp【嵌套了framset標(biāo)簽除师,也是沒有body標(biāo)簽的】

<frameset rows="25%,*">
    <frame src="${pageContext.request.contextPath}/background/head.jsp"/>

    <frameset cols="15%,*">
        <frame src="${pageContext.request.contextPath}/background/left.jsp"/>
        <frame src="${pageContext.request.contextPath}/background/body.jsp"/>
    </frameset>
</frameset>
  • head.jsp

<body style="text-align: center">
<h1>后臺管理</h1>
  • left.jsp

<a href="#">分類管理</a>

<br>
<br>
<a href="#">圖書管理</a>
<br>
<br>

<a href="#">訂單管理</a>
<br>
<br>
  • body.jsp是空白的

  • 效果:

這里寫圖片描述

分幀的文件夾目錄結(jié)構(gòu)

這里寫圖片描述

值得注意的是:

  • 文件夾的名字不能使用“manager”,不然會出現(xiàn):403 Access Denied錯誤
  • frameset標(biāo)簽是可以嵌套的扔枫,分列用“cols”汛聚,分行用“rows”

導(dǎo)入工具類和方法的代碼

  • 過濾中文亂碼數(shù)據(jù)
  • HTML轉(zhuǎn)義
  • DAOFactory
  • JDBC連接池
  • UUID工具類
  • c3p0.xml配置文件

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


分類模塊

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

創(chuàng)建實體Category

    private String id;
    private String name;
    private String description;

    //各種setter倚舀、getter

在數(shù)據(jù)庫創(chuàng)建表


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<Category> getAllCategory() {
        QueryRunner queryRunner = new QueryRunner(Utils2DB.getDataSource());
        String sql = "SELECT * FROM category";

        try {
            List<Category> categories = (List<Category>) 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("數(shù)據(jù)庫系列");
        category.setDescription("這是數(shù)據(jù)庫系列");

        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<Category> 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<Category> getAllCategory();
}

后臺頁面的添加分類

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

<a href="${pageContext.request.contextPath}/background/addCategory.jsp" target="body">添加分類</a>
  • 顯示添加分類的JSP頁面

<form action="${pageContext.request.contextPath}/CategoryServlet?method=add" method="post">

    分類名稱:<input type="text" name="name"><br>
    分類描述:<textarea name="description"></textarea><br>
    <input type="submit" value="提交">

</form>
  • 處理添加分類的Servlet

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

            try {
                //把瀏覽器帶過來的數(shù)據(jù)封裝到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<Category> list = service.getAllCategory();
            request.setAttribute("list", list);
            request.getRequestDispatcher("/background/lookCategory.jsp").forward(request, response);

        } 
  • 顯示分類頁面的JSP

<c:if test="${empty(list)}">

    暫時還沒有分類數(shù)據(jù)哦,請你添加把
</c:if>
<c:if test="${!empty(list)}">

    <table border="1px">
        <tr>
            <td>分類名字</td>
            <td>分類描述</td>
            <td>操作</td>
        </tr>

    <c:forEach items="${list}" var="category">

        <tr>
            <td>${category.name}</td>
            <td>${category.description}</td>
            <td>
                <a href="#">刪除</a>
                <a href="#">修改</a>
            </td>
        </tr>

    </c:forEach>

    </table>
</c:if>
  • 效果:
這里寫圖片描述

圖書模塊

分析

在設(shè)計圖書管理的時候讶踪,我們應(yīng)該想到:圖書和分類是有關(guān)系的芯侥。一個分類可以對應(yīng)多本圖書。

為什么要這樣設(shè)計乳讥?這樣更加人性化柱查,用戶在購買書籍的時候,用戶能夠查看相關(guān)分類后的圖書云石,而不是全部圖書都顯示給用戶唉工,讓用戶一個一個去找。

設(shè)計實體


    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

設(shè)計數(shù)據(jù)庫表


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:查找圖書的分頁數(shù)據(jù)【圖書一般來說有很多汹忠,所以要分頁】
 */
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);
        }
    }

    /**得到圖書的分頁數(shù)據(jù)*/
    public List<Book> getPageData(int start, int end) {

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

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

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

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

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

        //WHERE字句在limit字句的前邊淋硝,注意Object[]的參數(shù)位置雹熬!
        String sql = "SELECT * FROM book WHERE category_id=? limit ?,?";

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

    /**
     * 得到圖書的總記錄數(shù)
     */
    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);
        }
    }

    /**
     * 得到分類后圖書的總記錄數(shù)
     * 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<Book> bookList = bookDao.getPageData(3, 3);

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

        List<Book> 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<Book> getPageData(int start, int end);

    List<Book> 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);
    }

    /*獲取圖書的分頁數(shù)據(jù)*/
    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<Book> books = bookDao.getPageData(page.getStartIndex(), page.getLinesize());
        page.setList(books);

        return page;

    }

    /*獲取圖書分類后的分頁數(shù)據(jù)*/
    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<Book> books = bookDao.getPageData(page.getStartIndex(), page.getLinesize(), category_id);
        page.setList(books);
        return page;

    }

后臺添加圖書

后臺要添加圖書的時候,應(yīng)該說明圖書的類型是什么谣膳。

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

綁定鏈接


<a href="${pageContext.request.contextPath}/BookServlet?method=addUI" target="body">添加圖書</a><br>

傳送類型集合的Servlet


        String method = request.getParameter("method");
        BussinessServiceImpl service = new BussinessServiceImpl();

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

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

        } 

顯示JSP頁面

<form action="${pageContext.request.contextPath}/BookServlet?method=add" method="post" enctype="multipart/form-data">

    <table border="1px" width="30%">
        <tr>
            <td> 圖書名稱:</td>
            <td><input type="text" name="name"></td>
        </tr>
        <tr>
            <td> 作者:</td>
            <td><input type="text" name="author"></td>
        </tr>
        <tr>
            <td> 圖書價錢:</td>
            <td><input type="text" name="price"></td>
        </tr>
        <tr>
            <td>類型:</td>
            <td>
                <select name="category_id">
                    <c:forEach items="${list}" var="category">
                        <option value="${category.id}">${category.name}</option>
                    </c:forEach>
                </select>
            </td>
        </tr>
        <tr>
            <td> 上傳圖片</td>
            <td><input type="file" name="image"></td>
        </tr>
        <tr>
            <td>詳細(xì)描述</td>
            <td><textarea name="description"></textarea></td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="提交">
                <input type="reset" value="重置">
            </td>
        </tr>
    </table>
</form>

處理表單數(shù)據(jù)Servlet


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

            //上傳文件和普通數(shù)據(jù)分割開,封裝到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);

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

            //為上傳表單继谚,則調(diào)用解析器解析上傳數(shù)據(jù)
            List<FileItem> list = upload.parseRequest(request);  //FileItem

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

                if(item.isFormField()){

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

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

                    //得到上傳輸入項

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

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

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

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

                    //如果沒有這個目錄,就創(chuàng)建它
                    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);
                    }
                    //設(shè)置圖片的名字
                    book.setImage(filename);

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

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

        }catch (Exception e) {
            e.printStackTrace();
        }
        return book;
    }
  • 效果:
這里寫圖片描述

后臺顯示圖書模塊

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

綁定超鏈接


<a href="${pageContext.request.contextPath}/BookServlet?method=look" target="body">查看圖書</a>

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集合

可以根據(jù)記載在Book對象的圖片名稱,弄一個超鏈接诡壁,超鏈接指向服務(wù)端的圖片济瓢,這樣就可以查看圖片了!


<c:if test="${empty(page.list)}">

    暫時還沒有任何圖書哦

</c:if>

<c:if test="${!empty(page.list)}">

   <table border="1px">
       <tr>
           <td>書名</td>
           <td>作者</td>
           <td>價錢</td>
           <td>描述</td>
           <td>圖片</td>
           <td>操作</td>
       </tr>

       <c:forEach var="book" items="${page.list}" >
           <tr>
               <td>${book.name}</td>
               <td>${book.author}</td>
               <td>${book.price}</td>
               <td>${book.description}</td>
               <td><a href="${pageContext.request.contextPath}/image/${book.image}">查看圖片</a></td>
               <td>
                   <a href="#">刪除</a>
                   <a href="#">修改</a>
               </td>
           </tr>
       </c:forEach>

   </table>
    <br>
    <jsp:include page="page.jsp"/>

</c:if>

效果:

這里寫圖片描述

前臺頁面

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

  • body占整個div
  • 導(dǎo)航條是一個div
  • 顯示圖書的地方是一個div
這里寫圖片描述

設(shè)計好大概的布局

  • html代碼引入css

    <link rel="stylesheet" href="body.css" type="text/css">
  • HTML三個div

<div id="body">
    <div id="category">
        <c:forEach items="${categorys}" var="category">

        </c:forEach>

        這是導(dǎo)航條
    </div>

    <div id="bookandpages">
        <div id="books">
            這是書籍的地方

        </div>

        <div id="page">
            這是頁碼
        </div>
    </div>

</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

在顯示首頁的下部分的時候葬荷,應(yīng)該先去尋找一個Servlet來把數(shù)據(jù)交給對應(yīng)的JSP

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


    <frame src="${pageContext.request.contextPath}/IndexServlet"/>
  • Servlet代碼:

        //得到所有的分類數(shù)據(jù),給body頁面
        BussinessServiceImpl service = new BussinessServiceImpl();
        List<Category> 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顯示數(shù)據(jù)


<div id="body">
    <div id="category">
        書籍分類 :
        <br>
        <c:forEach items="${categories}" var="categories">
            <li>
                <a href="${pageContext.request.contextPath}/ListBookServlet?category_id=${categories.id}">${categories.name}</a>
            </li>
        </c:forEach>
    </div>

    <div id="bookandpages">
        <c:forEach items="${page.list}" var="book">
        <div id="books">

                <div id="image">
                    <img src="${pageContext.request.contextPath}/image/${book.image}" width="83px" height="118px">
                </div>
                <div id="bookinfo">
                    <li>
                        書名:${book.name}
                    </li>
                    <li>價格:${book.price}</li>
                    <li>作者:${book.author}</li>
                </div>

        </div>
            <%--這里要清除浮動雕崩,十分重要!--%>
            <div style="clear: both"></div>
        </c:forEach>

    </div>
    <div id="page">
        <jsp:include page="/client/page.jsp"/>
    </div>
</div>

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;
}
  • 效果:
這里寫圖片描述

按照分類顯示圖書

我們可以根據(jù)左邊的導(dǎo)航條來顯示相對應(yīng)的分類圖書。

  • 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<Category>  categories = service.getAllCategory();

        request.setAttribute("page", page);
        request.setAttribute("categories", categories);
        request.getRequestDispatcher("/client/body.jsp").forward(request,response);

效果:

這里寫圖片描述

如果文章有錯的地方歡迎指正尝偎,大家互相交流饶火。習(xí)慣在微信看技術(shù)文章的同學(xué),可以關(guān)注微信公眾號:Java3y

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末致扯,一起剝皮案震驚了整個濱河市肤寝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抖僵,老刑警劉巖鲤看,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耍群,居然都是意外死亡义桂,警方通過查閱死者的電腦和手機找筝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慷吊,“玉大人呻征,你說我怎么就攤上這事“战剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵沐祷,是天一觀的道長嚷闭。 經(jīng)常有香客問我,道長赖临,這世上最難降的妖魔是什么胞锰? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮兢榨,結(jié)果婚禮上嗅榕,老公的妹妹穿的比我還像新娘。我一直安慰自己吵聪,他們只是感情好凌那,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吟逝,像睡著了一般帽蝶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上块攒,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天励稳,我揣著相機與錄音,去河邊找鬼囱井。 笑死驹尼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庞呕。 我是一名探鬼主播新翎,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼千扶!你這毒婦竟也來了料祠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤澎羞,失蹤者是張志新(化名)和其女友劉穎髓绽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妆绞,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡顺呕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年枫攀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片株茶。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡来涨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出启盛,到底是詐尸還是另有隱情蹦掐,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布僵闯,位于F島的核電站卧抗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鳖粟。R本人自食惡果不足惜社裆,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望向图。 院中可真熱鬧泳秀,春花似錦、人聲如沸榄攀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航攒。三九已至磺陡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漠畜,已是汗流浹背币他。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憔狞,地道東北人蝴悉。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像瘾敢,于是被迫代替她去往敵國和親拍冠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法簇抵,類相關(guān)的語法庆杜,內(nèi)部類的語法,繼承相關(guān)的語法碟摆,異常的語法晃财,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • 望著窗外各種樹木依然綠意盎然挺立在初冬的朝陽里,盡管暖氣還沒有來典蜕,但陽光灑進(jìn)來沒有絲毫清冷断盛。 記得上大學(xué)時開始一直...
    遇見筆墨閱讀 393評論 0 2
  • 我們必須要接受罗洗,犯錯不但不是意外、不是不該發(fā)生的事钢猛,而是必然伙菜、是歡迎發(fā)生的事。每一個錯誤命迈,都提供了一個成長的契機贩绕。...
    九迪閱讀 207評論 0 0
  • 孜孜不倦丧叽,不僅不慢 ——《人生果實》觀后感 這部紀(jì)錄片,我看了兩遍公你,第一遍是和兒子在去濟南學(xué)琴的火車上看的...
    祖邇閱讀 1,297評論 0 1