eclipse的web项目实现Javaweb购物车的方法
本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。
问题分析:
首先我们要了解我们要完成的是什么----购物车。然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢。那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了。
具体实现:
首先我们要看一下项目整体的结构
下面我们要先创建实体类,就是我们的商品、预购商品和购物车这三个实体类。
Beans
Cart类(这个类是购物车实体类,包含了购物车中添加的商品和总计两个属性。)
packageBeans;
importjava.util.HashMap;
publicclassCart{
privateHashMapcartItems=newHashMap();//购物车中添加的商品
privatedoubletotal;//总计
publicHashMapgetCartItems(){
returncartItems;
}
publicvoidsetCartItems(HashMapcartItems){
this.cartItems=cartItems;
}
publicdoublegetTotal(){
returntotal;
}
publicvoidsetTotal(doubletotal){
this.total=total;
}
}
CartItem类(这个是购物车中添加的商品类,包含有商品、商品个数和小计)
packageBeans;
publicclassCartItem{
privateProductproduct;//商品
privateintbuyNum;//个数
privatedoublesubTotal;//小计
publicProductgetProduct(){
returnproduct;
}
publicvoidsetProduct(Productproduct){
this.product=product;
}
publicintgetBuyNum(){
returnbuyNum;
}
publicvoidsetBuyNum(intbuyNum){
this.buyNum=buyNum;
}
publicdoublegetSubTotal(){
returnsubTotal;
}
publicvoidsetSubTotal(doublesubTotal){
this.subTotal=subTotal;
}
}
Product类(这里是具体的商品类,包含有商品编号、商品名和商品价格三个属性)
packageBeans;
publicclassProduct{
privateStringpid;//商品编号
privateStringname;//商品名
privatedoubleprice;//商品价格
publicStringgetPid(){
returnpid;
}
publicvoidsetPid(Stringpid){
this.pid=pid;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicdoublegetPrice(){
returnprice;
}
publicvoidsetPrice(doubleprice){
this.price=price;
}
publicProduct(Stringpid,Stringname,doubleprice){
//TODOAuto-generatedconstructorstub
this.pid=pid;
this.name=name;
this.price=price;
}
}
Service
这个包下面只有一个类,主要的作用是存入商品,并能根据商品编号找到商品。
ProductService类
packageService;
importjava.util.HashMap;
importBeans.CartItem;
importBeans.Product;
publicclassProductService{
privateHashMapcartItems=newHashMap();
publicProductService()//构造函数
{
CartItemcartltem1=newCartItem();
CartItemcartltem2=newCartItem();
Productproduct1=newProduct("001","Mobilephone",1000);
Productproduct2=newProduct("002","Watch",100);
cartltem1.setProduct(product1);
cartltem2.setProduct(product2);
cartItems.put("001",cartltem1);
cartItems.put("002",cartltem2);
}
publicProductfindProductbypid(Stringpid)
{
CartItemcartItem=cartItems.get(pid);
Productproduct=cartItem.getProduct();
returnproduct;
}
}
Servelet
ProductServlet类(在这经常会报错1、httpservelet类无法继承;因为httpservelet类是在tomcat下的所以这里可能是tomcat没有配置入项目或者httpservelet类没有导入,所以要重新导入tomcat。2、dopost和doget两种基础方法使用错误,导致页面传来的数据无法进行处理;解决:servelet类中的方法要与页面选择方法一致。3、乱码,中文乱码;解决:中文的编码最好用utf-8【servlet改编码是对req、resp设置】,并且页面和后台采用的编码要一致。)
这里的路径配置采用的是标签(方便)、也可采用.xml配置.
packageServlet;
importjava.io.IOException;
importjava.util.HashMap;
importjavax.servlet.ServletException;
importjavax.servlet.annotation.WebServlet;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
importBeans.Cart;
importBeans.CartItem;
importBeans.Product;
importService.ProductService;
@WebServlet("/productServlet")
publicclassProductServletextendsHttpServlet{
/**
*
*/
privatestaticfinallongserialVersionUID=1L;
@Override
protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{
ProductServiceproductService=newProductService();
Stringpid=(String)req.getParameter("Product");
intbuyNum=Integer.parseInt(req.getParameter("number"));
HttpSessionsession=req.getSession();
Cartcart=(Cart)session.getAttribute("cart");
if(cart==null){
cart=newCart();
}
CartItemcartItem=newCartItem();
cartItem.setBuyNum(buyNum);
Productproduct=productService.findProductbypid(pid);
cartItem.setProduct(product);
doublesubTotal=product.getPrice()*buyNum;
cartItem.setSubTotal(subTotal);
HashMapcartItems=cart.getCartItems();
doublenewSubTotal=0;
if(cartItems.containsKey(pid)){
CartItemitem=cartItems.get(pid);
intoldBuyNum=item.getBuyNum();
oldBuyNum=oldBuyNum+buyNum;
item.setBuyNum(oldBuyNum);
doubleoldSubTotal=item.getSubTotal();
newSubTotal=buyNum*product.getPrice();
oldSubTotal=oldSubTotal+newSubTotal;
item.setSubTotal(oldSubTotal);
}
else{
cartItems.put(pid,cartItem);
newSubTotal=buyNum*product.getPrice();
}
doubletotal=cart.getTotal()+newSubTotal;
cart.setTotal(total);
cart.setCartItems(cartItems);
session.setAttribute("cart",cart);
req.getRequestDispatcher("cart.jsp").forward(req,resp);
}
}
cart.jsp
这里一定要导入其他类,用<%@pageimport=""%>标签。
<%@pageimport="org.apache.jasper.tagplugins.jstl.core.ForEach"%> <%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ pageimport="Beans.Cart" %> <%@ pageimport="Beans.CartItem" %> <%@ pageimport="Beans.Product" %> <%@pageimport="java.util.*"%>Inserttitlehere <%Cartcart=(Cart)request.getSession().getAttribute("cart"); if(cart==null){ %>Itisnothing!
<% } else{ HashMapcartItems=cart.getCartItems(); doubletotal=cart.getTotal(); %> Yourproductlist:
<% Setkeys=cartItems.keySet(); Iterator iter=keys.iterator(); while(iter.hasNext()){ Stringkey=iter.next(); CartItemcartItem=cartItems.get(key); Productproduct=cartItem.getProduct(); out.print(product.getName()+""); out.println("price:"+product.getPrice()+"$"); out.println("number:"+cartItem.getBuyNum()); }; %>
<% out.print("total:"+total+"$"); } %>
index.jsp
在action=“”属性的配置是不能只写后台配置的“/productServlet”路径,一定要加上<%=request.getContextPath()%>,否则有可能找不着路径。
<%@pagelanguage="java"contentType="text/html;charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>Inserttitlehere Pleaseselecttheitemyouwanttobuy.
/productServlet"method="post"> Mobilephone(1000$)
Watch(100$)
pleaseinputthenumber! number:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。