欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java servlet 实现的简易购物车

程序员文章站 2022-10-16 15:03:02
首页 2.购买页 3.购物车页 1. 首页代码 发送一个post请求 ......

首页

Java servlet 实现的简易购物车

2.购买页

Java servlet 实现的简易购物车

3.购物车页

Java servlet 实现的简易购物车

 

 

 

 

 

1. 首页代码 发送一个post请求

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>首页</title>
</head>
<body>
<img src="/img/bookcover/shoping.png" alt="购物">
<form action="goshop.do" method="post">
<p>欢迎您</p><br>
<input type="submit" value="进入购物">
</form>
</body>
</html>
2.处理首页post请求的controler
package cc.openhome.controler;
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.linkedhashmap;

@webservlet("/goshop.do")
public class goshop extends httpservlet {

void processrequest(httpservletrequest req,httpservletresponse resp)
throws servletexception,ioexception
{
bookdb bs = new bookdb();
linkedhashmap<string,book> books = bs.getall();
req.setattribute("books",books);
req.getrequestdispatcher("shop.view").forward(req,resp);

}

@override
protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req,resp);

}

@override
protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req,resp);
}
}
3 ,展示购物页面
package cc.openhome.view;

import cc.openhome.controler.*;
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 javax.servlet.http.httpsession;
import java.io.ioexception;
import java.io.printwriter;
import java.util.linkedhashmap;

@webservlet("/shop.view")
public class shopview extends httpservlet {

protected void processrequest(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
resp.setcontenttype("text/html;charset=utf-8");

string bookid = req.getparameter("bookid");
int count = 0;
httpsession session = req.getsession();

// 在点击了购买之后书的数量在加一,否则只刷新
if(session.getattribute("count") != null && bookid != null){
integer c = (integer) session.getattribute("count");
count = c + 1;
}
session.setattribute("count",count);

//购物
cart cart = (cart) req.getsession().getattribute("cart");
if(cart == null){
cart = new cart();
req.getsession().setattribute("cart",cart);
}

businessservice bussiness = new businessservice();
if(count > 0){
bussiness.buybook(bookid,cart);
}
session.setattribute("cart",cart);

printwriter out = resp.getwriter();
out.println("<!doctype html public '-//w3c//dtd html 4.01'" +
"transitional//en");
out.println("<html>");
out.println("<head>");
out.println("<title>购物网页</title>");
out.println("</head>");
out.println("<body>");
out.println("<form action='' method='post'>");
out.println("<table width='100%'>");
out.println("<td><img src='img/bookcover/shop.png' alt='小购物车' width='50'>" +
"<a href='cart.view'>已采购"+count+"书籍</a><td>");
out.println("</table>");
out.println("<table width='100%'>");
out.println("<tr>");
out.println("<td style='color:blue'>书籍编号<td>");
out.println("<td style='color:blue'>书名<td>");
out.println("<td style='color:blue'>图片</td>");
out.println("<td style='color:blue'>价格<td>");
out.println("<td style='color:blue'>购买<td>");
out.println("</tr>");
int i = 0;
linkedhashmap <string,book> books = (linkedhashmap <string,book>) req.getattribute("books");
for (string value : books.keyset()){
i++;
book book = books.get(value);
out.println("<tr>");
out.println("<td>"+book.getid()+"<td>");
out.println("<td>"+book.getname()+"<td>");
out.println("<td><img src='/img/bookcover/book"+i+".jpeg'></td>");
out.println("<td>"+book.getprice()+"<td>");
out.println("<td><a href='"+resp.encodeurl("goshop.do")+"?bookid="+book.getid()+"'>购买此书</a><td>");
out.println("<tr>");

}
/*
int i,j = 0,k = 0;
int len = books.size();
for(i = 0;i < len; i++,j++,k++){
if(j % 3 == 0){
out.println("<tr>");
}
out.println("<td>");
out.println("<img src='/img/bookcover/book"+i+".jpeg'>");
out.println("</td>");
if(k % 3 == 0){
out.println("</tr>");
}
}
j = 0;
k = 0;
for( i = 0;i < len; i++,j++,k++){
if(j % 3 == 0){
out.println("<tr>");
}
out.println("<td>");
out.println("<a href='#'>购买此书</a>");
out.println("</td>");
if(k % 3 == 0){
out.println("</tr>");
}
}
*/
out.println("</table>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();
}

@override
protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req, resp);
}

@override
protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req, resp);
}
}
4.购物车页面
package cc.openhome.controler;

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 javax.servlet.http.httpsession;
import java.io.ioexception;
import java.io.printwriter;
import java.util.map;

@webservlet("/cart.view")
public class cartshow extends httpservlet {
public void processrequest(httpservletrequest req, httpservletresponse resp)
throws servletexception, ioexception
{
resp.setcontenttype("text/html;charset=utf-8");
httpsession session = req.getsession();
cart carts = (cart) session.getattribute("cart");

printwriter out = resp.getwriter();
out.println("<!doctype html public '-//w3c//dtd html 4.01'" +
"transitional//en");
out.println("<html>");
out.println("<head>");
out.println("<title>购物结算</title>");
out.println("</head>");
out.println("<body>");
out.println("<form action='' method='post'>");
out.println("<table width='100%'>");
out.println("<td><img src='img/bookcover/shoping.png' alt='购物车' width='100'>");
out.println("</table>");
out.println("<table width='100%'>");
out.println("<tr>");
out.println("<td style='color:blue'>书籍编号<td>");
out.println("<td style='color:blue'>书名<td>");
out.println("<td style='color:blue'>图片</td>");
out.println("<td style='color:blue'>单价<td>");
out.println("<td style='color:blue'>数量<td>");
out.println("<td style='color:blue'>单本书总价<td>");
out.println("</tr>");
int i = 0;
map<string,cartitem> bookmap = carts.getbookmap();
for (string value : bookmap.keyset()){
i++;
cartitem citem = bookmap.get(value);
book bk = citem.getbook();

out.println("<tr>");
out.println("<td>"+bk.getid()+"<td>");
out.println("<td>"+bk.getname()+"<td>");
out.println("<td><img src='/img/bookcover/book"+i+".jpeg'></td>");
out.println("<td>"+bk.getprice()+"<td>");
out.println("<td>"+citem.getquantity()+"<td>");
out.println("<td>"+citem.getprice()+"<td>");
out.println("</tr>");
}
out.println("<tr>");
out.println("<td style='color:green';font-size:200%'>总价</td>");
out.println("<td style='color:green';font-size:200%'> "+carts.getprice()+"</td>");
out.println("</tr>");
out.println("</table>");
out.println("</form>");
out.println("</body>");
out.println("</html>");
out.close();

}

@override
protected void dopost(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req, resp);
}

@override
protected void doget(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
processrequest(req, resp);
}
}
5,书籍类
package cc.openhome.controler;

import java.util.arraylist;

public class book {
private string id;
private string name;
private double price;
public book(){

}
public book(string id,string name, double price){
this.id = id;
this.name = name;
this.price = price;
}

public string getid() {
return id;
}

public string getname() {
return name;
}

public double getprice() {
return price;
}
}
6,单个购物车类
package cc.openhome.controler;

public class cartitem {
private book book;
private int quantity;
private double price;

public double getprice() {
return book.getprice() * this.quantity;
}

public book getbook() {
return book;
}

public void setbook(book book) {
this.book = book;
}

public int getquantity() {
return quantity;
}

public void setquantity(int quantity) {
this.quantity = quantity;
}

public void setprice(double price) {
this.price = price;
}
}
7,购物车类
package cc.openhome.controler;

import java.util.linkedhashmap;
import java.util.map;

public class cart {
private map<string,cartitem> bookmap = new linkedhashmap<>();

private double price;

public void addbook(book book){
cartitem cartitem = bookmap.get(book.getid());

if(cartitem == null){
cartitem = new cartitem();
cartitem.setbook(book);
cartitem.setquantity(1);

bookmap.put(book.getid(),cartitem);
}else {
cartitem.setquantity(cartitem.getquantity() + 1);
}
}

public double getprice() {
double totalprice = 0;
for(map.entry<string,cartitem> me : bookmap.entryset()){
cartitem cartitem = me.getvalue();

totalprice += cartitem.getprice();
}
return totalprice;
}

public map<string, cartitem> getbookmap() {
return bookmap;
}

public void setbookmap(map<string, cartitem> bookmap) {
this.bookmap = bookmap;
}

public void setprice(double price) {
this.price = price;
}
}
8图书数据源
package cc.openhome.controler;

import java.util.linkedhashmap;

public class bookdb {
private linkedhashmap<string,book> map = new linkedhashmap<>();

public bookdb(){
map.put("1",new book("1","java编程",10.00));
map.put("2",new book("2","c++编程",10.00));
map.put("3",new book("3","c编程",10.00));
}

public linkedhashmap<string,book> getall(){
return map;
}
public book findbook(string id){
return map.get(id);
}
}
总结:对于个人而言:难点在于
1.页面数据的展示.
2.使用resp.encodeurl 在本页面刷新.
3.使用<a href> 重定向并且带了一个参数,把书的id发送给本页面处理.
4.http session 来存储发送数据.
5.书籍,购物车类的设计.