javaWeb之l利用session实现购物车功能

利用session实现购物车功能,下面是具体的代码实现(这里是运用mvc的设计模式)
首先要导入相应的jar包

c3p0-0.9.1.2-jdk1.3.jar
c3p0-0.9.1.2.jar
commons-dbutils-1.3.jar
mysql-connector-java-5.1.46-bin.jar
servlet-api.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
目录结构

在这里插入图片描述

数据库
book表

在这里插入图片描述
user表

在这里插入图片描述

代码实现
视图层代码
login.jsp(登录页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
	<form action="${pageContext.request.contextPath}/login.do"
		method="post">
		<table>
			<tr>
				<td>用户名</td>
				<td><input type="text" name="username" /></td>
			</tr>
			<tr>
				<td>密码</td>
				<td><input type="password" name="userpass" /></td>
			</tr>
			<tr>
				<td><input type="submit" name="submit" value="登录" /></td>
				<td></td>
			</tr>
		</table>
	</form>
</body>
</html>

main.jsp(主页面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页面</title>
<style type="text/css">
input {
	width: 200px;
	height: 20px;
}

.register-button {
	cursor: pointer;
	width: 250px;
	text-align: center;
	height: 40px;
	line-height: 40px;
	background-color: dodgerblue;
	border-radius: 5px;
	margin: 0 auto;
	margin-top: 50px;
	color: white;
}

#select {
	text-align: center;
}

td {
	height: 30px;
	width: 150px;
}
</style>
</head>
<body>

	<h2 style="text-align: center">欢迎光临新华书店</h2>
	<form action="${pageContext.request.contextPath}/lookBook.udd"
		method="post">
		<div class="register-button">
			<input
				style="border: 0; background-color: dodgerblue; font-size: 15px"
				type="submit" value="查看书籍">
		</div>
	</form>
	<br>
	<br>
	<table border="1px" cellpadding="0" cellspacing="0"
		style="margin-left: 250px">
		<tr>
			<td>编号</td>
			<td>书名</td>
			<td>作者</td>
			<td>出版社</td>
			<td>价格</td>
			<td>操作</td>
		</tr>
		<c:forEach items="${requestScope.list}" var="list">
			<c:if test="${not empty list}">
				<tr>
					<td>${list.id}</td>
					<td>${list.bookname}</td>
					<td>${list.author}</td>
					<td>${list.publish}</td>
					<td>${list.price}</td>
					<td><a
						href="${pageContext.request.contextPath}/buy.udd?id=${list.id}">加入购物车</a></td>
				</tr>
			</c:if>
		</c:forEach>
	</table>
</body>
</html>

mybuyCar.jsp(购物车页面)

<%@page import="cn.bzu.mybuycar.entity.CartItem"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
td {
	height: 30px;
	width: 150px;
}
</style>
</head>
<body>

	<%
		Map<Integer, CartItem> car = (Map<Integer, CartItem>) session.getAttribute("buyCar");
	%>

	<table border="1px" cellpadding="0" cellspacing="0"
		style="margin-left: 250px">
		<tr>
			<td>编号</td>
			<td>书名</td>
			<td>作者</td>
			<td>价格</td>
			<td>数量</td>
			<td>操作</td>
		</tr>
		<%
			double sumMoney = 0;
			if (car != null) {
				for (Map.Entry<Integer, CartItem> b : car.entrySet()) {
		%>
		<tr>
			<td><%=b.getKey()%></td>
			<td><%=b.getValue().getBook().getBookname()%></td>
			<td><%=b.getValue().getBook().getAuthor()%></td>
			<td><%=b.getValue().getBook().getPrice()%></td>
			<td><%=b.getValue().getNumber()%></td>
			<td><a
				href="<%=request.getContextPath()%>/pay.udd?id=<%=b.getKey()%>">付钱</a>
			</td>
		</tr>
		<%
			}
			}
		%>
	</table>
</body>
</html>
实体类代码
User.java(User实体类)
package cn.bzu.mybuycar.entity;

public class User {
	private int id;
	private String userName;
	private String userPass;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPass() {
		return userPass;
	}
	public void setUserPass(String userPass) {
		this.userPass = userPass;
	}
	public User(int id, String userName, String userPass) {
		super();
		this.id = id;
		this.userName = userName;
		this.userPass = userPass;
	}
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", userName=" + userName + ", userPass=" + userPass + "]";
	}
}

Book.java(Book实体类)

package cn.bzu.mybuycar.entity;

public class Book {
	private int id;
	private String bookname;
	private String author;
	private String publish;
	private Double price;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getBookname() {
		return bookname;
	}
	public void setBookname(String bookname) {
		this.bookname = bookname;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPublish() {
		return publish;
	}
	public void setPublish(String publish) {
		this.publish = publish;
	}
	public Double getPrice() {
		return price;
	}
	public void setPrice(Double price) {
		this.price = price;
	}
	public Book(int id, String bookname, String author, String publish, Double price) {
		super();
		this.id = id;
		this.bookname = bookname;
		this.author = author;
		this.publish = publish;
		this.price = price;
	}
	public Book() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Book [id=" + id + ", bookname=" + bookname + ", author=" + author + ", publish=" + publish + ", price="
				+ price + "]";
	}
	
}

CartItem.java(购物车实体类)

package cn.bzu.mybuycar.entity;

public class CartItem {
	private Book book;
	private int number;
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
}
文件代码
数据库连接 c3p0
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<c3p0-config>
<named-config name="mysql">
<!-- 配置基本的必须的属性 -->
<property name="user">root</property> // 注意这里name的值,一定要参考setXxxx里的Xxxx值
<property name="password">123456</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mvcproject</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>

<!-- 若数据库中的连接数量不足的时候,想数据库申请的连接数量 -->
<property name="acquireIncrement">5</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">5</property>
<!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">100</property>
<!-- C3P0数据库连接池可以维护的Statement数量 -->
<property name="maxStatements">2</property>
<!-- 每个连接同时可以使用Statement的数量 -->
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
工具类代码
DBUTils.java
package cn.bzu.mybuycar.utils;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUTils {
	//声明一个连接池队象
	private static DataSource datasource = null;
	
	static {
		
		datasource = new ComboPooledDataSource("mysql");
	}
	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = datasource.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeConn(Connection conn) {
		if(conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
dao层的代码
BaseDao.java
package cn.bzu.mycarbus.dao;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;

import cn.bzu.mybuycar.utils.DBUTils;
public class BaseDao<T> {
	//获得连接池得的驱动
	QueryRunner qr = new QueryRunner();
	//声明一个用于反射的变量
	private Class<T> clazz;
	public BaseDao() {
		//获得调用这个方法的对象的父类的类型
		Type sType = this.getClass().getGenericSuperclass();
		if(sType instanceof ParameterizedType) {
			ParameterizedType pt = (ParameterizedType)sType;
			Type[] arr = (Type[]) pt.getActualTypeArguments();
			if(arr[0] instanceof Class<?>) {
				clazz = (Class<T>)arr[0];
			}
		}
		
	}
	//查询一条记录的方法
	public T get(String sql,Object...args) {
		Connection conn = null;
		T entity = null;
		try {
			conn = DBUTils.getConnection();
			entity = (T) qr.query(conn, sql, new BeanHandler<>(clazz), args);			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBUTils.closeConn(conn);
		}
		return entity;
	}
	//查询多条记录的方法
	public List<T> getList(String sql,Object...args){
		List list = null;
		Connection conn = DBUTils.getConnection();
		try {
			list = qr.query(conn, sql,new BeanListHandler<>(clazz),args);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBUTils.closeConn(conn);
		}
		return list;
	}
	
}

UBDao.java(这是一个接口)

package cn.bzu.mycarbus.dao;
import java.util.List;
public interface UBDao<T>{
	public T login(String name,String pass);	
	
}

UserDaoImplements.java(UBDao接口的实现类)

package cn.bzu.mycarbus.dao;

import java.util.List;

import cn.bzu.mybuycar.entity.User;

public class UserDaoImplements extends BaseDao<User> implements UBDao<User>{
	//登录的方法
	@Override
	public User login(String name,String pass) {
		String sql ="select userName , userPass from user where userName=? AND userPass=?";
		User user = super.get(sql,name,pass);
		System.out.println(sql);
		return user;
	}
}

BookDao.java(这是一个接口)

package cn.bzu.mycarbus.dao;
import java.util.List;
import cn.bzu.mybuycar.entity.Book;
public interface BookDao<T> {
			//查询图书的方法
		public List<Book> getBooks();
		//查询一本书
		public Book getOneBook(int id);
		
}

BookDaoImpl.java(BookDao接口的实现类)

package cn.bzu.mycarbus.dao;
import java.util.List;
import cn.bzu.mybuycar.entity.Book;
public class BookDaoImpl extends BaseDao<Book> implements BookDao<Book>{
	@Override
	public List<Book> getBooks() {
		String sql = "SELECT `id`,`bookname`,`author`,`publish`,`price` FROM `book`";
		List<Book> list = super.getList(sql);
		
		return list;
	}
	@Override
	public Book getOneBook(int id) {
		String sql = "select id,bookname,author,publish,price from book where id = ?";
		Book book = super.get(sql, id);
		return book;
	}
}

Factory.java(获得接口的实现类)

package cn.bzu.mycarbus.dao;

public class Factory {
	public static UBDao getUbdao() {
		return new  UserDaoImplements();
	}
	public static BookDao getBookDao() {
		return new BookDaoImpl();
	}
}
服务层代码

UBService.java(这是一个接口)

package bzu.cn.mybuycar.service;

import java.util.List;

public interface UBService<T> {
	//登录的方法
	public T login(String name,String pass);
}

UserviceImplements.java

package bzu.cn.mybuycar.service;

import java.util.List;

import cn.bzu.mycarbus.dao.Factory;
import cn.bzu.mycarbus.dao.UBDao;

public class UserviceImplements<User> implements UBService<User>{
	//得到接口的实现类的实例
	 UBDao<User> ubd = Factory.getUbdao();
	@Override
	public User login(String name,String pass) {
		// TODO Auto-generated method stub
		return ubd.login( name, pass);
	}
}

BookService.java

package bzu.cn.mybuycar.service;

import java.util.List;

import cn.bzu.mybuycar.entity.Book;

public interface BookService<T> {

	//查询图书的方法
	public List<Book> getBooks();
	// 得到一本书的方法
	public Book getOneBook(int id);

}

BookServiceImpl.java

package bzu.cn.mybuycar.service;
import java.util.List;
import cn.bzu.mybuycar.entity.Book;
import cn.bzu.mycarbus.dao.BookDao;
import cn.bzu.mycarbus.dao.Factory;
public class BookServiceImpl implements BookService<Book>{
	BookDao<Book> bd = Factory.getBookDao();
	@Override
	public List<Book> getBooks() {
		return bd.getBooks();
	}
	//查询一本图书的方法
	@Override
	public Book getOneBook(int id) {
		// TODO Auto-generated method stub
		return bd.getOneBook(id);
	}
}

Factory.java

package bzu.cn.mybuycar.service;

import cn.bzu.mybuycar.entity.Book;
import cn.bzu.mybuycar.entity.User;

public class Factory {
	public static UBService<User> getUBservice(){
		return new UserviceImplements<User>();
	}
	public static BookService<Book> getBookService(){
		return new BookServiceImpl();
	}
}
控制层代码
UserController.java
package bzu.cn.mybuycar.contraoller;

import java.io.IOException;
import java.lang.reflect.Method;

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 bzu.cn.mybuycar.service.Factory;
import bzu.cn.mybuycar.service.UBService;
import cn.bzu.mybuycar.entity.User;

@WebServlet(urlPatterns = { "*.do" })
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	UBService<User> ubs = Factory.getUBservice();

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		// 获得到servlet的映射路径
		String path = request.getServletPath();
		String str = path.substring(1);
		str = str.substring(0, str.length() - 3);
		try {
			Method method = this.getClass().getDeclaredMethod(str, HttpServletRequest.class, HttpServletResponse.class);
			method.invoke(this, request, response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

	// 登录的方法

	private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String name = request.getParameter("username");
		String pass = request.getParameter("userpass");

		User user = null;
		user = ubs.login(name, pass);

		if (user != null) {
			request.getSession().setAttribute("user", name);
			response.sendRedirect(request.getContextPath() + "/main.jsp");
		} else {
			request.getRequestDispatcher("/index.jsp").forward(request, response);
		}
	}
}

UserController.java

package bzu.cn.mybuycar.contraoller;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 bzu.cn.mybuycar.service.BookService;
import bzu.cn.mybuycar.service.Factory;
import cn.bzu.mybuycar.entity.Book;
import cn.bzu.mybuycar.entity.CartItem;


@WebServlet(urlPatterns= {"*.udd"})
public class BookController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       BookService<Book> bs = Factory.getBookService();
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		String path = request.getServletPath();
		String str = path.substring(1);
		str= str.substring(0,str.length()-4);
		try {
			Method method = this.getClass().getDeclaredMethod(str, HttpServletRequest.class,HttpServletResponse.class);
			method.invoke(this, request,response);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		
		doGet(request, response);
	}
	
	//查询图书的方法
	
	private void lookBook(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		List<Book> list = bs.getBooks();
		if(list!=null) {
			request.setAttribute("list", list);
			request.getRequestDispatcher("/main.jsp").forward(request, response);
		}else {
			response.sendRedirect(request.getContextPath()+"/main.jsp");
		}
	}
	
	//购买图书的方法
		private void buy(HttpServletRequest request, HttpServletResponse response) 
				throws ServletException, IOException {
			int id =Integer.parseInt(request.getParameter("id")) ;
			Book book = bs.getOneBook(id);
			
			if(book!=null) {
				request.getSession().setAttribute("book", book);
				System.out.println(book);
				response.sendRedirect(request.getContextPath()+"/buyCar.udd");
			}
		}
	
	//购物车的方法
	private void buyCar(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		//得到购买的图书
		Book book = (Book)session.getAttribute("book");
		//得到购物车
		Map<Integer,CartItem> car =(Map<Integer,CartItem>) session.getAttribute("buyCar");
		
		//判断购物车是否为空,为空的话就创建一一个
		if(car==null) {
			car = new HashMap<Integer,CartItem>();
		}
		CartItem cartItem = car.get(book.getId());
		if(cartItem ==null) {
			cartItem = new CartItem();
			cartItem.setBook(book);
			cartItem.setNumber(1);
		}else {
			cartItem.setNumber(cartItem.getNumber()+1);
		}
		car.put(book.getId(), cartItem);
		session.setAttribute("buyCar", car);
		response.sendRedirect(request.getContextPath()+"/mybuyCar.jsp");
	}	
}

运行结果
在这里插入图片描述
购物车
在这里插入图片描述
javaWeb之session的概述与应用

  • 10
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值