Java遇見(jiàn)HTML-servlet(三)

Java遇見(jiàn)HTML的6篇文章技術(shù)較老只是在熟悉java基礎(chǔ)知識(shí)和了解mvc模型思想

第四步:創(chuàng)建items.jsp
先實(shí)現(xiàn)在界面上查看所有商品信息,該類創(chuàng)建在web/TestCart目錄下
跳轉(zhuǎn)到商品詳情頁(yè)時(shí)把商品id帶過(guò)去,這樣能實(shí)現(xiàn)通過(guò)商品id查找商品詳情。

<%@ page import="com.zhidaoauto.dao.ItemsDao" %>
<%@ page import="com.zhidaoauto.Entity.Items" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/29
  Time: 9:56
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>items</title>
</head>
<body>
<%
//    實(shí)例化ItemsDao對(duì)象,并調(diào)用getAllItems方法返回的是個(gè)Items類型的list,再調(diào)用Items中的get方法獲取參數(shù)值
    ItemsDao itemsDao=new ItemsDao();
    ArrayList<Items> list=itemsDao.getAllItems();
    for (Items items:list)
    {

%>
商品id:<%=items.getId()%><br>
商品數(shù)量:<%=items.getNumber()%><br>
商品名稱:<%=items.getName()%><br>
城市:<%=items.getCity()%><br>
圖片:<%=items.getPicture()%><br>
價(jià)格:<%=items.getPrice()%><br>
<%--通過(guò)超鏈接跳轉(zhuǎn)到商品詳情頁(yè)同時(shí)把商品id帶過(guò)去--%>
<a href="itemdetail.jsp?id=<%=items.getId()%>">點(diǎn)擊進(jìn)入查看商品詳情頁(yè)面</a>
<hr>
<%
    }
%>
</body>
</html>

第五步:創(chuàng)建itemdetail.jsp
該頁(yè)面實(shí)現(xiàn)輸入購(gòu)買商品數(shù)量,添加到購(gòu)物車,跳轉(zhuǎn)到購(gòu)物車頁(yè)面(在商品詳情頁(yè)同時(shí)展示瀏覽器過(guò)的前5條商品信息)
讀取代碼時(shí)關(guān)注注釋內(nèi)容,先不關(guān)注“展示瀏覽過(guò)的商品信息”下面會(huì)講。

<%@ page import="com.zhidaoauto.dao.ItemsDao" %>
<%@ page import="com.zhidaoauto.Entity.Items" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/29
  Time: 9:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>itemdetail</title>
</head>
<body>
<%
    //根據(jù)商品id查詢商品詳情
    ItemsDao itemsDao=new ItemsDao();
//    通過(guò)request.getParameter("id")獲取從上一頁(yè)超鏈接中傳過(guò)來(lái)的id參數(shù)值,調(diào)ItemsDao類中的getItemDetail方法
    Items items=itemsDao.getItemDetail(Integer.valueOf(request.getParameter("id")));

%>
<%--先展示商品詳情--%>
商品id:<%=items.getId()%><br>
商品數(shù)量:<%=items.getNumber()%><br>
商品名稱:<%=items.getName()%><br>
城市:<%=items.getCity()%><br>
圖片:<%=items.getPicture()%><br>
價(jià)格:<%=items.getPrice()%><br>
<%
//    通過(guò)session設(shè)置一個(gè)屬性,把當(dāng)前items通過(guò)session傳到cartservlet中,這樣能實(shí)現(xiàn)添加items到購(gòu)物車的功
    request.getSession().setAttribute("items",items);
%>
<%--輸入商品數(shù)量并跳轉(zhuǎn)到cartservlet中,注意路徑必須這樣寫,先跳轉(zhuǎn)到上級(jí)目錄再去找servlet/cartservlet--%>
<%--同時(shí)攜帶一個(gè)action動(dòng)作參數(shù),添加購(gòu)物車所以參數(shù)值定為add--%>
<form action="../servlet/cartservlet?action=add" method="post">
    <table>
        <tr>
            <td>添加商品數(shù)量:</td>
            <td><input type="text" name="numbers"></td>
        </tr>
        <tr>
            <td><input type="submit" value="添加到購(gòu)物車"></td>
        </tr>
    </table>
</form>
<hr>
<h1>展示瀏覽過(guò)的商品信息</h1>
<%
    String list="";
    //從客戶端獲取cookie集合,剛開(kāi)始就能獲取到cookie
    Cookie[] cookies=request.getCookies();
    //遍歷cookie集合
    if (cookies!=null && cookies.length>0){
        for (Cookie c:cookies){
            if (c.getName().equals("ListViewCookie")){
                list=c.getValue();
            }
        }
        list+=request.getParameter("id")+":";

        //如果超過(guò)1000條就清空l(shuí)ist
        String[] arr=list.split(":");
        if (arr!=null && arr.length>0)
        {
            if (arr.length>=1000){
                list="";
            }
        }
    }
    //把list添加到cookie中
    Cookie cookie=new Cookie("ListViewCookie",list);
    //添加到response中這樣才能被下面的方法調(diào)用cookie,才能在返回中結(jié)果中看到cookie信息
    response.addCookie(cookie);

%>

<%
    ArrayList<Items> arrayListitem=itemsDao.getViewlist(list);
    for (Items items1:arrayListitem)
    {

%>

瀏覽過(guò)的商品id:<%=items1.getId()%><br>
瀏覽過(guò)的商品數(shù)量:<%=items1.getNumber()%><br>
瀏覽過(guò)的商品名稱:<%=items1.getName()%><br>
瀏覽過(guò)的城市:<%=items1.getCity()%><br>
瀏覽過(guò)的圖片:<%=items1.getPicture()%><br>
瀏覽過(guò)的價(jià)格:<%=items1.getPrice()%><br>
<hr>
<%
    }
%>

</body>
</html>


**第六步:創(chuàng)建Cart類,購(gòu)物車類,該類實(shí)現(xiàn)了創(chuàng)建map存儲(chǔ)商品信息和用戶添加的商品數(shù)量,同時(shí)實(shí)現(xiàn)了查看添加的商品信息和數(shù)量、刪除商品信息、計(jì)算購(gòu)物車中商品價(jià)格總額的功能
**

package com.zhidaoauto.Entity;

import com.sun.xml.internal.ws.util.QNameMap;
import com.zhidaoauto.dao.ItemsDao;

import java.util.*;
/*
購(gòu)物車類,該類實(shí)現(xiàn)了創(chuàng)建map存儲(chǔ)商品信息和用戶添加的商品數(shù)量,同時(shí)實(shí)現(xiàn)了查看添加的商品信息和數(shù)量、刪除商品信息、計(jì)算購(gòu)物車中商品價(jià)格總額的功能
 */
public class Cart {
//    創(chuàng)建一個(gè)map,key值是Items類型的值,value是添加到購(gòu)物車的商品數(shù)量值,所以是Integer類型
//    把該map定義為私有屬性,并未其創(chuàng)建get方法,在showcart.jsp中會(huì)用到get方法獲取該map
    private Map<Items,Integer> itemsMap=new HashMap<Items, Integer>();

    public Map<Items, Integer> getItemsMap() {
        return itemsMap;
    }

    public void setItemsMap(Map<Items, Integer> itemsMap) {
        this.itemsMap = itemsMap;
    }

    /**
     * 添加商品到購(gòu)物車
     * @param items
     * @param i
     * @return
     */
    public boolean addItems(Items items, int i){

        //實(shí)現(xiàn)不能添加重復(fù)的items,如果添加重復(fù)的商品數(shù)量要累加在一起。
        //先判斷map中是否已經(jīng)添加該items,如果已經(jīng)添加,重新添加該items并且商品數(shù)量要加上之前的商品數(shù)量
        if (itemsMap.containsKey(items)){
            itemsMap.put(items,itemsMap.get(items)+i);
            return true;
        }else {
            itemsMap.put(items,i);
            return true;
        }

    }

//    //查看購(gòu)物車中商品信息,測(cè)試添加和刪除方法
//    public void getItemsMapdetail(){
//        Set<Map.Entry<Items,Integer>> itemsMapEntrySet=itemsMap.entrySet();
//        Iterator<Map.Entry<Items,Integer>> it=itemsMapEntrySet.iterator();
//        while (it.hasNext()){
//            Map.Entry<Items,Integer> itemsentry=it.next();
//            System.out.println("添加的商品id為:"+itemsentry.getKey().getId()+
//                    "  添加的商品名稱為:"+itemsentry.getKey().getName()+
//                    " 添加的商品單價(jià)為:"+itemsentry.getKey().getPrice()+
//                    " 添加的商品總額為:"+getTotalSum()+
//                    "  該商品添加的數(shù)量為:"+itemsentry.getValue());
//        }
//
//    }

    /**
     * 實(shí)現(xiàn)從購(gòu)物車中刪除商品
     * @param items
     * @return
     */
    public boolean deleteItems(Items items){
        itemsMap.remove(items);
        return true;
    }

    /**
     * 計(jì)算添加到購(gòu)物車的商品總額
     * @return
     */
    public double getTotalSum(){
        double sum=0.0;

        //先獲取map中items,再獲取items中的商品價(jià)格,再跟商品數(shù)量相乘,再把所有商品總額相加
        Set<Map.Entry<Items,Integer>> itemMapEntryset=itemsMap.entrySet();
        Iterator<Map.Entry<Items,Integer>> it=itemMapEntryset.iterator();
        while (it.hasNext()){
            Map.Entry<Items,Integer> entry=it.next();
            sum=sum+(entry.getKey().getPrice()*entry.getValue());
        }
        return sum;
    }

//    public static void main(String[] args) {
//        Cart cart=new Cart();
//        //添加商品不能從數(shù)據(jù)庫(kù)中獲取,要從頁(yè)面根據(jù)用戶選擇數(shù)量獲取
////        ItemsDao itemsDao=new ItemsDao();
////        itemsDao.addItems();
////        ArrayList<Items> itemslist=itemsDao.getAllItems();
////        for (Items items:itemslist){
////            cart.addItems(items,2);
////        }
//
//        //創(chuàng)建item實(shí)例添加到map中
//        Items items=new Items(7,"鼠標(biāo)",20,3,"深圳","8888");
//        Items items1=new Items(7,"鼠標(biāo)",20,3,"深圳","8888");
//        cart.addItems(items,1);
//        cart.addItems(items1,2);
//
//
//        System.out.println("添加完查看商品信息:");
//        cart.getItemsMapdetail();
////        cart.deleteItems(itemslist.get(0));
//
////        System.out.println("刪除后查看商品信息:");
////        cart.getItemsMapdetail();
//
//        double totalsum=cart.getTotalSum();
//        System.out.println("所有商品的總額是:"+totalsum);
//
//
//    }




}

第七步:創(chuàng)建cartservlet類主要調(diào)用Cart類處理添加和刪除商品信息,然后實(shí)現(xiàn)跳轉(zhuǎn)到showcart.jsp頁(yè)面

package servlet;

import com.zhidaoauto.Entity.Cart;
import com.zhidaoauto.Entity.Items;

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

/*
cartservlet類主要調(diào)用Cart類處理添加和刪除商品信息,然后實(shí)現(xiàn)跳轉(zhuǎn)到showcart.jsp頁(yè)面
 */
public class cartservlet extends HttpServlet {

    Cart cart=new Cart();

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html;charset=utf-8");
        //獲取action參數(shù)值,判斷參數(shù)值時(shí)add還是delete,如果是add就調(diào)添加方法,是delete就調(diào)刪除方法,添加和刪除后都內(nèi)部轉(zhuǎn)發(fā)到showcart.jsp頁(yè)面
        String action=req.getParameter("action");
        if (action.equals("add")){
            addTocart(req,resp);
            req.getRequestDispatcher("../TestCart/showcart.jsp").forward(req,resp);
        }else if (action.equals("delete")){
            deletefromcart(req,resp);
            req.getRequestDispatcher("../TestCart/showcart.jsp").forward(req,resp);
        }
    }

    public void addTocart(HttpServletRequest req, HttpServletResponse resp){
        //獲取從itemdetail.jsp頁(yè)面添加的商品數(shù)量
        int addtocartitemnumber=Integer.valueOf(req.getParameter("numbers"));
        //獲取從itemdetail.jsp頁(yè)面設(shè)置的session屬性值,獲取的是object類型要強(qiáng)制轉(zhuǎn)換成Items類型
        Items items=(Items)req.getSession().getAttribute("items");
        //調(diào)用Cart類中的addItems方法,傳值items和商品數(shù)量
        cart.addItems(items,addtocartitemnumber);
        //設(shè)置一個(gè)session把cart傳過(guò)去,供下面的showcart.jsp中查看商品信息使用
        req.getSession().setAttribute("cart",cart);
    }

    public void deletefromcart(HttpServletRequest req, HttpServletResponse resp){
        //獲取在showcart.jsp頁(yè)面設(shè)置的要?jiǎng)h除的items的session值
        Items items=(Items)req.getSession().getAttribute("deleteitem");
        cart.deleteItems(items);

    }
}

第八步:創(chuàng)建showchart.jsp頁(yè)面,購(gòu)物車頁(yè)面

查看添加到購(gòu)物車中的商品信息,購(gòu)買商品總金額,在購(gòu)物車頁(yè)面可以刪除添加到購(gòu)物車中的商品。

<%@ page import="com.zhidaoauto.Entity.Cart" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.zhidaoauto.Entity.Items" %>
<%@ page import="java.util.Set" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="com.sun.xml.internal.ws.util.QNameMap" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2020/4/29
  Time: 9:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>showcart</title>
</head>
<body>
<h1>查看購(gòu)物車頁(yè)面</h1>
<hr>
<%
    //獲取在cartservlet的addTocart方法中設(shè)置的session值,得到cart對(duì)象,可以調(diào)用getItemsMap方法獲取map從而獲取商品信息
    Cart cart=(Cart)request.getSession().getAttribute("cart");
    Map<Items,Integer> itemsIntegerMap=cart.getItemsMap();
    Set<Map.Entry<Items,Integer>> itemsentryset=itemsIntegerMap.entrySet();
    Iterator<Map.Entry<Items,Integer>> its=itemsentryset.iterator();
    while (its.hasNext()) {
        Map.Entry<Items,Integer> itementry=its.next();
        Items items=itementry.getKey();
        out.println("商品id:" + items.getId()+"<br>");
        out.println("商品名稱:" + items.getName()+"<br>");
        out.println("商品單價(jià):" + items.getPrice()+"<br>");
        out.println("添加到購(gòu)物車的該商品數(shù)量:" + itementry.getValue()+"<br>");


%>
<%
//設(shè)置一個(gè)session,這樣在刪除item時(shí)能知道要?jiǎng)h除哪一個(gè)item
    request.getSession().setAttribute("deleteitem",items);
%>
把該商品從購(gòu)物車中刪除<a href="../servlet/cartservlet?action=delete">刪除</a>
<hr>
<%
    }
%>
<%--最后調(diào)用商品總額,刪除和新添加商品后都會(huì)到這個(gè)頁(yè)面,都會(huì)重新加載該方法這樣保證商品總額計(jì)算正確--%>
商品總額:<%=cart.getTotalSum()%>
</body>
</html>

頁(yè)面效果
數(shù)據(jù)庫(kù)中數(shù)據(jù)

image.png

image.png

image.png

image.png

返回到item.jsp頁(yè)面重新進(jìn)入商品詳情再添加商品:
image.png

刪除商品:
image.png

image.png

補(bǔ)充:
上面講到的在界面上查看瀏覽過(guò)的商品信息,就需要用到cookie。
在itemdetail.jsp中把瀏覽器過(guò)的商品item的商品id用冒號(hào)“:”分隔符添加到list中,然后存到cookie中,同時(shí)從cookie中獲取該id調(diào)用根據(jù)id查找商品詳情的方法,把該商品信息展示在瀏覽器中。
itemdetail.jsp中的代碼:

<h1>展示瀏覽過(guò)的商品信息</h1>
<%
    String list="";
    //從客戶端獲取cookie集合
    Cookie[] cookies=request.getCookies();
    //遍歷cookie集合
    if (cookies!=null && cookies.length>0){
        for (Cookie c:cookies){
            if (c.getName().equals("ListViewCookie")){
                list=c.getValue();
            }
        }
        list+=request.getParameter("id")+":";

        //如果超過(guò)1000條就清空l(shuí)ist
        String[] arr=list.split(":");
        if (arr!=null && arr.length>0)
        {
            if (arr.length>=1000){
                list="";
            }
        }
    }
    //把list添加到cookie中
    Cookie cookie=new Cookie("ListViewCookie",list);
    //添加到response中這樣才能被下面的方法調(diào)用cookie,才能在返回中結(jié)果中看到cookie信息
    response.addCookie(cookie);

%>

<%
    ArrayList<Items> arrayListitem=itemsDao.getViewlist(list);
    for (Items items1:arrayListitem)
    {

%>

瀏覽過(guò)的商品id:<%=items1.getId()%><br>
瀏覽過(guò)的商品數(shù)量:<%=items1.getNumber()%><br>
瀏覽過(guò)的商品名稱:<%=items1.getName()%><br>
瀏覽過(guò)的城市:<%=items1.getCity()%><br>
瀏覽過(guò)的圖片:<%=items1.getPicture()%><br>
瀏覽過(guò)的價(jià)格:<%=items1.getPrice()%><br>
<hr>
<%
    }
%>

itemdao中的getViewlist方法:

    //獲取最近瀏覽的前5條信息
    public ArrayList<Items> getViewlist(String list){
        ArrayList<Items> itemslist=new ArrayList<Items>();
        if (list!=null && list.length()>0){
            String[] s=list.split(":");
            if (s.length>=5){
                for (int i=s.length-1;i>=s.length-5;i--){
                    int id=Integer.valueOf(s[i]);
                    itemslist.add(getItemDetail(id));
                }
            }else {
                for (int j=s.length-1;j>=0;j--){
                    int id=Integer.valueOf(s[j]);
                    itemslist.add(getItemDetail(id));
                }
            }

            return itemslist;
        }else {
            return null;
        }

    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我們沒(méi)有自己想象中的那么重要。 我們時(shí)常都會(huì)認(rèn)為自己很重要,把自己在一件事或一個(gè)集體里看的太重。事實(shí)是,我們并沒(méi)有...
    文霞_0efe閱讀 78評(píng)論 0 3
  • 流觴曲水一觴詠, 惠風(fēng)和暢亦嘯歌。 海棠詩(shī)社秋爽齋, 黛玉重建桃花社。 海棠桃花詩(shī)自華, 大觀園里聯(lián)詩(shī)樂(lè)。 黛玉桃...
    琴雪_山人閱讀 1,067評(píng)論 22 29
  • 近些天,租的房子到期,因?yàn)橹苓叿孔幼饨鹣陆?,和房東談降低租金,房主不答應(yīng),是走是留,困擾于心。 和房東談了三次,均...
    張齊無(wú)敵閱讀 325評(píng)論 1 7
  • 你是遺世獨(dú)立的一支蓮 沁出人間六月的艷陽(yáng)天 此香芬芳 婆娑自...
    胡渣子先生閱讀 186評(píng)論 0 2
  • 每個(gè)人或許都會(huì)有這樣一首歌:這首歌可以承載的東西很多,其中打動(dòng)你的歌詞,會(huì)在再次聽(tīng)到時(shí),一下子就會(huì)把你拉入某...
    熠熠生星光閱讀 757評(píng)論 0 0

友情鏈接更多精彩內(nèi)容