JavaWeb实训项目案例开发之在线图书网站开发【非常适合初学者】
须知:
本篇教程仅限功能性开发,不包括真实业务逻辑,非常适合初学者上手开发。
手写代码从前台贯串后台,没有花哨的界面和友好性的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(右侧)
jsp 模板编码设置UTF-8
|-- window - perferences - MyEclipse - File and Editors - JSP - Encoding(UnicodeUtf-8) (右侧)
导入Jar和配置文件:
所需哪些jar包?
|----1. MySQL驱动
|----2. dbcp和pool
|----3. dbUtils
|----4. beanUtils和logging配置文件
|----1. jdbc.properties大家可以通过apache 网站,访问
http://commons.apache.org
进行下载http://commons.apache.org/
大家也可以通过百度云链接进行下载当前文章所需Jar包:
链接:https://pan.baidu.com/s/1h-geYZTe9v9BO4cdeDmR3w
提取码:3jfz
复制这段内容后打开百度网盘手机App,操作更方便哦
编程思想
程序使用分层思想及三层架构的MVC模式进行开发
程序编码
5.1实体类 - 分类管理
package com.ambow.entity;import java.io.Serializable;@SuppressWarnings("serial") public class Category implements Serializable {private String id;//UUIDprivate 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;} }
5.2 数据访问层 dao
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);}
实现类
package 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());@Overridepublic 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);}}@Overridepublic List<Category> getAllCategories() {try {return queryRunner.query("select * from categories", new BeanListHandler<Category>(Category.class));} catch (SQLException e) {throw new RuntimeException(e);}}@Overridepublic 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);}} }
5.3 工具类:数据源连接池DbcpUtil
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);}} }
配置文件:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///webbookstore username=root password=sorry
5.4 业务逻辑服务层 service
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); }
实现类
package 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();/*-------------------图书分类逻辑--------------------*/@Overridepublic void addCategory(Category category) {category.setId(UUID.randomUUID().toString());categoryDao.save(category);}@Overridepublic List<Category> findAllCategories() {return categoryDao.getAllCategories();}@Overridepublic Category findCategoryById(String categoryId) {return categoryDao.getCategoryById(categoryId); }
5.5 控制器 servlet
package 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.6 工具类 封装对象的工具类:FillBeanUtils
package 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);} } }
5.7 前台页面: jsp
注: 在WebRoot下创建文件夹 命名为admin,在admin下创建jsp:index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp"%> <br /> <h2>欢迎光临趣读书屋</h2> </body> </html>
在admin下创建jsp:header.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>
addCategory.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>
查询分页:listCategory.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>
注: 在WebRoot下创建jsp:message.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="/admin/header.jsp" %> <h1>${msg }</h1></body> </html>
5.8 在WebRoot下创建一个文件夹,命名为css,在css下创建一个文件,命名为main.css
@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
分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询
JavaWeb实训项目案例开发之在线图书网站开发【非常适合初学者】相关推荐
- JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)
JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...
- JavaWeb实训项目 河南省旅游指南
1 基本信息 1.1 系统名称 河南省旅游指南的设计与实现 1.2 开发运行环境 Window 10 64位 JDK 1.8.0 IDEA 2019版本 MySql 5.1.47 Tomcat 8.5 ...
- javaWeb实训项目总结
先总结一个人完成前后端交互上的总结: 前后端需要分开写,定好前端传到后端的请求内容,url以及参数的名称,避免后台获取不到值,在写完一个功能模块的时候不用急着和前端进行数据调试,可以自己再网页输入请求 ...
- java-web实训项目:simonshop(3)Servlet层
控制层 在src里创建net.hw.shop.servlet包,在里面创建各种控制处理类. 1.登录处理类Loginservlet 修改登录页面信息 运行一下首页 运行Tomcat到网页输入login ...
- java web开发实训心得,【JavaWeb实训心得体会材料】
JavaWeb实训心得体会材料 <JavaWeb实训心得体会材料.doc>由会员分享,可免费在线阅读全文,更多与<JavaWeb实训心得体会材料>相关文档资源请在帮帮文库(ww ...
- java 实训项目_实训方案(JavaWeb项目实训)-
实训方案(JavaWeb项目实训)- 2012-2013学年第一学期 <Java Web项目开发实训>课程实施方案 课程名称(英文):Training of Java Web Projec ...
- python实训项目-黑马程序员上海校区Python21期Django项目实训
黑马程序员上海中心 月薪一万只是起点 关注 晚上十点,一名名Python学生正在酣畅淋漓地撸代码,手指不间断地敲击着键盘,发出机械而清脆的声音. 各个小组在经过为期4天的django项目小组开发,终于 ...
- Java实训项目1:GUI学生信息管理系统 - 实训概述
文章目录 一.实训概述 1.实训目的 2.实训项目简介 3.项目开发思维导图 4.实训日志模板 5.实训报告模板 6.实训考核标准 一.实训概述 1.实训目的 让学生综合运用J2SE有关知识开发[学生 ...
- Java实训项目:GUI学生信息管理系统(2017)
Java实训项目:GUI学生信息管理系统(2017) 实训目的:让学生综合运用J2SE有关知识开发[学生信息管理系统].主要涉及程序控制结构.面向对象编程.图形用户界面.Java数据库应用.MySQL ...
- 实训项目——多语言学习app 总结报告
文章目录 实训项目--多语言学习app 总结报告 1. app 介绍 1. 运行app 2. 界面效果 2. 开发过程 1. 开发环境 2. 项目结构 3. 欢迎界面 4. 用户与学习界面 5. 语言 ...
最新文章
- 有关Run-Time Check Failure #2 - Stack around the variable 'XXX' was corrupted.错误的解决方法
- 绩效面谈的细节,阿里巴巴是如何做的?
- 集成两路MAX1169的STC8G1K08模块,带有两路PWM输出
- lua学习笔记-HelloWorld
- Linux下简单的系统调用
- 加速时光,让你永远70岁的「变老神器」FaceAPP突然爆红,却恐遭美国封杀
- 复变函数画图cosz图像_用matlab绘制x=(1+cosu)cosv,y=(1+cosu)sinv,z=sinu图像?
- influx 操作_InfluxDB学习之InfluxDB的基本操作-阿里云开发者社区
- JSP Servlet Mysql学生宿舍管理系统
- 拓端tecdat|在R语言中使用航空公司复杂网络对疫情进行建模
- html5 background-size,css3 Background-size属性使用说明
- 软考(软件设计师)考点总结 -- 信息安全分析与设计
- ABAPDEMO批量更改BOM组件_SAP刘梦_新浪博客
- win10默认壁纸_仅4M!微软出品的壁纸软件,让桌面每天都不一样!
- Springboot使用POI读写excel(详细)
- TOMCAT的AppBase和DocBase研究
- linux自动备份系统快照,我的 Linux 时光机——Snapper系统级自动备份工具
- cesium 设置时间_Cesium 车辆跟踪事件气泡弹窗一直开启
- mac 修改 DNS
- 人性化,中国制造新境界
热门文章
- 静态网络爬虫之Xpath学习
- ligerui 用html 来初始化 ligerform
- 计算机无线网卡连接网络,台式机怎么连接无线网络?台式电脑不用网卡怎么连接网络?...
- 【转载】在美国找工作秘籍
- psd 直接导入unity
- MapReduce: 大规模集群上的简化数据处理
- 收到一个神盾局的offer,怎么样?
- 什么是文件的绝对路径
- 计算机显示器屏幕什么也不显示,电脑显示器黑屏(显示屏不显示)四种解决方法...
- html水晶按钮图片,20个纯CSS3实现的彩色透明水晶按钮