eclipse的web项目实现Javaweb购物车的方法

本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。

问题分析:

首先我们要了解我们要完成的是什么----购物车。然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢。那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了。

具体实现:

首先我们要看一下项目整体的结构

下面我们要先创建实体类,就是我们的商品、预购商品和购物车这三个实体类。

Beans

Cart类(这个类是购物车实体类,包含了购物车中添加的商品和总计两个属性。)

package Beans;

import java.util.HashMap;

public class Cart {
 private HashMap<String,CartItem> cartItems=new HashMap<String,CartItem>();//购物车中添加的商品

 private double total;//总计

 public HashMap<String, CartItem> getCartItems() {
 return cartItems;
 }
 public void setCartItems(HashMap<String, CartItem> cartItems) {
 this.cartItems = cartItems;
 }

 public double getTotal() {
 return total;
 }

 public void setTotal(double total) {
 this.total = total;
 }

}

CartItem类(这个是购物车中添加的商品类,包含有商品、商品个数和小计)

package Beans;

public class CartItem {
  private Product product;//商品

 private int buyNum;//个数

 private double subTotal;//小计

 public Product getProduct() {
 return product;
 }

 public void setProduct(Product product) {
 this.product = product;
 }

 public int getBuyNum() {
 return buyNum;
 }

 public void setBuyNum(int buyNum) {
 this.buyNum = buyNum;
 }

 public double getSubTotal() {
 return subTotal;
 }

 public void setSubTotal(double subTotal) {
 this.subTotal = subTotal;
 }

}

Product类 (这里是具体的商品类,包含有商品编号、商品名和商品价格三个属性)

package Beans;

public class Product {
 private String pid;//商品编号
 private String name;//商品名
 private double price;//商品价格
 public String getPid() {
 return pid;
 }
 public void setPid(String pid) {
 this.pid = pid;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public double getPrice() {
 return price;
 }
 public void setPrice(double price) {
 this.price = price;
 }

 public Product(String pid,String name,double price) {
 // TODO Auto-generated constructor stub
 this.pid = pid;
 this.name = name;
 this.price = price;
 }

}

Service

这个包下面只有一个类,主要的作用是存入商品,并能根据商品编号找到商品。

ProductService类

package Service;

import java.util.HashMap;

import Beans.CartItem;
import Beans.Product;

public class ProductService {

 private HashMap<String,CartItem> cartItems=new HashMap<String,CartItem>();

 public ProductService() //构造函数
 {
  CartItem cartltem1=new CartItem();
  CartItem cartltem2=new CartItem();
  Product product1=new Product("001","Mobilephone",1000);
  Product product2=new Product("002","Watch",100);
  cartltem1.setProduct(product1);
  cartltem2.setProduct(product2);
 cartItems.put("001",cartltem1);
 cartItems.put("002", cartltem2);
 }

 public Product findProductbypid(String pid)
 {
 CartItem cartItem=cartItems.get(pid);
 Product product=cartItem.getProduct();
 return product;
 }
}

Servelet

ProductServlet类 (在这经常会报错 1、httpservelet类无法继承;因为httpservelet类是在tomcat下的所以这里可能是tomcat没有配置入项目或者httpservelet类没有导入,所以要重新导入tomcat。2、dopost和doget两种基础方法使用错误,导致页面传来的数据无法进行处理;解决:servelet类中的方法要与页面选择方法一致。3、乱码,中文乱码;解决:中文的编码最好用utf-8【servlet改编码是对req、resp设置】,并且页面和后台采用的编码要一致。)
这里的路径配置采用的是标签(方便)、也可采用.xml配置.

package Servlet;

import java.io.IOException;
import java.util.HashMap;

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 Beans.Cart;
import Beans.CartItem;
import Beans.Product;
import Service.ProductService;

@WebServlet("/productServlet")
public class ProductServlet extends HttpServlet{

 /**
 *
 */
 private static final long serialVersionUID = 1L;

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

 ProductService productService = new ProductService();

 String pid=(String)req.getParameter("Product");
 int buyNum=Integer.parseInt(req.getParameter("number"));
 HttpSession session=req.getSession();
 Cart cart=(Cart)session.getAttribute("cart");
 if(cart==null) {
 cart=new Cart();
 }
 CartItem cartItem=new CartItem();
 cartItem.setBuyNum(buyNum);

 Product product=productService.findProductbypid(pid);
 cartItem.setProduct(product);
 double subTotal=product.getPrice()*buyNum;
 cartItem.setSubTotal(subTotal);

 HashMap<String, CartItem> cartItems=cart.getCartItems();
 double newSubTotal=0;
 if(cartItems.containsKey(pid)) {
 CartItem item=cartItems.get(pid);

 int oldBuyNum= item.getBuyNum();
 oldBuyNum=oldBuyNum+buyNum;
 item.setBuyNum(oldBuyNum);

 double oldSubTotal= item.getSubTotal();
 newSubTotal=buyNum*product.getPrice();
 oldSubTotal=oldSubTotal+newSubTotal;
 item.setSubTotal(oldSubTotal);
 }
 else {
 cartItems.put(pid, cartItem);
 newSubTotal=buyNum*product.getPrice();
 }
 double total=cart.getTotal()+newSubTotal;
 cart.setTotal(total);
 cart.setCartItems(cartItems);
 session.setAttribute("cart", cart);
 req.getRequestDispatcher("cart.jsp").forward(req, resp);
 }

}

cart.jsp

这里一定要导入其他类 ,用<%@ page import=""%>标签。

<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
 <%@
 page import="Beans.Cart"
 %>
 <%@
 page import="Beans.CartItem"
 %>
 <%@
 page import="Beans.Product"
 %>
 <%@page import="java.util.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<% Cart cart=(Cart)request.getSession().getAttribute("cart");
  if(cart==null) {
 %>
 <p>It is nothing!</p>
 <%
  }
  else{
  HashMap<String, CartItem> cartItems=cart.getCartItems();
  double total=cart.getTotal();
  %>
  Your product list:<br>
  <%
  Set<String> keys=cartItems.keySet();
  Iterator<String> iter = keys.iterator();
  while(iter.hasNext()){
  String key= iter.next();
  CartItem cartItem=cartItems.get(key);
  Product product=cartItem.getProduct();
  out.print(product.getName()+" ") ;
  out.println("price:"+product.getPrice()+"$") ;
  out.println("number:"+cartItem.getBuyNum());
  };
  %>
 <br>
 <%
 out.print("    total:"+total+"$");
 }
 %>

</body>
</html>

index.jsp

在action=“”属性的配置是不能只写后台配置的“/productServlet”路径,一定要加上<%=request.getContextPath() %>,否则有可能找不着路径。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
 Please select the item you want to buy.<br>
 <form action="<%=request.getContextPath() %>/productServlet" method="post">
 Mobile phone(1000$)
 <input name="Product" type="radio" value="001" checked="checked"><br>
 Watch(100$)
 <input name="Product" type="radio" value="002"><br>
 please input the number!
 number:<input name="number" type="number"><br>
 <input type="submit" value="ok!">
 </form>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • javaweb购物车案列学习开发

    本文实例为大家分享了javaweb购物车案列的具体代码,供大家参考,具体内容如下 一.项目目录结构   二.源代码 dao包--dao层:BookDao.java package com.dao; import java.util.Map; import com.DB.DB; import com.domain.Book; public class BookDao { public Map getAll(){ return DB.getAll(); } public Book find(Stri

  • javaweb图书商城设计之购物车模块(3)

    本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下 购物车存储 保存在session中 保存在cookie中 保存在数据库中 1.创建相关类 购物车的结构: CartItem:购物车条目,包含图书和数量 Cart:购物车,包含一个Map /** * 购物车类 */ public class Cart { private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); /*

  • eclipse的web项目实现Javaweb购物车的方法

    本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车.文章会在问题分析.具体实现和常见问题这三块为大家详细解说. 问题分析: 首先我们要了解我们要完成的是什么----购物车.然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢.那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了. 具体实现: 首先我们要看一下项目整体的结构 下面我们要先创建实体类,就是我们的商品.预购商品和购物车这三个实体类. Beans Cart类(这个类是购物车

  • Eclipse将Maven项目打成jar包的方法

    利用Eclipse将项目打包成jar,放入服务器执行. 1:在eclipse中选中项目,右键,Run As,Run Configurations,输入package,然后点击run执行. 2:在eclipse控制台会显示打jar的日志信息,当看到BUILD SUCCESS,代表打包成功. 3:将jar包发布到服务器 首先将middleware-0.0.1-SNAPSHOT.jar包上传到服务器任意目录,然后查看改jar包是否正在执行. ps -ef|grep java 如果存在,则执行 kill

  • Java Web项目中解决中文乱码方法总结(三种最新方法)

    目录 前言 问题背景 下面我说三种方法供大家参考 方法一: 方法二: 第三种方法: Tomcat结构与介绍 bin conf lib logs temp webapps work 前言 JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台.最早由Sun公司定制并发布,后由Oracle负责维护.JavaEE平台规范了在开发企业级web应用中的技术标准.在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会

  • Eclipse Web项目打成war包的方法图解

    war包即Web归档文件,将Web项目打成war包可以直接拷贝到Web服务器发布目录(例如Tomcat服务器webapps目录 ),当Tomcat启动后该压缩文件自动解压缩,war包方便了web工程的发布,那么在Eclipse中如何将Web项目打成war包呢?  1.有如下venus工程:     2.鼠标选中venus工程并点击鼠标右键,出现下图:   3.鼠标箭头滑到Export选项-->Export...,点击"Export...",出现下图:     4.点击上图&quo

  • Eclipse新建web项目流程图解

    Eclipse新建动态页面 作为web小学生,写一下很多人问的基本基本基本问题 新建web项目 出现一下界面: 明明完成后一直点击next,但不要点击finish 知道出现这个界面(最后一个界面) 打上勾(用来自动生成web.xml,如果没有生成,那自己写一个就行) 然后finish,下面是一般的web项目结构 然后你要新建一个jsp或html页面(具体情况具体分析),然后写html代码,用到css在新建.css文件用来弄样式,用到js了在新建js文件,都在WebContent下面. 以上就是本

  • Tomcat 中如何给 web 项目配置虚拟目录的方法

     为什么要给 web 项目配置虚拟目录? 初学 JavaWeb 时,会发现只要我们把 web 项目放到 Tomcat 的 webapps 目录下,再通过 http://localhost:8080/项目名称/某个页面 就可以访问该网站了.可是这样并不符合规范,最好还是把 web 项目文件和 Tomcat 的安装文件分开.那如何实现这个要求呢?当然是给 web 项目配置虚拟目录啦. 如何给 web 项目配置虚拟目录? 前面已经说了,我们要把项目文件和 Tomcat 安装文件分离开.假设我们这里把

  • 在Java Web项目中添加定时任务的方法

    在Java Web程序中加入定时任务,这里介绍两种方式:1.使用监听器注入:2.使用Spring注解@Scheduled注入. 推荐使用第二种形式. 一.使用监听器注入 ①:创建监听器类: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class TimerDataTaskListener implements ServletContextListener

  • Java修改eclipse中web项目的server部署路径问题

    和MyEclipse不一样,在Eclipse中做的Web项目默认是不支持将项目发布到Web服务器上的,会发布到工作空间的某个目录,因此无法在外部启动Tomcat来运行Web项目,只有打开Eclipse中的服务器,才能运行Web项目.所以要对Eclipse进行修改,才能将做好的项目,发布到Tomcat服务器上,发布到服务器上的Webapps文件夹下. 在Eclipse中,默认会把Web项目放到Eclipse的工作空间下的.metadata\.plugins\org.eclipse.wst.serv

  • 详解使用Nginx和uWSGI配置Python的web项目的方法

    基于python的web项目,常见的部署方法有: fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动. wsgi:利用http服务的mod_wsgi模块来跑各个project. 不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快.uWSGI的主要特点如下: 超快的性能. 低内存占用(实测为apache2的mod_wsgi的一半左右). 多app管理

  • 深入浅析java web log4j 配置及在web项目中配置Log4j的技巧

    在上篇文章给大家介绍了Java log4j详细教程,本文给大家介绍java web log4j配置及web项目中配置log4j的技巧.具体详情请看下文吧. 首先给大家提供log4j.jar下载:http://logging.apache.org/log4j/1.2/download.html 一.java web项目使用log4j 1.在web.xml文件中添加 <!-- 配置log4j --> <context-param> <param-name>webAppRoo

随机推荐