你不得不知道的webapp项目(skshop)之显示产品(1)


一、代码实现

登录成功页(main.jsp)

  • 1、负责接收LoginAction中写入的session,确认是否登录成功,如果登录失败,重定向到登录页(index.jsp)
  • 2、负责链接至显示所有商品(FindProductsAction)以及显示所有订单(FindOrdersAction)的Servlet
<%--
  Created by IntelliJ IDEA.
  User: lazytom
  Date: 2020/9/17
  Time: 8:52
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功页</title>
</head>
<body>
    <%
        if(session.getAttribute("User") == null){
            response.sendRedirect("index.jsp");
            return;
        }
    %>
    <p>
        <a href="/findProducts.do">显示所有产品</a><br/>
        <a href="findOrders.do">显示所有订单</a><br/>
    </p>

</body>
</html>

显示所有产品 (FindProductAction)

  • 调用业务逻辑,返回所有产品信息,将结果写入session后,重定向至产品页(products.jsp)
package com.lazy.servlet;

import com.lazy.domain.Product;
import com.lazy.service.ProductService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class FindProductAtcion extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
        * 1. 获得请求参数值
        * 2. 调用业务逻辑
        * 3. 获得结果
        * 4. 根据结果判断是否需要共享对象(session/request)
        * 5. 转发或者重定向
        */
        ProductService ps = new ProductService();
        List<Product> data = ps.findByAll();
        // session共享
        HttpSession session = request.getSession();
        // 共享
        session.setAttribute("productdata",data);
        response.sendRedirect("products.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

产品页(product.jsp)

  • 1、提供以产品名模糊查询功能 (CXProductAction)
  • 2、获取FindProductAction中传递的session对象,将其遍历输出
  • 3、由于产品表中的产品类型是采用的外键依赖形式,将其设置为超链接,点击超链接调用FindPTypeProudctAtcion使其只显示同种类型的产品
<%@ page import="com.lazy.domain.Product" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: lazytom
  Date: 2020/9/22
  Time: 8:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form name="cx" action="cxProduct.do" method="post">
        <input type="text" id="productname" name="pname" placeholder="请输入查询产品名称">
        <input type="submit" value="查询">
    </form>

    <table border="1">
        <tr>
            <td>产品编码</td>
            <td>产品名称</td>
            <td>产品类型</td>
            <td>产品价格</td>
            <td>操作</td>
        </tr>
        <%
            // 获取共享对象
            List<Product> data = (ArrayList) session.getAttribute("productdata");
            for (Product p : data){
        %>

        <tr>
            <td><%= p.getPid() %></td>
            <td><%= p.getPname() %></td>
            <td><a href="findPTypeProduct.do?ptid=<%= p.getPtid().getPtid() %> "> <%= p.getPtid().getPtname() %> </a></td>
            <td><%= p.getPprice() %></td>
            <td>添加</td>
        </tr>

        <%
            }
        %>

    </table>

</body>
</html>

名称模糊查询(CXProductAction)

  • 首先获取输入框中的产品名称,调用业务逻辑,将结果写入session,重定向 (老套路了)
package com.lazy.servlet;

import com.lazy.domain.Product;
import com.lazy.service.ProductService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class CXProductAction extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String pname = request.getParameter("pname");
        ProductService ps = new ProductService();
        List<Product> data = ps.findByProductName(pname);
        HttpSession session = request.getSession();
        session.setAttribute("productdata",data);
        response.sendRedirect("products.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

根据产品类型显示(FindPTypeProductAction)

package com.lazy.servlet;

import com.lazy.domain.Product;
import com.lazy.service.ProductService;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

public class FindPTypeProductAction extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String ptid = request.getParameter("ptid");
        ProductService ps = new ProductService();
        List<Product> data = ps.findByProductType(ptid);
        HttpSession session = request.getSession();
        session.setAttribute("productdata",data);
        response.sendRedirect("products.jsp");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

显示所有订单

  • 未完成,待补充,但其实都是老套路
package com.lazy.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class FindOrdersAction extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

产品业务逻辑(ProductService)

  • 根据pid进行查询(findByProductId)
  • 根据ptid进行查询(findByProductType)
  • 根据pname进行查询(findByProductName)
  • 查询所有信息(findByAll)
package com.lazy.service;

import com.lazy.domain.PType;
import com.lazy.domain.Product;
import com.lazy.tools.DBHelper;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ProductService {
    private String sql = "";

    public Product findByProductId(String pid){
        sql = "select p.pid,p.pcode,p.pname,pt.ptid,pt.ptname,p.pprice,p.addtime " +
                "from products p " +
                "INNER JOIN ptype pt " +
                "on p.ptid = pt.ptid where p.pid=" + pid;
        List<Map<String,Object>> data = DBHelper.query(sql);
        if (!data.isEmpty()){
            Map<String, Object> row = data.get(0);
            Product product = new Product(
                    Integer.parseInt(row.get("pid").toString())
                    ,row.get("pcode").toString()
                    ,row.get("pname").toString()
                    ,new PType(Integer.parseInt(row.get("ptid").toString()),row.get("ptname").toString())
                    ,Float.parseFloat(row.get("pprice").toString())
                    ,row.get("addtime").toString());
            return product;
        }
        return  null;
    }

    public List<Product> findByProductType(String ptid){
        sql = "select p.pid,p.pcode,p.pname,pt.ptid,pt.ptname,p.pprice,p.addtime " +
                "from products p " +
                "INNER JOIN ptype pt " +
                "on p.ptid = pt.ptid where pt.ptid="+ ptid +" order by p.addtime desc";
        List<Map<String,Object>> data = DBHelper.query(sql);
        List<Product> products = new ArrayList<>();
        for (Map<String,Object> row : data){
            Product product = new Product(
                    Integer.parseInt(row.get("pid").toString())
                    ,row.get("pcode").toString()
                    ,row.get("pname").toString()
                    ,new PType(Integer.parseInt(row.get("ptid").toString()),row.get("ptname").toString())
                    ,Float.parseFloat(row.get("pprice").toString())
                    ,row.get("addtime").toString());
            products.add(product);
        }
        return  products;

    }

    public List<Product> findByProductName(String productName){
        sql = "select p.pid,p.pcode,p.pname,pt.ptid,pt.ptname,p.pprice,p.addtime " +
                "from products p " +
                "INNER JOIN ptype pt " +
                "on p.ptid = pt.ptid where pname like '%"+ productName + "%' order by p.addtime desc";
        List<Map<String,Object>> data = DBHelper.query(sql);
        List<Product> products = new ArrayList<>();
        for (Map<String,Object> row : data){
            Product product = new Product(
                    Integer.parseInt(row.get("pid").toString())
                    ,row.get("pcode").toString()
                    ,row.get("pname").toString()
                    ,new PType(Integer.parseInt(row.get("ptid").toString()),row.get("ptname").toString())
                    ,Float.parseFloat(row.get("pprice").toString())
                    ,row.get("addtime").toString());
            products.add(product);
        }
        return  products;
    }

    public List<Product> findByAll(){
        sql = "select p.pid,p.pcode,p.pname,pt.ptid,pt.ptname,p.pprice,p.addtime " +
                "from products p " +
                "INNER JOIN ptype pt " +
                "on p.ptid = pt.ptid;";
        List<Map<String,Object>> data = DBHelper.query(sql);
        List<Product> products = new ArrayList<>();
        for (Map<String,Object> row : data){
            Product product = new Product(
                    Integer.parseInt(row.get("pid").toString())
                    ,row.get("pcode").toString()
                    ,row.get("pname").toString()
                    ,new PType(Integer.parseInt(row.get("ptid").toString()),row.get("ptname").toString())
                    ,Float.parseFloat(row.get("pprice").toString())
                    ,row.get("addtime").toString());
            products.add(product);
        }
        return  products;
    }
}

二、实现效果图

效果图

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值