基于mvc设计模式下的商品管理平台

源代码:

https://github.com/jeffery11586/Leo-Messi

此项目基于MVC设计模式,Servlet做逻辑处理,jsp进行页面展示,DAO层处理数据库

1.数据库建表:

create table jspproduct(
    id int primary key auto_increment,
    name varchar(30) not null,
    description varchar(100) ,
    price int check( price >= 0 ),
    account int check( account >= 0 ),
    status int default 1 check( status in (0, 1) ),
    addtime date
);


create table jspuser(
    id int(10) primary key auto_increment,
    username varchar(15) unique,
    password varchar(6) not null check( length(password)=6),
    realname varchar(20) not null
);
insert into jspuser values(1,'huxz','123456','胡鑫喆');
insert into jspuser values(2,'liucy','123456','刘春阳');
insert into jspuser values(3,'luxw','123456','陆晓伟');
commit;

2.新建idea web项目

3.添加依赖包,add as a library

在这里插入图片描述

4.新建com.xx.util包,添加工具类BaseDAO.java,添加过滤器处理中文乱码,添加配置文件config.properties到src下

在这里插入图片描述

5.新建实体类Product, 新建ProductService接口以及它的实现类ProductServiceImpl, 新建ProductDAO接口以及它的实现类ProductDAOImpl(继承BaseDAO类)

在这里插入图片描述

展示商品信息功能

流程:QueryProductListServlet–>product_list.jsp

在index.jsp中添加商品管理标签,链接为/QueryProductListServlet,并测试链接

<a href="/QueryProductListServlet">商品管理</a>

新建QueryProductListServlet
拿到ProductService的实现类的实例化对象

private   ProductService productService=new ProductServiceImpl();

逻辑处理


 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.调用service的查询商品的列表的方法,返回商品列表
        List<Product> products=productService.selectAllProduct();
        //2.保存商品列表
        request.setAttribute("products",products);
        //3.请求转发到Product_list.jsp,在页面上显示商品列表和信息
        request.getRequestDispatcher("product_list.jsp").forward(request,response);
    }

逐级完成selectAllProduct()方法(最终在DAO层实现):

ProductServiceimpl中私有一个ProductDAO的实现类对象用来下一步调用

 private  ProductDAO productDAO= new ProductDAOIml();

ProductService中定义selectAllProduct方法,实现类中重写方法。
ProductDAO中定义selectAllProduct方法,实现类中重写方法。

//ProductServiceImpl
 @Override
    public List<Product> selectAllProduct() {
        return productDAO.selectAllProduct();//将ProductDAO返回的商品列表返回给Servlet

    }

//ProductDAOIml
 @Override
    public List<Product> selectAllProduct() {
        //uodate
        //findlist 方法为BaseDAO中的方法用来查询所有信息
        return findList(Product.class,"select * from jspproduct ");
    }

此方法的调用流程:
QueryProductListServlet—>ProductService—>ProductServiceImpl—>ProductDAO—>ProductDAOIml—>selectAllProduct() 查询后逐级返回给Servlet

新建product_list.jsp
QueryProductListServlet将在数据库中查询到的商品列表存到request中,请求转发到product_list.jsp,product_list.jsp遍历商品列表,展示商品信息

<a href="product_add.jsp">新增</a>
<table border="1" width="800px" height="300px" align="center">
    <tr>
        <th>id</th>
        <th>商品名称</th>
        <th>商品描述</th>
        <th>商品单价</th>
        <th>商品数量</th>
        <th>商品状态</th>
        <th>商品上架时间</th>
        <th>操作</th>
    </tr>

    <%
    //获取Product对象列表遍历
       List <Product> products = (List<Product>) request.getAttribute("products");
        for (Product product:products){
            
    %>  
        <tr>//展示信息
            <td><%=product.getId()%></td>
            <td><%=product.getName()%></td>
            <td><%=product.getDescription()%></td>
            <td><%=product.getPrice()%></td>
            <td><%=product.getAccount()%></td>
            <td>
                <%
                if(product.getStatus()==1){
                    
                    
                %>
                上架
                <%
                }else {
                %>
                下架
                <%
                }
                
                %>
                
            </td>
            //格式化时间需要引入标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
            <td><fmt:formatDate value="<%=product.getAddtime()%>" pattern="yyyy-MM-dd"/></td>
             &nbsp;&nbsp;
             //删除功能 
            <td><a href="DelectProductServlet?id=<%=product.getId()%>">删除</a>
                &nbsp;&nbsp;&nbsp;
            <a href="QueryProductByIdServlet?id=<%=product.getId()%>">修改</a>
            </td>
        </tr>
    
           <% 
        }

            %>

</table>

在这里插入图片描述

删除功能

流程:Product_list.jsp–>DelectProductServlet–>QueryProductListServlet
在Product_list.jsp中添加页面添加超链接

  <td><a href="DelectProductServlet?id=<%=product.getId()%>">删除</a>

新建 DelectProductServlet
拿到ProductService的实现类的实例化对象

private   ProductService productService=new ProductServiceImpl();

逻辑实现

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        Integer id = Integer.parseInt(request.getParameter("id")); 
        //2.调用Service的删除方法
        productService.deleteProductById(id);
        //3.请求重定向到查询的Servlet
         response.sendRedirect("QueryProductListServlet");   
   
    }

在DAO层中实现deleteProductById方法,不需要返回值,之后重定向到QueryProductListServlet

@Override
    public void deleteProductById(Integer id) {
        update("delete from jspproduct where id=?",id);
    }

测试可以正常删除。

商品添加功能

流程:Product_list.jsp–>product_add.jsp–>AddProductServlet -->QueryProductListServlet

在Product_list.jsp页面添加超链接

<a href="product_add.jsp">新增</a>

新建product_add.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="ADDProductServlet">
<table border="1" width="500px" height="300px" align="center">
    <tr>
        <td>商品名称</td>
        <td><input type="text"name="name" size="25"/></td>
    </tr>
    
    <tr>
        <td>商品单价</td>
        <td><input type="text" name="price" size="25" /></td>
    </tr>
    <tr>
        <td>商品数量</td>
        <td><input type="text" name="account" size="25" /></td>
    </tr>
    <tr>
        <td>商品状态</td>
        <td>
            <input type="radio" name="status" value="0" />下架
            <input type="radio" name="status" value="1" checked="checked"/>上架


        </td>
        
    </tr>
    <tr>
        <td>商品描述</td>
        <td>
            <textarea rows="10" cols="30" name="description"></textarea>
        </td>
    </tr>
    
    <tr>
        <td colspan="2">
            <input type="submit" value="保存" />
        </td>
    </tr>
    
</table>
</form>
</body>
</html>

form表单提交到AddProductServlet
新建AddProductServlet

private ProductService productService=new ProductServiceImpl();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取jsp的参数
        String name = request.getParameter("name");
        String description = request.getParameter("description");
        Integer price = Integer.parseInt(request.getParameter("price"));
        Integer account = Integer.parseInt(request.getParameter("account"));
        Integer status = Integer.parseInt(request.getParameter("status"));
        //2.新建商品类,保存商品的信息
        Product product = new Product();
        product.setName(name);
        product.setDescription(description);
        product.setAccount(account);
        product.setStatus(status);
        product.setPrice(price);
        product.setAddtime(new Date());
        //3.调用Service的addproduct方法
        productService.addProduct(product);
        //4.重定向到查询的servlet
        response.sendRedirect("QueryProductListServlet");
    }

在DAO层实现addProduct方法,无需返回对象,之后重定向到QueryProductListServlet

   @Override
    public void addProduct(Product product) {
        update("insert into jspproduct values(null,?,?,?,?,?,?)",product.getName(),product.getDescription(),product.getPrice(),product.getAccount(),product.getStatus(),product.getAddtime());
    }

测试,添加商品正常。

.商品修改功能

流程:
Product_list.jsp–>QueryProductByIdServlet–>Product_update.jsp–>UpdateProductServlet–>QueryProductListServlet

商品修改功能要先根据id展示这个商品的信息,然后修改后保存。

添加标签到Product_list.jsp

<a href="QueryProductByIdServlet?id=<%=product.getId()%>">修改</a>

新建QueryProductByIdServlet查询该商品的信息

逻辑处理

private ProductService productService=new ProductServiceImpl();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取id
        Integer id = Integer.parseInt(request.getParameter("id"));
        
        //2.根据id查询商品信息返回商品对象
        Product product= productService.selectProductById(id);
        //3.保存商品对象
        request.setAttribute("product",product);
        //4.请求转发到Product_update.jsp
        request.getRequestDispatcher("Product_update.jsp").forward(request,response);
    }

ProductDAOImpl实现selectProductById方法并返回对象存入request

  @Override
    public Product selectProductById(Integer id) {
        return findOne(Product.class,"select * from jspproduct where id = ?",id);
    }

新建Product_update.jsp显示根据id查询到的信息并修改

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<% Product product= (Product)request.getAttribute("product");%>
<form action="UpdateProductServlet">
    <input type="hidden" name="id" value="<%=product.getId()%>">
    <table border="1" width="500px" height="300px" align="center">
        <tr>
            <td>商品名称</td>
            <td><input type="text" name="name" size="25" value="<%=product.getName()%>" /></td>
        </tr>

        <tr>
            <td>商品单价</td>
            <td><input type="text" name="price" size="25" value="<%=product.getPrice()%>"/></td>
        </tr>
        <tr>
            <td>商品数量</td>
            <td><input type="text" name="account" size="25" value="<%=product.getAccount()%>"/></td>
        </tr>
        <tr>
            <td>商品状态</td>
            <td>
                <input type="radio" name="status" value="0" />下架
                <input type="radio" name="status" value="1" checked="checked" />上架


            </td>

        </tr>
        <tr>
            <td>商品描述</td>
            <td>
                <textarea rows="10" cols="30" name="description" ><%=product.getDescription()%></textarea>
            </td>
        </tr>

        <tr>
            <td colspan="2">
                <input type="submit" value="保存" />
            </td>
        </tr>

    </table>
</form>
</body>
</html>

修改提交后到UpdateProductServlet中
新建UpdateProductServlet

 private ProductService productService = new ProductServiceImpl();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取jsp的参数
        String name = request.getParameter("name");
        String description = request.getParameter("description");
        Integer price = Integer.parseInt(request.getParameter("price"));
        Integer account = Integer.parseInt(request.getParameter("account"));
        Integer status = Integer.parseInt(request.getParameter("status"));
        Integer id = Integer.parseInt(request.getParameter("id"));
        //2.新建商品类,保存商品的信息
        Product product = new Product();
        product.setName(name);
        product.setDescription(description);
        product.setAccount(account);
        product.setStatus(status);
        product.setPrice(price);
        product.setAddtime(new Date());
        product.setId(id);
        //3.调用Service的addproduct方法
        productService.updateProduct(product);
        //4.重定向到查询的servlet
        response.sendRedirect("QueryProductListServlet");
    }

到DAO层实现updatproduct方法无需返回对象,之后重定向到QueryProductListServlet即可

@Override
    public void updateProduct(Product product) {
        update("update jspproduct set name=?,description=?,price=?,account=?,status=? where id= ?",product.getName(),product.getDescription(),product.getPrice(),product.getAccount(),product.getStatus(),product.getId());
    }
}

测试,完成所有功能的实现。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值