j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)...
购物车全过程的理解:
1.新建一个购物车类,这样,这个类里面就可以封装商品对象和商品数量了。
2.每种商品都是一个购物车
3.把所有的购物车放在一起,也就是放在一个map集合中,这样也就是购买多个商品(一个或者多个),商品放在后一起提交订单。
4.重点:每次添加商品其实就是往map集合中添加一个购物车对象(购物车对象是根据购物车这个实体类创建的)
5.重点:购物完成之后把这个map集合放在sesison域中
6.也就是说第一次购买商品的时候创建一个map集合,第一次购买某个商品的时候创建一个购物车对象car。把每个商品car都放在集合map中。最终把集合放在session中
7.为什么要使用集合存放购物车?因为集合是长度可变的数组,因此可以完成商品的添加和移除。
//购物车类
public class CarItem {
private Flower flower;
private int count;
public Flower getFlower() {
return flower;
}
public void setFlower(Flower flower) {
this.flower = flower;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dao.FlowerDao;
import com.dao.impl.FlowerDaoImpl;
import com.entity.CarItem;
import com.entity.Flower;
import com.entity.Orders;
import com.entity.UserInfo;
import com.google.common.collect.Iterables;
FlowerDao fdao= new FlowerDaoImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("gbk");
String op=req.getParameter("op");
if(op==null){
this.IndexFlower(req, resp);
}else
if(op.equals("searchoneflower")){
this.DetailsFlower(req, resp);
}else
if(op.equals("addflower")){
this.ShopFlower(req, resp);
}else
if(op.equals("kong")){
ClearCart(req,resp);
}else
if(op.equals("tj")){
TjCart(req,resp);
}else
if(op.equals("clearone")){
this.ClearOne(req, resp);
}else
if(op.equals("updateCount")){
this.UpdateCount(req, resp);
}else
if(op.equals("SearcAll")){
SearchPage(req,resp);
}else
if(op.equals("AdminSearchAll")){
AdminSearchAll(req,resp);
}
/*if(op.equals("SearcAll")){
SearcAll(req,resp);
}*/
}
@SuppressWarnings("unchecked")
protected void IndexFlower(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//req.setCharacterEncoding("utf-8");
FlowerDao fdao = new FlowerDaoImpl();
//1.首页鲜花
ArrayList<Flower> flist=(ArrayList<Flower>)fdao.SearchFlower();
//2.首页蛋糕
ArrayList<Flower> fclist=(ArrayList<Flower>)fdao.findCake();
//3.查找新礼蓝
ArrayList<Flower> fllist=(ArrayList<Flower>)fdao.findLiLan();
//4.判断
if(flist!=null&&flist.size()>0&&fclist!=null&&fclist.size()>0&&fllist!=null&&fllist.size()>0){
HttpSession session=req.getSession();
session.setAttribute("flist", flist);
session.setAttribute("fclist", fclist);
session.setAttribute("fllist", fllist);
resp.sendRedirect("index.jsp");
}else{
resp.sendRedirect("error.jsp");
}
}
//1.在首页查询鲜花详情
protected void DetailsFlower(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flowerId=req.getParameter("flowerId");
Flower flower=fdao.DetailsFlower(Integer.parseInt(flowerId));
if(flower!=null){
HttpSession session=req.getSession();
session.setAttribute("flower", flower);
resp.sendRedirect("details.jsp");
}else{
resp.sendRedirect("flowerServlet");
}
}
//2.把鲜花添加到购物车
@SuppressWarnings("unused")
protected void ShopFlower(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session=req.getSession();
//1.判断是否已经登陆
Object obj=session.getAttribute("u");
if(obj==null){
System.out.println("没有登陆成功,没有用户");
resp.sendRedirect("login.jsp");
return;
}
//2.进行添加到购物车的操作
CarItem car=null;
int flowerId=Integer.parseInt(req.getParameter("flowerId"));
Flower flower=(Flower) session.getAttribute("flower");
Map mycart=(Map)session.getAttribute("mycart");//创建map结合当做购物车,并把session容器中的内容放在map容器中。这里已经不是第一次购买了。
if(mycart==null){//第一次购购物,购物车为空
mycart=new HashMap();//第一次购物的时候给他一个购物
System.out.println("第一次使用购物车");
}
if(mycart.keySet().contains(flowerId)){//如果这次添加的商品在购物车里出现过
System.out.println("重复购买该商品");
car=(CarItem) mycart.get(flower.getFlowerId());
car.setCount(car.getCount()+1);
}else{//第一次买
System.out.println("第一次购买该商品");
car = new CarItem();
car.setFlower(flower);
car.setCount(1);
}
mycart.put(flowerId, car);//每个商品对象都是购物车里的一员。该商品对象必须包含商品的主键和数量,因此创建一个新的实体类
System.out.println("种类:"+mycart.size());;
session.setAttribute("mycart", mycart);//此session用于保存商品对象
resp.sendRedirect("shopCart.jsp");
}
//3.清空购物车
protected void ClearCart(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session=req.getSession();
session.removeAttribute("mycart");
resp.sendRedirect("flowerServlet");
}
//4.提交购物车
protected void TjCart(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
HttpSession session=req.getSession();
//1.判断当前是否登陆
Object obj=session.getAttribute("u");
if(obj==null){
resp.sendRedirect("login.jsp");
return;
}
//2.判断购物车是否有商品
Object obj2=session.getAttribute("mycart");
if(obj2==null){
PrintWriter out=resp.getWriter();
out.print("<script>alert('请先去首页添加商品');location.href='flowerServlet'</script>");
return;
}
//3.提交购物车
resp.sendRedirect("order.jsp");
}
/* //5.清除点单中的某个商品,清除mycart这个session容器里的某一个值。
protected void ClearOne(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flowerId=req.getParameter("flowerId");
HttpSession session=req.getSession();
Map map=(Map) session.getAttribute("mycart");//用map集合接收购物车
Set set=map.keySet();
Map map1=new HashMap();//新建一个map1集合用于接收筛选后的map集合
Object[] arr= set.toArray();
for(int x=0;x<arr.length;x++){
if(arr[x].toString().equals(flowerId)){
map.remove(arr[x]);//如果是要删除的就删除
}else{
map1.put(arr[x], map.get(arr[x]));//如果不是要删除的就把内容从map集合存到map1集合中
}
}
session.setAttribute("mycart", map1);//键不变,还是原来购物车的那个键,值变成新的了。
if(map!=null&&map.size()>0){
resp.sendRedirect("shopCart.jsp");//如果map集合不为空说明该订单里还有商品,因此显示该订单里的商品
}else{
resp.sendRedirect("flowerServlet");//如果map集合为空说明该订单下没有商品了,就直接跳到首页
}
}
*/
///5.注意:这里是对上面的删除购物车里某个商品的功能的改进,也就是使用另一种思路写的该方法。
//清除点单中的某个商品,清除mycart这个session容器里的某一个值。
protected void ClearOne(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flowerId=req.getParameter("flowerId");
HttpSession session=req.getSession();
Map mycart=(Map) session.getAttribute("mycart");//mycart是存放所有购物车的
CarItem car= (CarItem) mycart.get(Integer.parseInt(flowerId));//这是要删除的某个具体的购物车
// System.out.println("输出:"+car.getFlower()+" "+mycart.size());
mycart.remove(Integer.parseInt(flowerId));
//System.out.println("输出:"+car.getFlower()+" "+mycart.size());
// session.setAttribute("mycart", mycart);不许要写这句话。因为我们只是修改了里面的值
if(mycart!=null&&mycart.size()>0){
resp.sendRedirect("shopCart.jsp");
}else{
resp.sendRedirect("flowerServlet");
}
}
/* //6.修改购物车中某商品的数量
protected void UpdateCount(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flowerId=req.getParameter("flowerId");
HttpSession session=req.getSession();
Map mycart=(Map) session.getAttribute("mycart");
CarItem car=(CarItem) mycart.get(Integer.parseInt(flowerId));//通过键找值
String count=req.getParameter("count");
//System.out.println("数量:"+count);
if(count.equals("0")){
mycart.remove(Integer.parseInt(flowerId));
}else{
car.setCount(Integer.parseInt(count));
}
session.setAttribute("mycart", mycart);
resp.sendRedirect("shopCart.jsp");
}*/
//6.修改购物车中某商品的数量,并按照老师的思路,修改数量的同时修改了小计和总计
protected void UpdateCount(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String flowerId=req.getParameter("flowerId");
HttpSession session=req.getSession();
Map<String,CarItem> mycart=(Map) session.getAttribute("mycart");
CarItem car=(CarItem) mycart.get(Integer.parseInt(flowerId));//通过键找值
String count=req.getParameter("count");
//System.out.println("数量:"+count);
if(count.equals("0")){
mycart.remove(Integer.parseInt(flowerId));
}else{
car.setCount(Integer.parseInt(count));
}
session.setAttribute("mycart", mycart);
double xj=car.getCount()*car.getFlower().getCurrentPrice();//小计
double zj=0;//总计
for(Entry<String,CarItem> e:mycart.entrySet())
{
//xj=e.getValue().getCount()*e.getValue().getFlower().getCurrentPrice();
zj=zj+(e.getValue().getCount()*e.getValue().getFlower().getCurrentPrice());
}
/*PrintWriter out=resp.getWriter();
System.out.println("修改了数量:"+car.getCount());
out.print(car.getCount());*/
PrintWriter out =resp.getWriter();
String json="[{\"xj\":"+xj+",\"zj\":"+zj+"}]";
System.out.println(json);
out.print(json);
}
//没使用分页的查询鲜花
protected void SearcAll(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String typeId=req.getParameter("type");
ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.SearcAll(Integer.parseInt(typeId));
if(flowerList!=null&&flowerList.size()>0){
HttpSession session=req.getSession();
session.setAttribute("flowerList", flowerList);
resp.sendRedirect("flower.jsp");
}else{
resp.sendRedirect("error.jsp");
}
}
//使用分页查询鲜花
protected void SearchPage(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String typeId=req.getParameter("type");
//实现分页中的上一页和下一页
int pageNum=0;//初始化当前页
int pageSize=0;//初始化页大小
String pn=req.getParameter("pn");
if(pn==null){
pageNum=1;
pageSize=10;
}
else{
pageNum=Integer.parseInt(pn);
pageSize=10;
}
ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.searchPage(pageNum, pageSize,(pageNum-1)*pageSize,Integer.parseInt(typeId));
//实现末页
int toatlpage=fdao.getTotalPage(pageSize,Integer.parseInt(typeId));
//System.out.println("总页数:"+toatlpage);
//跳转
if(flowerList!=null&&flowerList.size()>0){
HttpSession session=req.getSession();
session.setAttribute("flowerList", flowerList);
session.setAttribute("pageNum", pageNum);
session.setAttribute("pageSize", pageSize);
session.setAttribute("toatlpage", toatlpage);
if(Integer.parseInt(typeId)==0)
{
resp.sendRedirect("flower.jsp");
}
else if(Integer.parseInt(typeId)==1)
{
resp.sendRedirect("cake.jsp");
}
else if(Integer.parseInt(typeId)==2)
{
resp.sendRedirect("gift.jsp");
}
else if(Integer.parseInt(typeId)==3)
{
resp.sendRedirect("lvZhiHuaHui.jsp");
}
else if(Integer.parseInt(typeId)==4)
{
resp.sendRedirect("shangWu.jsp");
}
}else{
resp.sendRedirect("error.jsp");
}
}
protected void AdminSearchAll(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//实现分页中的上一页和下一页
int pageNum=0;//初始化当前页
int pageSize=0;//初始化页大小
String pn=req.getParameter("pn");
if(pn==null){
pageNum=1;
pageSize=10;
}
else{
pageNum=Integer.parseInt(pn);
pageSize=10;
}
ArrayList<Flower> flowerList=(ArrayList<Flower>) fdao.AdminsearchPage(pageNum, pageSize);
int toatlpage=fdao.AdmingetTotalPage(pageSize);
if(flowerList!=null&&flowerList.size()>0){
HttpSession session=req.getSession();
session.setAttribute("flowerList", flowerList);
session.setAttribute("pageNum", pageNum);
session.setAttribute("pageSize", pageSize);
session.setAttribute("toatlpage", toatlpage);
resp.sendRedirect("Admin/flowerList.jsp");
}else{
resp.sendRedirect("error.jsp");
}
}
}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'orderList.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function go(){
var p=document.getElementById("p").value;
var maxpage=document.getElementById("maxpage").value;//注意:开始想写个隐藏域,但是js中不支持隐藏域。注意这里通过id获得值不支持使用type="hidde"
//alert("设计出:"+p+" "+maxpage);
if(p>maxpage){
alert("你输入的页数过大,请重写输入");
//window.history.back();
return;
}else{
window.location.href="../orderServlet?op=AdminfindOrdersPage&pn="+p;
}
}
</script>
<link href="CSS/style.css" rel="stylesheet" type="text/css">
<link href="../CSS/style.css" rel="stylesheet" type="text/css">
</head>
<script type="text/javascript" src="JS/amdinDivControl.js"></script>
<body>
<br>
<form name="form1" method="post" action="DeleteServlet?type=order">
<table width="605" height="102" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#84C1C1">
<tr>
<td width="76" height="35" align="center" bgcolor="#84C1C1" class="font"><input type="submit" name="Submit" value="删除" onClick="deleteE()"></td>
<td width="105" align="center" bgcolor="#84C1C1" class="font">订单编号</td>
<td width="106" align="center" bgcolor="#84C1C1" class="font">订单人</td>
<td width="110" align="center" bgcolor="#84C1C1" class="font">订单总价</td>
<td width="133" align="center" bgcolor="#84C1C1" class="font">订单状态</td>
<td width="198" align="center" bgcolor="#84C1C1" class="font">订单时间</td>
</tr>
<c:forEach items="${orderList}" var="order">
<tr>
<td height="33" align="center" bgcolor="#FFFFFF" class="font"><input type="checkbox" name="checkbox" value="${order.orderId}"></td>
<td align="center" bgcolor="#FFFFFF" class="font">${order.orderCode }</td>
<td align="center" bgcolor="#FFFFFF" class="font">${order.userName }</td>
<td align="center" bgcolor="#FFFFFF" class="font">${order.total }</td>
<td align="center" bgcolor="#FFFFFF" class="font">${order.orderStatus==1?"正在处理":"完成交易"}</td>
<td align="center" bgcolor="#FFFFFF" class="font">${order.orderTime}</td>
</tr>
</c:forEach>
<tr>
<td height="29" colspan="6" align="right" bgcolor="#FFFFFF" class="font">
<c:choose>
<c:when test="${pageNum eq 1}">
<a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum+1}" style="text-decoration: none;">下一页</a>
<a href="orderServlet?op=AdminfindOrdersPage&pn=${toatlpage}" style="text-decoration: none;">末页</a>
</c:when>
<c:when test="${pageNum eq toatlpage}">
<a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum-1 }"style="text-decoration: none;">上一页</a>
<a href="orderServlet?op=AdminfindOrdersPage&pn=1" style="text-decoration: none;">首页</a>
</c:when>
<c:otherwise>
<a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum+1}" style="text-decoration: none;">下一页</a>
<a href="orderServlet?op=AdminfindOrdersPage&pn=${pageNum-1 }"style="text-decoration: none;">上一页</a>
<a href="orderServlet?op=AdminfindOrdersPage&pn=1" style="text-decoration: none;">首页</a>
<a href="orderServlet?op=AdminfindOrdersPage&pn=${toatlpage}" style="text-decoration: none;">末页</a>
</c:otherwise>
</c:choose>
当前页:<input type="text" value="${pageNum }" readonly="readonly" size="4">
共<input type="text" value="${toatlpage }" id="maxpage" readonly="readonly" size="4">页
<input type="text" size="4" id="p" value="${pageNum}">
<a href="javascript:go()">go</a>
</td>
</tr>
</table>
</form>
</body>
</html>
j2ee:servlet练习鲜花项目(购物车、分页、ajax、iframe弹出层、jquery、json(计算小计、总计)、map集合高级遍历、图片上传)...相关推荐
- php jquery ajax登录,jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
弹出层主要用于展示丰富的页面信息,还有一个更好的应用是弹出表单层丰富交互应用.常见的应用有弹出登录表单层,用户提交登录信息,后台验证登录成功后,弹出层消失,主页面局部刷新用户信息.本文我们将给大家介绍 ...
- kindeditor java_kindeditor在Java项目中的应用以及图片上传配置
在官网下载Kindededitor的开发包 在项目中javaweb项目中导入kindeditor必须要使用的Jar包(用于文件上传,除非你的富文本编辑器不使用图片上传)jar包可以在官网的开发包中找到 ...
- SpringSSM的教师管理系统--ajax版本,分页,图片上传,jsp页面使用bootstrap布局
项目的结构 maven的配置 pom.xml 文件 ](maven的配置 pom.xml 文件) <project xmlns="http://maven.apache.org/POM ...
- themyleaf 图片上传_javaEE --springboot #实现图片上传和回显 #单文件上传 #多文件上传 #ajax异步文件上传 (非常详细,从创建项目开始)...
实现文件上传和回显 1.新建一个SpringBoot项目,选择 Spring Web 和 thymeleaf 依赖 .pow.xml文件下的依赖如下 2.根据下图,创建如下文件 3.直接上代码 配置文 ...
- c ajax 上传图片,ajax +NodeJS 实现图片上传实例
前台用jquery的ajax发请求,后台用NodeJS 的multer模块实现图片上传.这个demo给我的感悟是一定要自己能实现出来,而不是看了别人写好就直接"拿来"用 note( ...
- 【图片上传与图片显示】 SpringBoot ajax (跨域问题)
<上传> 前端: uploadImg.html <!DOCTYPE html> <html lang="en" xmlns:th="http ...
- UEditor之图片上传如何和真实项目结合
开心一笑 周末,五六个朋友聚餐,席间,阿凌注意到阿艳沉默少语,不比以往的活波开朗,像有心事.饭后回去的路上,阿凌走到阿艳身边说:"你的电量好像不够了?" 阿艳:"啊,什么 ...
- java的图片上传与前端展示实例(Servlet+Jsp)
java的图片上传与前端展示实例(Servlet+Jsp) 内容前瞻 1.关于路径 2.前端图片上传与展示 3.后台获取并保存 环境 1.前端jsp 2.服务器tomcat 3.服务端servlet ...
- Java分布式二手房项目尚好房第五课 图片上传及前端房源展示
尚好房:图片上传 一.图片存储方案 1.介绍 在实际开发中,我们会有很多处理不同功能的服务器.例如: 应用服务器:负责部署我们的应用 数据库服务器:运行我们的数据库 文件服务器:负责存储用户上传文件的 ...
最新文章
- java连接mysql8的坑
- 水晶报表弹出用户密码输入框问题的解决
- Logstash 父子关系 配置
- php 文件上传系统,php需登录文件上传管理系统
- spark编译错误解决 Error:(52, 75) not found: value TCLIService
- 程序员你造吗?2016年加州将建造子弹头火车,你还在CODE?
- Android屏幕适配和文字屏幕适配
- python简单代码-用Python代码实现5种最好的、简单的数据可视化!
- Ubuntu 挂载windows硬盘突然变成只读了???
- batchplot插件用法_autocad批量打印工具2015-BatchPlot(AutoCAD批量打印软件)3.5.9 官方最新版【附使用教程】-东坡下载...
- AspNetPager 分页
- Unicode与中文互转(反斜杠u(\u)开头的16进制Unicode编码转换成中文汉字
- 可恢复保险丝特性测试
- iOS Quartz2D 渐变图形 CGGradient CGShading
- 销售如何维护客情关系 销售维护客户有什么方法
- centos-linux(64位)安装与配置
- 各大厂Linux面试题汇总,足够你学习的,不够找我
- 实现iServer发布地图
- RSD 教程 —— §3.7 查看位置信息
- 免费清新风教育教学通用PPT模板
热门文章
- 从Level 0到Level 5,自适应学习可分为哪些等级?
- 几个免费API接口分享,调用完全不限次数...
- c语言编程 显示动物,C语言编程 猜动物
- 【Git】连接远程仓库
- 【LeetCode】1518. 换酒问题(Java)
- Kubernetes(k8s)的RC(Replication Controller)副本控制器
- [原创] 我的项目管理之路--6、PMP认证
- C#调用杀毒软件MSE扫描指定目录或文件
- vue 在线预览、下载word、pdf文件
- javascript 如何动态引导web字体文件