java中的接口是类吗
283
2022-12-23
eclipse的web项目实现Javaweb购物车的方法
本文将带领大家实现第一个用eclipse写的第一个javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。
问题分析:
首先我们要了解我们要完成的是什么----购物车。然后那实现购物车的什么呢?是不是往购物车添加心仪商品呢。那是不是还要实现价格的计算呢?既然我们了解问题本质了,那我们接下来就要进行具体实现了。
具体实现:
首先我们要看一下项目整体的结构
下面我们要先创建实体类,就是我们的商品、预购商品和购物车这三个实体类。
Beans
Cart类(这个类是购物车实体类,包含了购物车中添加的商品和总计两个属性。)
package Beans;
import java.util.HashMap;
public class Cart {
private HashMap
private double total;//总计
public HashMap
return cartItems;
}
public void setCartItems(HashMap
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
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
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.*"%>
<% Cart cart=(Cart)request.getSession().getAttribute("cart");
if(cart==null) {
%>
It is nothing!
<%
}
else{
HashMap
double total=cart.getTotal();
%>
Your product list:
<%
Set
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());
};
%>
<%
out.print(" total:"+total+"$");
}
%>
index.jsp
在action=“”属性的配置是不能只写后台配置的“/productServlet”路径,一定要加上<%=request.getContextPath() %>,否则有可能找不着路径。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
Please select the item you want to buy.
Mobile phone(1000$)
Watch(100$)
please input the number!
number:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~