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ù)




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

刪除商品:


補(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;
}
}