eclipse的web项目实现Javaweb购物车的方法
本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。
问题分析:
首先我们要了解我们要完成的是什么----购物车。然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢。那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了。
具体实现:
首先我们要看一下项目整体的结构
下面我们要先创建实体类,就是我们的商品、预购商品和购物车这三个实体类。
Beans
Cart类(这个类是购物车实体类,包含了购物车中添加的商品和总计两个属性。)
packageBeans; importjava.util.HashMap; publicclassCart{ privateHashMapcartItems=newHashMap ();//购物车中添加的商品 privatedoubletotal;//总计 publicHashMap getCartItems(){ returncartItems; } publicvoidsetCartItems(HashMap cartItems){ 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。