1 store 商城:
权限管理系统:最少需要五张表,角色,权限、用户 ,用户——角色,权限——角色,
准备工作:
- lntellj idea 的软件
- jdk 1.8 开发换件
- Tomcat (9.0)
- MySQL 5.7 版本
- 谷歌浏览器
- jar 坐标图
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>store</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>store Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!--数据库驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--选择数据源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<!--导入工具类 : 1.commons-dbutils-->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.2</version>
</dependency>
<!-- 依赖包: 日志包-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- 导入 servlet 的坐标-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- 导入标准标签库-->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<!--文件上传 下载-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- 邮箱的依赖 -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
</dependencies>
</project>
项目的大致运行
store 简绍
这个写的是从用户方面考量所写的一个模拟网上购物的部分功能:
1.网上购物,必须有商品,用户才可以买,
所以可定有一张商品的表,用了商品,用户过来才可以卖,所以肯定用一张用户表,(若用户与商品有某种关系的,就需要另建一张外键关系表把用户和商品链接起来
)
2。用户必须进入这个网站才可以买东西,应进行注册,然后登陆上用户自己的账号,进入主页,主页什么也有,应用的全部查询,当用户明确自己想要什么,可以进行收搜,采用的通过名字进行查询,名字被赋予的id是唯一的进行查询,或者用户大致收搜,采用模胡查询,由于商品比较多,采用分页展示,应用分页功能,当用户选中商品,加入购物车,具有添加商品的功能呢,或者不需,只是不小心点进了购物车,就具备删除商品,从购物车里减去这个用户不要的商品,当用户选完自己想要的东西,准备付钱的时候,页面,就有单价,数量,总价,商品的图片,等因为用户准确无误的计数出购买所有商品的总价格,一扫描,输入用户自己密码就支付成功,买完东西,或者不需在登陆了,就应该有退出的功能。
分类功能简绍
商品功能的简绍
用户功能简绍
页面功能简绍
代码
一 、 分类
1.分类的实体类
package cn.javabs.store.entity;
/**
* 类别
*/
public class Category {
private String cname; // 名称
private Integer cid; // 编号
public Category() {
super();
}
public Category(Integer cid, String cname) {
this.cid = cid;
this.cname = cname;
}
@Override
public String toString() {
return "Category{" +
"cid=" + cid +
", cname='" + cname + '\'' +
'}';
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
2.分类dao实现类
package cn.javabs.store.dao.impl;
import cn.javabs.store.dao.CategoryDao;
import cn.javabs.store.entity.Category;
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 java.sql.SQLException;
import java.util.List;
/**
* 类别 Dao s实现类
*/
public class CategoryDaoImpl implements CategoryDao {
/**
* 准备 QueryRunner
* 因为 QueryRunner 的参数
*/
QueryRunner queryRunner = new QueryRunner(DruidUtil.getDataSource());
/**
* 查询全部类目
* 查询所有是需要两个参数
* 1.字符串 类型 sql 语句
* 2. ResultSetHandler (结果集处理器)对象
* 是一个接口 ,无法new 则无法接口对象
* 实现类
* BeanListHandler (类)
* 需要字节码
* @return
*/
@Override
public List<Category> findAll() {
try {
List<Category> list = queryRunner.query("select cid,cname from category ", new BeanListHandler<Category>(Category.class));
return list;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 指定全部类目
* @param id
* @return
*/
@Override
public Category findById(Integer id) {
try {
Category category = queryRunner.query("select cid,cname from category where cid =? ", new BeanHandler<Category>(Category.class), id);
return category;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 添加类目
* @param category
* @return
*/
@Override
public int add(Category category) {
try {
int num = queryRunner.update("insert into category(cid,cname)value (null,?)",category.getCname());
return num;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 修改类目
* @param category
* @return
*/
@Override
public int update(Category category) {
try {
int num = queryRunner.update("update category set cname=? where cid=? ",
category.getCname(),
category.getCid()
);
return num;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 删除类目
* @param id
* @return
*/
@Override
public int delById(Integer id) {
try {
int num = queryRunner.update("delete from category where cid=?", id);
return num;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
- 分类的dao
package cn.javabs.store.dao;
import cn.javabs.store.entity.Category;
import java.util.List;
public interface CategoryDao {
/**
* 查询全部类目
* @return
*/
List<Category> findAll();
/**
* 指定查询类目
* @param id
* @return
*/
Category findById(Integer id);
/**
* 添加类目
* @param category
* @return
*/
int add(Category category);
/**
* 修改类目
* @param category
* @return
*/
int update(Category category);
/**
* 删除类目
* @param id
* @return
*/
int delById(Integer id);
}
- 分类的service 实现类
package cn.javabs.store.service.impl;
import cn.javabs.store.dao.CategoryDao;
import cn.javabs.store.dao.impl.CategoryDaoImpl;
import cn.javabs.store.entity.Category;
import cn.javabs.store.service.CategoryService;
import java.util.List;
/**
* 业务逻辑层实现类设计
*/
public class CategoryServiceImpl implements CategoryService {
// 创建Dao 层的对象进行 此类 调用 dao 类的方法
CategoryDao categoryDao =new CategoryDaoImpl();
/**
* 查询全部类目
* @return
*/
@Override
public List<Category> findAllCategories() {
List<Category> categoryList= categoryDao.findAll();
return categoryList;
}
/**
* 指定查询类目
*
* @param id
* @return
*/
@Override
public Category findCategoryById(Integer id) {
Category category = categoryDao.findById(id);
return category;
}
/**
* 添加类目
*
* @param category
* @return
*/
@Override
public int addCategory(Category category) {
int number = categoryDao.add(category);
return number;
}
/**
* 修改类目
*
* @param category
* @return
*/
@Override
public int editCategory(Category category) {
int number = categoryDao.update(category);
return number;
}
/**
* 删除类目
*
* @param id
* @return
*/
@Override
public int delCategory(Integer id) {
int number = categoryDao.delById(id);
return number;
}
}
- 分类service
package cn.javabs.store.service;
import cn.javabs.store.entity.Category;
import java.util.List;
/**
* 类别接口
*/
public interface CategoryService {
/**
* 查询全部 List 用的是单列集合 可以存放相同的元素、 存入与取出的顺序一样 ,可以放入相同的数据
* set 存取顺序不一样 不可放入相同的数据
* 数组的大小是固定的
* 集合是可扩展的
* 多行数据类型 返回的是 集合(每一个对象是独立的个体,泛型规定返回的类型 对象)
*
* @return
*/
public List<Category> findAllCategories();
/**
* 指定查询类目
* @param id
* @return
*/
public Category findCategoryById(Integer id);
/**
* 添加类目
* @param category
* @return
*/
public int addCategory(Category category);
/**
* 修改类目
* @param category
* @return
*/
public int editCategory(Category category);
/**
* 删除类目
* @param id
* @return
*/
public int delCategory(Integer id);
}
分类 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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* 类目的Servlet
*/
@WebServlet( "/categoryServlet")
public class CategoryServlet extends HttpServlet {
CategoryService categoryService = new CategoryServiceImpl();
Category category = new Category();
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置 编码 解决乱码的问题 通过字符编码过滤器
// 在 本方法内进行调用如下分类操作的方法
// 去接受index 。jsp 页面的参数
String methodName = request.getParameter("methodName");
if("addCategory".equals(methodName)){
addCategory(request,response);
}else if("delCategory".equals(methodName)){
delCategory(request,response);
}else if("addCategory".equals(methodName)){
addCategory(request,response);
}else if("editCategory".equals(methodName)){
editCategory(request,response);
}else if("findAllCategories".equals(methodName)) {
findAllCategories(request, response);
}else if("editCategoryView".equals(methodName)){
editCategoryView(request,response);
}else {
System.out.println("方法不存在,请您仔细合查方法");
}
}
/**
* 数据回显
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void editCategoryView(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String cid = request.getParameter("cid");
System.out.println("edit");
int id = Integer.parseInt(cid);
Category category = categoryService.findCategoryById(id);
if (category!=null){
request.setAttribute("category",category);
request.getRequestDispatcher("editCategory.jsp").forward(request,response);
}else {
response.getWriter().write("修改失败");
}
// List<Category> categoryList = categoryService.findAllCategories();
// 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);
// }
}
/**
* 查询全部
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findAllCategories(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Category> categoryList = categoryService.findAllCategories();
System.out.println("因为查询index.jsp查询的方法,内容是:"+categoryList);
request.setAttribute("list",categoryList);
request.getRequestDispatcher("/categoryList.jsp").forward(request,response);
}
/**
* 根据id指定查询
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void findById(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Category category = categoryService.findCategoryById(2);
System.out.println(category);
}
/**
* 添加分类
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void addCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 接受参数
String cname = request.getParameter("cname");
category.setCid(null);// 数据库自动生成
category.setCname(cname);
int rowNumber = categoryService.addCategory(category);
if(rowNumber >0){
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
}
/**
* 修改分类
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
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.setCid(id);
category.setCname(cname);
int rowNumber = categoryService.editCategory(category);
if(rowNumber >0){
System.out.println("修改成功");
response.getWriter().write("修改成功");
}else {
System.out.println("修改失败");
}
}
/**
* 删除分类
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void delCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String cid = request.getParameter("cid");
int id = Integer.parseInt(cid);
int rowNumber = categoryService.delCategory(3);
if(rowNumber > 0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
}
}
<%--
Created by IntelliJ IDEA.
User: love
Date: 2020/5/26
Time: 9:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}"></c:set>
<html>
<head>
<title>分类的列表</title>
</head>
<style>
a:link{
text-decoration: none;
color: black;
}
a:hover{
text-decoration: underline;
color: red;
}
.cate-box{
margin: 10px auto;
}
.add-cate-box{
text-align: center;
}
</style>
<body>
<span class="add-cate-box">
<form action="${ctx}/categoryServlet?methodName=addCategory" method="post">
<input type="text" name="cname" placeholder="请填写类别名称..." style="line-height:30px;width: 484px"/>
<input type="submit" value="添加类目">
</form>
</span>
<span class="add-cate-box">
<form action="${ctx}/categoryServlet?methodName=editCategory&cid=${data.cid}" method="post">
<input type="text" name="cname" value="${data.cname}" placeholder="请填写新的类别名称..." style="line-height:30px;width: 484px"/>
<input type="submit" value="修改类目">
</form>
</span>
<table class="cate-box" border="1px" width="600px" cellpadding="0" cellspacing="0">
<thead>
<tr>
<th>
<input type="checkbox">
</th>
<th>编号</th>
<th>名称</th>
<th>操作</th>
</tr>
</thead>
<c:forEach var="c" items="${list}">
<tr align="center">
<td>
<input type="checkbox">
</td>
<td>${
c.cid}</td>
<td>${
c.cname}</td>
<td>
<a href="${ctx}/categoryServlet?methodName=editCategoryView&cid=${c.cid}">修改</a>
<a href="${ctx}/categoryServlet?methodName=delCategory&cid=${c.cid}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
修改分类:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
Created by IntelliJ IDEA.
User: love
Date: 2020/5/28
Time: 22:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<c:set value="${pageContext.request.contextPath}" var="ctx"></c:set>
<html>
<head>
<title>修改分类</title>
</head>
<body>
<form action="${ctx}/categoryServlet?methodName=editCategory&cid=${category.cid}" method="post">
分类名称:<input type="text" name="cname" value="${category.cname}">
<input type="submit" value="修改">
</form>
</body>
</html>
二 、商品
1.商品的实体类
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;
public Phone() {
super();
}
@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 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;
}
private Category category; // 分类
}
- 商品的dao 实体类
package cn.javabs.store.dao.impl;
import cn.javabs.store.dao.PhoneDao;
import cn.javabs.store.entity.Category;
import cn.javabs.store.entity.Phone;
import cn.javabs.store.util.DruidUtil;
import org.apache.commons.dbutils.BasicRowProcessor;
import org