servlet-cookie和session应用示例:模拟购物车

本文详细介绍了一个基于Servlet的购物车系统的设计与实现过程,包括业务对象抽象、Servlet请求处理、用户登录、商品购买及购物车管理等功能。系统采用会话(session)存储购物车信息,实现了商品添加、删除及列表展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1.  根据需求抽象出业务对象
   User{
   usrename;
   password;
   }
  
  
   ShoppingCarItem{
   product;
   num;
   }
  
   ShoppingCar{
   List<ShoppingCarItem>
   }
  
2. 写Servlet处理请求
  ...


domain:
package cn.itcast.cd.domain;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class ShoppingCar {
	private List<ShoppingCarItem> list = new ArrayList<ShoppingCarItem>();
	
	/**
	 * 根据货品和数量往购物车中添加
	 * @param product
	 * @param num
	 */
	public void add(String product,Integer num){
		ShoppingCarItem carItem = new ShoppingCarItem();
		carItem.setNum(num);
		carItem.setProduct(product);
		carItem.setId(UUID.randomUUID().toString());
		list.add(carItem);
	}
	
	/**
	 * 根据唯一的标示删除购物车中对应的明细
	 * @param id
	 */
	public void remove(String id){
		for (ShoppingCarItem item : list) {
			 if(id.equals(item.getId())){
				 list.remove(item);
				 break;
			 }
		}
	}	
	
	public List<ShoppingCarItem> getList() {
		return list;
	}
	
}

package cn.itcast.cd.domain;

public class ShoppingCarItem {
	private String product;
	private Integer  num;
	private String id;  //给每一个明细生成一个唯一的id
	public String getProduct() {
		return product;
	}
	public void setProduct(String product) {
		this.product = product;
	}
	public Integer getNum() {
		return num;
	}
	public void setNum(Integer num) {
		this.num = num;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
}

package cn.itcast.cd.domain;

public class User {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}


servlet:

package cn.itcast.cd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.itcast.cd.domain.ShoppingCar;

public class BuyServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
	 //1.  获取请求中的参数.
		String product = request.getParameter("product");
		String num	 = request.getParameter("num");
     //2. 获取到购物车
		   //2.1  首先要到session中找一下是否已经有了购物车. 如果有的话就不需要创建了... 直接把货品放到购物车中就可以了
			HttpSession httpSession = request.getSession();
			ShoppingCar shoppingCar = (ShoppingCar)httpSession.getAttribute("SHOPINGCAR_IN_SESSION");
			if(shoppingCar==null){ //说明是第一次购物. 还没有购物车的
				//2.2  如果从session中没有找到购物车. 需要新创建一个购物车并且放到session中.为了下次购物使用这个购物车
				shoppingCar = new ShoppingCar();
				httpSession.setAttribute("SHOPINGCAR_IN_SESSION", shoppingCar);
			}
			shoppingCar.add(product, Integer.parseInt(num));
			PrintWriter pw = response.getWriter();
			pw.println("添加成功<br/>");
			pw.println("<a href='/buy.html'>继续购物</a><br/>");
			pw.println("<a href='/list'>管理购物</a><br/>");
		
	}
}

package cn.itcast.cd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.itcast.cd.domain.ShoppingCar;
import cn.itcast.cd.domain.ShoppingCarItem;
import cn.itcast.cd.domain.User;

public class ListServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		
		HttpSession httpSession = request.getSession();
		//1. 先获取session中的User
		 User user  = (User) httpSession.getAttribute("USER_IN_SESSION");
		 PrintWriter pw = response.getWriter();
		 pw.println("当前用户为:"+user.getUsername()+"<br/>");
		//2. 获取session的购物车
		 		ShoppingCar shoppingCar = (ShoppingCar) httpSession.getAttribute("SHOPINGCAR_IN_SESSION");
		      //2.1  如果在session中购物车的话,列出购物车中的明细
		 	   if(shoppingCar!=null){
		 		   for (ShoppingCarItem item : shoppingCar.getList()) {
		 			   pw.println("货品:"+item.getProduct()+"  数量:"+item.getNum()+"<br/>");
		 		   }
		 	   }else{
		 		   //2.2 在session中没有购物车的话.提示用户没有当前用户名购物车
		 		    pw.println("当前用户没有购物车.");
		 	   }
		
		
		
	}
}

package cn.itcast.cd.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.itcast.cd.domain.User;

public class LoginServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		
		//1. 接收请求中的数据封装对象
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		User user = new User();
		user.setPassword(password);
		user.setUsername(username);
		
		//2. 将用户方到session中供ListServlet从session中访问到User
		HttpSession  httpSession = request.getSession();
		httpSession.setAttribute("USER_IN_SESSION", user);
		
		PrintWriter pw = response.getWriter();
		pw.println("欢迎:"+username+"<br/>");
		pw.println("<a href='/buy.html'>购物</a><br/>");
		pw.println("<a href='/list'>管理购物</a><br/>");
	}

	
}


用户登录页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登录</title>
</head>
<body>

<form action="/login" method="post">
	用户名:<input type="text" name="username"><br/>
	密码:<input type="text" name="password"><br/>
	<input type="submit" value="登录">
</form>
</body>
</html>


购买页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>购物货品</title>
</head>
<body>

<form action="/buy" method="post">
	货品:<select name="product">
		<option value="鼠标">鼠标</option>
		<option value="键盘">键盘</option>
		<option value="内存">内存</option>
                  <option value="显示器">显示器</option>
	</select>  <br/>
	数量:<input type="text" name="num"><br/>
	<input type="submit" value="购买">
</form>
</body>
</html>


web.xml配置:
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5">
	 
	 <servlet>
	 	<servlet-name>LoginServlet</servlet-name>
	 	<servlet-class>cn.itcast.cd.servlet.LoginServlet</servlet-class>
	 </servlet>
	  
	  <servlet-mapping>
	  	<servlet-name>LoginServlet</servlet-name>
	  	<url-pattern>/login</url-pattern>
	  </servlet-mapping>
	  
	 <servlet>
	 	<servlet-name>BuyServlet</servlet-name>
	 	<servlet-class>cn.itcast.cd.servlet.BuyServlet</servlet-class>
	 </servlet>
	  
	  <servlet-mapping>
	  	<servlet-name>BuyServlet</servlet-name>
	  	<url-pattern>/buy</url-pattern>
	  </servlet-mapping>
	  
	 <servlet>
	 	<servlet-name>ListServlet</servlet-name>
	 	<servlet-class>cn.itcast.cd.servlet.ListServlet</servlet-class>
	 </servlet>
	  
	  <servlet-mapping>
	  	<servlet-name>ListServlet</servlet-name>
	  	<url-pattern>/list</url-pattern>
	  </servlet-mapping>
</web-app>

转载于:https://my.oschina.net/dendy/blog/398158

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值