版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/kese7952/article/details/84037487
須知:
本篇教程僅限功能性開發,不包括真實業務邏輯,非常适合初學者上手開發。
手寫代碼從前台貫串背景,沒有花哨的界面和友好性的js腳本提示
由于功能性較多,目前隻手寫了添加和查詢功能。
修改和删除功能後續上線
—
有疑問、或者又更簡單、更優秀的方法請在下方評論區留言!感謝支援!
1.項目分析
網上書店: 使用所學的javaweb知識
郵件的發送
線上支付
添加分類
查詢分類
添加圖書
查詢書籍
分頁顯示和分類名稱擷取
權限控制
功能思維導圖

項目原型預覽
1、項目前台預覽
1.1前台首頁展示:
1.2内容頁展示:
1.3分類展示:
1.4購物車展示:
1.5個人使用者注冊展示:
1.6個人使用者登入展示:
并自動跳轉到首頁:
1.7我的訂單展示:
1.2、項目背景預覽
1.2.1 背景首頁展示
1.2.2 背景添加分類
1.2.3 背景查詢分類
- 2.4 背景添加圖書
1.2.5 背景查詢圖書
2.程式設計準備
|--- 開發環境:
Java環境 1.8 JDK
安裝|--- 連結:https://pan.baidu.com/s/1FSeR4KYZwl2dg6btBkN80Q
提取碼:ftav
複制這段内容後打開百度網盤手機App,操作更友善哦
資料庫環境: 5.6版本
安裝|--- 連結:https://pan.baidu.com/s/16uuaxxu12td5EczlwGVAvQ
提取碼:21pv
複制這段内容後打開百度網盤手機App,操作更友善哦
|--- 采用IDE:
Java's IDE: MyEclipse2016
軟體|--- 連結:https://pan.baidu.com/s/1LZWkopNa6mEAmFndQjDSSg
提取碼:g1gt
複制這段内容後打開百度網盤手機App,操作更友善哦
破解|--- 連結:https://pan.baidu.com/s/1OtE2jFCPMrEWH9rIrPYmAw
提取碼:heva
複制這段内容後打開百度網盤手機App,操作更友善哦
Navicat for Mysql
軟體|--- 連結:https://pan.baidu.com/s/1YMXyfPWZqXrp7NOblhyGGg
提取碼:qufy
複制這段内容後打開百度網盤手機App,操作更友善哦
- 項目編碼:
-
程式編碼設定為UTF-8
步驟:
|-- window - perferences - General - Workspace - Text File Encoding(右側)
JavaWeb實訓項目案例開發之線上圖書網站開發【非常适合初學者】 -
jsp 模闆編碼設定UTF-8
|-- window - perferences - MyEclipse - File and Editors - JSP - Encoding(UnicodeUtf-8) (右側)
JavaWeb實訓項目案例開發之線上圖書網站開發【非常适合初學者】 -
導入Jar和配置檔案:
所需哪些jar包?
|----1. MySQL驅動
|----2. dbcp和pool
|----3. dbUtils
|----4. beanUtils和logging
配置檔案
|----1. jdbc.properties
大家可以通過apache 網站,通路JavaWeb實訓項目案例開發之線上圖書網站開發【非常适合初學者】 http://commons.apache.org
進行下載下傳http://commons.apache.org/
大家也可以通過百度雲連結進行下載下傳目前文章所需Jar包:
連結:
https://pan.baidu.com/s/1h-geYZTe9v9BO4cdeDmR3w提取碼:3jfz
複制這段内容後打開百度網盤手機App,操作更友善哦
JavaWeb實訓項目案例開發之線上圖書網站開發【非常适合初學者】 -
程式設計思想
程式使用分層思想及三層架構的MVC模式進行開發
JavaWeb實訓項目案例開發之線上圖書網站開發【非常适合初學者】
-
-
程式編碼
5.1實體類 - 分類管理
5.2 資料通路層 daopackage com.ambow.entity; import java.io.Serializable; @SuppressWarnings("serial") public class Category implements Serializable { private String id;//UUID private String name; private String description; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
實作類package com.ambow.dao; import java.util.List; import com.ambow.entity.Category; public interface CategoryDao { /** * 添加分類 * @param category */ void save(Category category); /** * 查詢所有分類 * @return 沒找到傳回null */ List<Category> getAllCategories(); /** * 根據主鍵查找主鍵 * @param categoryId * @return 沒找到傳回null */ Category getCategoryById(String categoryId); }
5.3 工具類:資料源連接配接池DbcpUtilpackage com.ambow.dao.impl; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import com.ambow.dao.CategoryDao; import com.ambow.entity.Category; import com.ambow.util.DbcpUtils; public class CategoryDaoImpl implements CategoryDao { QueryRunner queryRunner = new QueryRunner(DbcpUtils.getDataSource()); @Override public void save(Category category) { try { queryRunner.update("insert into categories(id,name,description) values (?,?,?)",category.getId(),category.getName(),category.getDescription()); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public List<Category> getAllCategories() { try { return queryRunner.query("select * from categories", new BeanListHandler<Category>(Category.class)); } catch (SQLException e) { throw new RuntimeException(e); } } @Override public Category getCategoryById(String categoryId) { try { return queryRunner.query("select * from categories where id = ?", new BeanHandler<Category>(Category.class),categoryId); } catch (SQLException e) { throw new RuntimeException(e); } } }
配置檔案:package com.ambow.util; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSourceFactory; public class DbcpUtils { public static DataSource dataSource; static { try { InputStream in = DbcpUtils.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties properties = new Properties(); properties.load(in); dataSource = BasicDataSourceFactory.createDataSource(properties); } catch (Exception e) { throw new RuntimeException(e); } } public static DataSource getDataSource() { return dataSource; } public static Connection getConnection() { try { return dataSource.getConnection(); } catch (SQLException e) { throw new RuntimeException(e); } } }
5.4 業務邏輯服務層 servicedriverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///webbookstore username=root password=sorry
package com.ambow.service; import java.util.List; import com.ambow.commons.Page; import com.ambow.entity.Book; import com.ambow.entity.Category; public interface BusinessService { /*-------------------圖書分類邏輯--------------------*/ /** * 添加分類 * @param category */ void addCategory(Category category); /** * 查詢所有分類 * @return 沒找到傳回null */ List<Category> findAllCategories(); /** * 根據主鍵查找主鍵 * @param categoryId * @return 沒找到傳回null */ Category findCategoryById(String categoryId); }
5.5 控制器 servletpackage com.ambow.service.impl; import java.util.List; import java.util.UUID; import com.ambow.commons.Page; import com.ambow.dao.BookDao; import com.ambow.dao.CategoryDao; import com.ambow.dao.impl.BookDaoImpl; import com.ambow.dao.impl.CategoryDaoImpl; import com.ambow.entity.Book; import com.ambow.entity.Category; import com.ambow.service.BusinessService; /** * 業務邏輯接口的實作類 * @author Mryang * */ public class BusinessServiceImpl implements BusinessService { CategoryDao categoryDao = new CategoryDaoImpl(); BookDao bookDao = new BookDaoImpl(); /*-------------------圖書分類邏輯--------------------*/ @Override public void addCategory(Category category) { category.setId(UUID.randomUUID().toString()); categoryDao.save(category); } @Override public List<Category> findAllCategories() { return categoryDao.getAllCategories(); } @Override public Category findCategoryById(String categoryId) { return categoryDao.getCategoryById(categoryId); }
5.6 工具類 封裝對象的工具類:FillBeanUtilspackage com.ambow.controller; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.Reader; import java.lang.reflect.InvocationTargetException; import java.nio.channels.FileChannel; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.util.FileItemHeadersImpl; import org.apache.commons.fileupload.util.Streams; import org.apache.commons.io.FilenameUtils; import com.ambow.commons.Page; import com.ambow.entity.Book; import com.ambow.entity.Category; import com.ambow.service.BusinessService; import com.ambow.service.impl.BusinessServiceImpl; import com.ambow.util.FilePathUtil; import com.ambow.util.FillBeanUtils; public class ControlServlet extends HttpServlet { private static final long serialVersionUID = 1L; BusinessService service = new BusinessServiceImpl(); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String op = request.getParameter("op"); if("addCategory".equals(op)){ addCategory(request, response); }else if("showAllCategories".equals(op)){ showAllCategories(request, response); }else if("showAllBooks".equals(op)){ showAllBooks(request, response); } else{ System.out.println("error"); } } /***************************圖書分類**********************************/ /** * 查詢所有分類 * @param request * @param response * @throws ServletException * @throws IOException */ public void showAllCategories(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Category> categoryList = service.findAllCategories(); request.setAttribute("categoryList", categoryList); request.getRequestDispatcher("/admin/listCategory.jsp").forward(request, response); } /** * 添加分類 * @param request * @param response * @throws ServletException * @throws IOException */ public void addCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Category category = FillBeanUtils.fillBean(request,Category.class); service.addCategory(category); request.setAttribute("msg", "儲存成功"); request.getRequestDispatcher("/message.jsp").forward(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
5.7 前台頁面: jsppackage com.ambow.util; import javax.servlet.http.HttpServletRequest; import org.apache.commons.beanutils.BeanUtils; /** * 使用自定義泛型進行封裝JavaBean * @author Mryang */ public class FillBeanUtils { public static <T> T fillBean(HttpServletRequest request, Class<T> clazz) { try { T bean = clazz.newInstance(); BeanUtils.copyProperties(bean, request.getParameterMap()); return bean; } catch (Exception e) { throw new RuntimeException(e); } } }
注: 在WebRoot下建立檔案夾 命名為admin,在admin下建立jsp:index.jsp
在admin下建立jsp:header.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp"%> <br /> <h2>歡迎光臨趣讀書屋</h2> </body> </html>
addCategory.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; pageContext.setAttribute("basePath", basePath); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>趣讀書屋背景管理</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="${basePath}css/main.css"> </head> <body> <br /> <br /> <h1>趣讀書屋背景管理</h1> <br /> <a href="${basePath}admin/addCategory.jsp">添加分類</a> <a href="${basePath}servlet/ControlServlet?op=showAllCategories">查詢分類</a> <a href="">添加書籍</a> <a href="">查詢書籍</a> <a href="">待處理訂單</a> <a href="">已處理訂單</a> <br /> <hr/> </body> </html>
查詢分頁:listCategory.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp"%> <form action="${basePath}/servlet/ControlServlet?op=addCategory" method="post"> <table border="1px" width="438px"> <tr> <td>添加分類</td> <td><input type="text" name="name"></td> </tr> <tr> <td>查詢分類</td> <td><textarea rows="3" cols="38" name="description"></textarea> </td> </tr> <tr> <td colspan="2"><input type="submit" value="保 存"></td> </tr> </table> </form> </body> </html>
注: 在WebRoot下建立jsp:message.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp"%> <br /> <table border="1" width="438"> <tr> <th>選擇</th> <th>分類名稱</th> <th>分類描述</th> <th>操作</th> </tr> <c:forEach items="${categoryList}" var="cl" varStatus="vcl"> <tr class="${vcl.index%2==0?'odd':'even' }"> <td><input type="checkbox" name="ids" value="${cl.id}"> </td> <td>${cl.name }</td> <td>${cl.description }</td> <td> <a href="javascript:alert('略')">修改</a> <a href="javascript:alert('略')">删除</a> </td> </tr> </c:forEach> </table> <br /> </body> </html>
5.8 在WebRoot下建立一個檔案夾,命名為css,在css下建立一個檔案,命名為main.css<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp" %> <h1> ${msg } </h1> </body> </html>
@CHARSET "UTF-8"; body{ font-size: 12px; text-align: center; } table{ font-size: 12px; margin: 0 auto; } .odd{ background-color: f3c3f3; } .even{ background-color: c3f3c3; }
- 運作項目
- 效果
作者: 楊校
出處:
https://blog.csdn.net/kese7952分享是快樂的,也見證了個人成長曆程,文章大多都是工作經驗總結以及平時學習積累,基于自身認知不足之處在所難免,也請大家指正,共同進步。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出, 如有問題, 可郵件([email protected])咨詢