java web 实训 store 功能的介绍

1 store 商城:

权限管理系统:最少需要五张表,角色,权限、用户 ,用户——角色,权限——角色,

准备工作:

  1. lntellj idea 的软件
  2. jdk 1.8 开发换件
  3. Tomcat (9.0)
  4. MySQL 5.7 版本
  5. 谷歌浏览器
  6. 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);
        }

    }
}

  1. 分类的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);
}

  1. 分类的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;
    }
}

  1. 分类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; // 分类


}

  1. 商品的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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值