应用Servlet实现购物车
- 格式:doc
- 大小:71.50 KB
- 文档页数:20
购物车功能实现购物车功能是电商网站的重要组成部分,实现了方便用户选择和管理商品的功能,以下是购物车功能的实现方式:1. 添加商品:用户在浏览商品详情页时,可以通过点击“加入购物车”按钮将商品添加到购物车中。
后台服务器收到请求后,将商品信息和数量保存到数据库中。
2. 修改商品数量:用户可以在购物车页面修改商品的购买数量,通过增加或减少数量按钮来实现。
每次修改数量都会发送请求到后台,更新数据库中的商品数量。
3. 删除商品:用户可以选择删除购物车中的某个商品,通过点击删除按钮来实现。
后台服务器删除对应的商品记录,更新数据库。
4. 清空购物车:用户可以选择一键清空购物车,通过点击“清空购物车”按钮来实现。
后台服务器删除用户购物车中的所有商品记录,更新数据库。
5. 查看购物车:用户可以通过点击购物车图标或链接来查看购物车的详情页。
后台服务器根据用户的请求,从数据库中获取用户购物车中的商品列表,并返回给前端页面展示。
6. 购物车页面展示:购物车页面展示用户购物车中的商品列表,包括商品名称、价格、数量、小计和总计等信息。
用户可以通过修改数量、删除商品和清空购物车的操作来管理购物车。
7. 结算功能:用户在购物车页面可以选择结算功能,通过点击“结算”按钮来跳转到结算页面。
结算页面展示用户选择购买的商品,同时提供支付方式和地址选择等功能。
8. 购物车状态保存:购物车功能需要保证用户在不同设备、不同浏览器上的购物车状态同步,可以通过用户账户绑定购物车的方式实现。
用户登录后,将购物车信息与用户账户绑定,用户在不同设备上登录后购物车状态可以同步。
购物车功能的实现需要前端页面和后台服务器的配合,前端页面负责展示购物车信息并与用户交互,后台服务器负责处理前端页面的请求,更新数据库中的购物车信息。
同时需要考虑用户登录状态、商品库存、商品价格和促销活动等因素来优化购物车功能的实现。
java购物车的实现原理
Java购物车的实现原理通常涉及以下几个方面:
1. 数据结构,购物车通常是一个存储商品信息的容器。
在
Java中,可以使用集合类(如ArrayList、HashMap)来存储商品信息,每个商品可以用一个对象来表示,对象中包含商品的属性(如
名称、价格、数量等)。
这样可以方便地对商品进行增删改查操作。
2. 会话管理,在Web应用中,购物车通常与用户的会话相关联。
当用户添加商品到购物车时,需要将商品信息存储在会话中;当用
户浏览购物车或结算时,需要从会话中获取购物车的信息。
Java中
可以使用HttpSession来管理用户的会话信息,将购物车信息存储
在会话中。
3. 操作逻辑,购物车的实现需要考虑用户的操作,如添加商品、删除商品、修改商品数量等。
在Java中,可以通过Servlet或者框
架(如Spring MVC)来处理用户的请求,根据用户的操作来对购物
车进行相应的增删改操作。
4. 数据持久化,有些情况下,需要将购物车的信息持久化存储,
以便用户下次登录时能够看到之前添加的商品。
在Java中可以使用数据库来存储购物车信息,可以使用JDBC或者ORM框架(如Hibernate)来实现购物车信息的持久化。
总的来说,Java购物车的实现原理涉及数据结构、会话管理、操作逻辑和数据持久化等方面,需要综合运用Java语言的特性和相关框架来实现一个完善的购物车功能。
希望这些信息能够帮助你理解Java购物车的实现原理。
第5章一、填空1.服务器向客户端发送Cookie时,会在HTTP响应头字段中增加____响应头字段。
2.Web应用中的会话指的是一个客户端(浏览器)与____之间连续发生的一系列请求和响应过程。
3.Session相对于Cookie具有更高的安全性,它将关键数据保存在____端。
4.在Servlet技术中,提供了两个用于保存会话数据的对象,分别是____和Session。
5.Tomcat容器中会话的有效时间可以在____文件中设置,默认会话过期时间为30分钟。
二、判断1.Tomcat容器中如果将元素中的时间值设置成0或一个负数,则表示会话永不超时。
2.Session是一种将会话数据保存到服务器端的技术,需要借助Cookie技术来实现。
3.Cookie的domain属性是用来指定浏览器访问的域,设置domain属性时严格区分大小写。
4.Cookie的path属性设置后,只对当前访问路径所属的目录有效。
5.一次会话过程中,只允许客户端与服务器进行一次请求与响应过程。
三、选择1.下列对于setMaxAge(-1)方法的描述中,正确的是()A: 表示通知浏览器保存这个Cookie信息B: 表示通知浏览器立即删除这个Cookie信息C: 表示当浏览器关闭时,Cookie信息会被删除D: 以上说法都是错误的2.Tomcat服务器的默认会话超时时间是()A: 30秒B: 30分钟C: 30毫秒D: 30小时3.下面选项中,用于强制使Session对象无效的方法是()A: request. invalidate ();B: session. validate ();C: response. invalidate ();D: session. invalidate ();4.下面选项中,当存在Session对象直接返回,否则返回null的方法是()A: request.getSession();B: request.getSession(true);C: request.getSession(false);D: response.getSession();5.下列选项中,能够用于获取客户端所有cookie对象的方法是()A: List cookies = request.getCookies();B: Cookie[] cookies = request.getCookies();C: List cookies = response.getCookies();D: Cookie[] cookies = response.getCookies();四、简答1.简述什么是会话技术?会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web 服务器之间连续发生的一系列请求和响应过程。
项目开发技术购物车项目开发设计与实现目录1 项目需求本次研究选择的开发语言为Java,该系统基于B/S架构,用户可以通过浏览器对服务器使用访问。
首先需要实现网上购物的基本功能,显示商品列表、添加商品到购物车、确认订单,我所研究的重点是对网上购物车的设计与实现模块。
系统功能需求1、能够完成游客或已注册用户对网上商品列表的浏览,以及对各商品的详细信息的查看。
2、能够完成已登陆客户对商品的选购:添加商品到个人购物车,并且对已添加到购物车的商品进行数量的增加、减少、修改和删除等操作。
3、能够通过查看购物车对所选商品进行确定、挑选,确认或修改购物者的联系方式,通过定单查询对支付费用进行确定。
开发系统语言需求采用的主要技术是基于服务器端的JSP、Java的组件JavaBean,以及网页编程语言HTML。
利用JavaEE平台提供的Web编程方式,通过B/S结构方式,实现数据从数据库,到业务处理,到前台展示。
Web部分采用基于MVC模式的Struts框架实现,表现层主要用JSP与JavaScript、EL相结实现,控制层采用ActionServlet负责处理请求和转发请求,业务逻辑层使用JavaBean实现,并且采用DAO设计模式进行数据访问的封装,数据持久层采用JDBC 技术实现业务层和数据库的交互。
设计开发的原则:每层之间都是采用面向接口编程技术,降低了上层对下层逻辑调用的依赖,该项目体现了低耦合、高内聚的设计思想。
服务器: Apache Tomcat数据库: MySQL技术实现:Struts+JDBC+JavaBean发集成环境:用Eclipcse集成环境进行开发JavaScript程序运行环境:Windows XP或Windows 7。
用于编辑HTML文档的字符编辑器或HTML文档编辑器。
开发以及运行环境需求本系统开发的基本环境如表表1-1系统开发环境项目最低配置CPU P4或同型号的CPU内存256M硬盘40G以上显卡Geforce2以上操作系统Windows 7/XP本系统的运行环境如下表表1-2 系统运行环境项目最低配置CPU P3或同型号以上的CPU内存128M硬盘20G以上显卡Geforce2以上操作系统Windows 7/XP 界面需求界面的原则要求:如方便、简洁、美观、一致等。
JSP 实现网上购物
以前练习中虽然实现过简单的网上购物,但只是使用JSP来实现。
本练习通过Servlet实现简易网上购物程序,该程序需要手动输入要购买的物品,输入完毕后可以提交输入物品。
可以多次输入和查看购买物品。
具体步骤如下:(1)分析程序。
该实例有三个Servlet类组成,分别为输入类GoShop、控制类Control和显示类Save。
(2)实现购物车输入界面:GoShosp.java文件,输入下列代码:
码转换。
在下面创建一个向量对象ve,并调用addElement()方法将获取的数据prod uct添加到向量对象中。
并使用session对象绑定向量ve。
(4)实现购买物品显示类:Save.java文件,输入下列代码:
该文件首先获取session对象绑定的向量ve,在while循环中,将向量中的信息输出到客户端。
(5)测试。
将上述三个Servlet文件配置,其配置方法和前面的Servlet相同。
请求GoShop的Servlet,其执行结果如图5-26。
在该图中输入要购买物品,单击【提交】按钮,会显示图5-27的窗口。
单击图5-27中的【查看所有物品】,会显示如图5-28所示窗口:
图5-26 选择商品页面图5-27 物品购买控制页面
图5-28 显示商品信息页面。
4.3 修改和清空购物车1 目标在商品数量文本框内输入一个新的数量,点击“修改数量”,购物车刷新,按照新数量重新计算总金额。
如果用户输入“0”,修改数量之后,该条目从购物车中删除。
(程序未做JS有效值判断,所以请勿输入不合法的数量值)。
点击“清空购物车”,将购物车从session里删除。
2 思路(1) 购物车页面的表格是购物车对象cart的展示结果,表格中的每一行就是购物车cart中的一个元素,两者的内容和顺序是完全一样的。
(2) 购物车页面的表格是放在form表单里的,用户在文本框中修改数量后,点击“修改数量”超链接激发表单的提交,表单提交时,所有的数量文本框中的值都会被提交。
(3) 表单提交给CartEditServlet处理,该servlet取出每个商品数量文本框中的新值,将购物车里对应的商品数量修改为此新值(表格里的第一行商品对应的就是购物车里的第一件商品,第二行对应第二件,以此类推)。
如果某行的数量修改为0,这行对应的购物车商品就从购物车里移除。
(4) 数量文本框的命名规则为num+i,即第一件商品数量框名为num0,第二件为num1,第三件为num2。
这样在遍历购物车时,通过循环变量,就能拼接出当前商品的数量文本框名称,从而获得当前商品的新数量。
(5) 购物车商品数量修改完毕后,forward回查看购物车页面showCart.jsp,展示修改后的结果。
(6) 清空购物车,将购物车对象从session中移除或者把购物车对象clear。
3 步骤3.1 创建CartEditServlet类在cn.estore.servlet.cart包中,创建CartEditServlet类,该servlet处理购物车的修改和清空,由请求参数action的值区分用户动作,请求提交给此servlet的时候必须提供?action=**参数,如果action=clear表示清空,action=modify表示修改数量。
写javaweb购物车那些用文献
要编写一个JavaWeb购物车,您可以参考以下文献:
1. "Java Servlets and JSP - Build Java EE (JEE) app in 25 Steps" - Ranga Rao Karanam
这本书详细介绍了使用Java Servlets和JSP构建Java EE应用程序的步骤,其中包括购物车的实现。
2. "Head First Servlets and JSP: Passing the Sun Certified Web Component Developer Exam" - Bryan Basham, Kathy Sierra, Bert Bates
这本书是学习Java Servlets和JSP的经典教材,其中包含了购物车的示例代码和实现方法。
3. "Java Web Development: Servlet, JSP, Oracle Database, and Bootstrap" - LOKESH SAHU
这本书详细介绍了使用Java Servlets和JSP进行Web开发的方法,其中包括购物车的实现。
4. "Java Web Programming with Eclipse" - David Turner, Jinseok Chae
这本书介绍了使用Eclipse进行Java Web编程的方法,其中包含了购物车的实现示例。
这些文献提供了从基础知识到实际示例的全面指导,能够帮助您了解如何使用Java Servlets和JSP实现购物车功能。
JSP 使用session购物车当客户在某家网站购买大量的各种商品时,需要跳转页面的次数会很多。
每当客户选择一种商品就需要把这种商品的信息记录到某个位置,并且这个记录能跟踪客户直到最后结账。
这样的“信息记录的位置”类似于某人去超市购物时使用的购物车,所以也把它形象的叫做“购物车”。
session对象可用于跟踪浏览者,本练习使用session对象实现简易的购物车。
这里需要三个页面相互协作来完成任务,第一个页面用于展示商品,供客户来选择,第二个页面用于实现购物流程的控制(选择继续购物或结账),另一个负责对客户结账处理。
步骤如下:(1)创建选择商品页面:shop.jsp,其效果如图3-19所示。
为了方便演示起见,本练习把客户选择商品过程简化为一个文本输入框,直接让客户输入商品名即可。
文件核心代码如下所示。
图3-19 选择商品<form name="form1" method="post" action="doShop.jsp"><div align="left"><table width="100%" border="0" cellspacing="5"><tr><td><p>请选择要购买的商品:<input type="text" name="goods"><input type="submit" name="Submit" value="提交"></p></td></tr></table></div></form>客户选择的商品数据并加入到购物车,另一个就是实现购物流程的控制(继续购物或结账)。
java项目开发实例
1. 实例一:购物车系统
该项目主要实现一个购物车系统,用户可以在网上购买商品,将商品放入购物车,然后结算,完成购买。
功能模块:
1. 用户登录注册:用户可以进行登录注册,可以保存用户信息;
2. 商品管理:可以增加删除商品,可以查看所有商品信息;
3. 购物车管理:可以将商品放入购物车,可以查看购物车中的商品;
4. 结算管理:可以查看购买的商品信息,并进行结算;
5. 订单管理:可以查看已经完成的订单,可以查看订单的状态。
实现技术:
1. 前端:HTML、CSS、JavaScript、Bootstrap等;
2. 后端:Servlet、JSP、MySQL等;
3. 框架:SpringMVC、Struts2等。
2. 实例二:在线考试系统
该项目主要实现一个在线考试系统,用户可以在网上进行考试,考试结束后可以查看考试结果。
功能模块:
1. 用户登录注册:用户可以进行登录注册,可以保存用户信息;
2. 试卷管理:可以增加删除试卷,可以查看所有试卷信息;
3. 试题管理:可以增加删除试题,可以查看所有试题信息;
4. 考试管理:可以设置考试时间,可以查看考试结果;
5. 成绩管理:可以查看考试成绩,可以查看。
一、/fly_winds/blog/static/531203252008254157519/if(action.equals("add")) {//添加商品String productid = request.getParameter("productid");CartDB dao = new CartDB();cartbean bean = new cartbean();bean=dao.getProductMessage(productid);boolean flag = true;Vector cart = (Vector) session.getAttribute("cart");if (cart == null) {//如果是第一次就创建购物车cart = new Vector();} else {//如果有该物品就数量加一for (int i = 0; i < cart.size(); i++) {cartbean bb = (cartbean) cart.elementAt(i);if (bb.getProductid().equals(productid)) {bb.setNumber(bb.getNumber() + 1);cart.setElementAt(bb, i);flag = false;}}}if (flag) {//如果是新商品就加入购物车中cart.addElement(bean);session.setAttribute("cart", cart);}response.sendRedirect("shoppingcart.jsp");}if (action.equals("modify")||action.equals("modify1")) {//更改购物车商品数量Vector cart = (Vector) session.getAttribute("cart");for (int i = 0; i < cart.size(); i++) {cartbean bb = (cartbean) cart.elementAt(i);int number = Integer.parseInt(request.getParameter("number" + i));bb.setNumber(number);}session.setAttribute("cart", cart);if(action.equals("modify")){response.sendRedirect("shoppingcart.jsp");}else if(action.equals("modify1")){response.sendRedirect("referorder.jsp");}}if (action.equals("del")||action.equals("del1")) {//从购物车上删除商品int id = Integer.parseInt(request.getParameter("id"));Vector cart = (Vector) session.getAttribute("cart");cart.removeElementAt(id);session.setAttribute("cart", cart);if(action.equals("del")){response.sendRedirect("shoppingcart.jsp");}else if(action.equals("del1")){response.sendRedirect("referorder.jsp");}}JSP中代码<%@ page contentType="text/html; charset=GBK" %> <%@ page import="java.util.Vector,shopping.bean.*" %> <html><head><title>购物车</title><link rel="stylesheet" type="text/css" href="syle/style.css"/> <style type="text/css"><!--.style5 {color: #FFFFFF;font-size: 16px;}-->.border {BORDER: #6687ba 1px solid}.style9 {color: #0792ed}body {margin-left: 0px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;}</style><script type="" language="javascript">function back(){history.back();}</script><script language="javascript" type=""><!--function check(number){var result =number.value;if(result==""){alert("数量不能为空!");number.focus();return false;}if(isNaN(result) || result<=0){alert("请输入合法的数量!");number.focus();return false;}form1.submit();}--></script><script type="" language="javascript">function referorder(){location.href="referorder.jsp";}</script><title>shoppingcart</title></head><body bgcolor="#ffffff"><br /><%Vector cart = (Vector)session.getAttribute("cart");if(cart == null || cart.size() == 0) {out.println("<h3 align='center'>您的购物车为空!</h3>");out.println("<center><a href='LoginJsp.jsp'>继续购物</a></center>"); } else {%><h3 align="center">您的购物车</h3><form name="form1" action="cartservlet?action=modify" method="POST"> <table border="0" width="100%" class="border"><tr><th>编号</th><th>商品名称</th><th>单价</th><th>数量</th><th>金额</th><th>删除</th></tr><%float total = 0;for(int i = 0; i < cart.size(); i++) {cartbean bean = (cartbean)cart.elementAt(i);//float price = bean.getPrice();String productid = bean.getProductid();float price = bean.getPrice();int number = bean.getNumber();float sum = price * number;total = total + sum;String total2=""+total;bean.setTotalprice(sum);//orders or=new orders();//or.setTotalprice(total);session.setAttribute("totalprice",total2);%><tr><td align="center"><%=i+1 %></td><td align="center">诺基亚 <%=productid%></td><td align="center">¥<%=price%>元</td><td align="center"><input type="text" size="5" name="number<%=i%>" value="<%=number%>" onblur="check(this);"/></td><td align="center">¥<%=sum%>元</td><td align="center"><a href="cartservlet?action=del&id=<%=i%>">删除</a></td></tr><%}%><tr><td align="center" bgcolor="#FFCC00" colspan="7">商品金额总计:¥<font color="red"><%=total %>元</font><input name="button2" type="button" class="input_bot" value="去收银台" onclick="referorder();"><input name="button" type="button" class="input_bot" onClick="back();" value="继续购物"></td> </tr></table></form><%}%></body></html>二、内置对象实例--购物车简介一、主要功能:1、“index.jsp”页面中显示用户可以购买的商品。
简述servlet的作用Servlet是Java编写的服务器端程序,用于处理客户端的HTTP请求并生成响应。
它是JavaEE(Java Enterprise Edition)的一部分,是构建动态Web应用程序的重要组件。
Servlet的作用主要有以下几个方面:1. 处理HTTP请求和生成响应:Servlet可以接收来自客户端的HTTP请求,并根据请求的内容进行相应的处理,例如查询数据库、计算、生成动态HTML等。
然后,Servlet可以生成一个包含响应内容的HTTP响应,返回给客户端。
2. 实现业务逻辑:Servlet可以作为Web应用程序的控制器,根据不同的请求参数或路径,调用相应的业务逻辑处理方法。
它可以处理用户注册、登录、查询、修改等各种业务功能。
3. 与数据库交互:Servlet可以通过Java的数据库连接技术(如JDBC)与数据库进行交互,实现数据的读取、插入、更新和删除等操作。
它可以接收客户端的请求,从数据库中查询数据并返回给客户端,或者将客户端提交的数据写入数据库。
4. 生成动态内容:Servlet可以根据客户端请求的不同,动态生成HTML、XML、JSON等格式的内容,并将其作为响应返回给客户端。
这样就可以实现个性化、实时更新的Web页面。
5. 跨域访问:Servlet可以处理跨域请求,通过设置响应头部信息,实现浏览器端的跨域访问控制。
这在多个域名或端口之间共享资源时非常有用。
6. 会话管理:Servlet可以通过会话对象(HttpSession)来管理用户会话状态。
它可以创建、销毁和跟踪会话,并存储和读取会话数据。
这对于实现用户登录、权限控制、购物车等功能至关重要。
7. 过滤和拦截:Servlet可以通过过滤器(Filter)来拦截请求和响应,对其进行预处理和后处理。
它可以用于验证用户身份、记录日志、压缩响应内容等。
通过过滤器,可以实现对请求和响应的统一处理,提高代码的复用性和可维护性。
实验二JSP语法和内置对象
一、实验目的
1、掌握JSP变量/方法,表达式,代码段和注释的使用方法;
2、掌握JSP指令的语法格式及用法;
3、掌握JSP常用动作的语法格式及用法;
4、掌握常用的JSP内置对象。
二、实验环境
Windows平台下,Myeclipse开发工具,Web服务器用Tomcat,Java开发环境用JDK1.5或更高。
三、实验内容:
1. 实现商品展示页面,简单的JSP页面如下:
2.实现购物车流程控制。
i.通过request.getParameter()方法获取商品名称,如果没有获取到商
品名称,重新返回购物页面。
ii.构造一个ArrayList对象存储商品名称,并将新的商品名称添加到ArrayList中。
iii.将ArrayList保存到session中
iv.如果单击“继续购买商品”按钮,则回到购物页面,如果单击“到收银台结账”,则前往结账页面。
3.客户结账处理。
从session中取出list的值存入ArrayList中,并遍历
输出购物车中的商品。
四、实验注意事项
调试程序时注意每个文件输入时的正确性及调试过程中的错误处理。
五、实验报告。
web前端购物车的实现思路一、购物车的介绍在现代电子商务网站中,购物车是用户进行商品选择和结算的重要工具。
它可以存储商品的信息,方便用户随时查看和修改已选商品,是网站购物流程不可或缺的一部分。
本文将介绍一种实现 web 前端购物车的思路。
二、购物车功能实现1. 数据存储购物车需要存储用户选择的商品信息。
可以使用 JavaScript 中的数组或对象来存储商品对象,每个对象包含商品的属性(如名称、价格、数量等)。
同时,可以使用浏览器的本地存储(如 localStorage)来保存购物车数据,以便用户关闭页面后仍可保留已选商品。
2. 商品展示购物车页面需展示用户已选择的商品信息,可通过遍历购物车数据,动态渲染商品列表。
每个商品显示名称、价格、数量等相关信息,并提供修改和删除选项。
3. 添加商品在商品详情页等位置,提供添加到购物车的功能。
通过监听添加按钮的点击事件,将商品信息添加到购物车数据中。
若商品已存在于购物车中,则更新数量;若不存在,则创建新的商品对象。
4. 修改商品数量购物车页面应提供修改商品数量的功能。
可以为每个商品设置增加和减少数量的按钮,并通过监听按钮的点击事件,更新对应商品的数量属性。
同时,需实时更新商品的总价和购物车的总价。
5. 删除商品购物车页面允许用户删除已选商品。
为每个商品提供删除按钮,通过监听按钮的点击事件,从购物车数据中移除对应商品对象,并刷新购物车页面。
6. 结算功能购物车页面需要提供结算功能,方便用户付款。
可以设置结算按钮,点击后跳转到结算页面,显示用户已选择的商品和总价,并提供支付方式选择和地址填写等功能。
三、购物车页面设计1. 布局购物车页面布局应简洁明了,可以分为商品列表区域和结算区域。
商品列表区域展示用户已选商品信息,结算区域包括总价信息和结算按钮。
2. 样式购物车页面的样式应符合网站的整体设计风格,注重用户体验。
可以使用 CSS 进行美化,如为商品列表添加边框、调整按钮样式、设置动画效果等,提升页面的美观性和交互性。
JAVAWEB购物车实验报告购物车是电子商务网站中常见的一个功能模块,通过购物车用户可以将自己想要购买的商品加入到购物车中,方便用户后续操作和管理。
本实验通过使用Java Web技术,实现了一个简单的购物车功能。
在本实验中,我们使用了Java语言和Servlet技术来实现购物车功能。
首先我们需要搭建一个Java Web项目,在项目中创建一个CartServlet类来处理购物车操作。
通过对请求的解析和处理,我们可以实现添加商品、移除商品、修改商品数量等操作。
在实现购物车功能时,我们使用了一个Cart类来表示购物车。
该类中包含了一个商品列表和一些方法来实现对商品的操作。
在CartServlet类中,我们通过Session来存储用户的购物车信息,这样用户可以在不同的页面之间共享购物车信息。
在添加商品到购物车时,我们首先判断商品是否已经在购物车中,如果是则增加商品数量,否则将商品添加到购物车中。
在移除商品时,我们只需要找到购物车中对应的商品并移除即可。
在修改商品数量时,我们需要找到购物车中对应的商品并更新数量。
为了展示购物车功能,我们创建了一个简单的网页,用户可以通过该网页向购物车中添加商品、移除商品和修改数量。
当用户添加商品到购物车时,页面会显示添加成功的提示信息,并显示当前购物车中的商品列表。
用户可以通过页面上的按钮来移除商品和修改商品数量。
通过实验,我们成功实现了一个简单的购物车功能,用户可以方便地将自己想要购买的商品添加到购物车中,并通过页面对购物车中的商品进行管理。
通过了解和使用Java Web技术,我们进一步加深了对Servlet和Session的理解,并学会了如何使用Java Web技术来开发购物车功能。
在未来的工作中,我们可以进一步完善购物车功能,比如增加结算功能和保存用户购物车信息的功能,以提升用户的购物体验。
此外,我们还可以学习和使用其他的Java Web框架,如Spring MVC和Struts等,来更加高效地开发和管理购物车功能。
1.1网上商城购物车模块实现案例(第2部分)1.1.1CartSessionBean+用户类+无状态Bean1、在该项目中再增加一个无状态的会话Bean(1)右击设计面板(2)该SessionBean的名称为CalculateSessionEJBBean,类型为stateless,由容器进行事务管理,interface类型设置为local/remote。
注意:EJB 2.0:“本地”接口和“远程”接口EJB 1.1规范给EJB客户端提供了一个remote interface和一个remote home interface与EJB 实例交互,得到位置的透明度。
以类似的形式,EJB 2.0规范现在给EJB客户端提供了一个local interface和一个local home interface来与共享同一个JVM的EJB实例交互。
EJB remote interface(javax.ejb.EJBObject)和remote home interface(javax.ejb.EJBHome)在本质上是Java RMI接口。
远程客户端运用接口和与Java RMI-IIOP兼容的参数与EJBs通讯。
参数和方法的结果值在同一个容器中传递,或者跨网络传递到远程容器。
这种编程模式给EJB客户端提供了一种访问EJB组件的方法,就好像这些组件是本地的一样。
然后,容器就可以透明地处理网络通讯和执行其它功能。
这种方法很适合粗粒度的(coarse-grained)方法调用,其中客户端和EJBs之间的客户端通讯保持到最小限度。
相反,EJB local interface(javax.ejb.EJBLocalObject)和local home interface (javax.ejb.EJBLocalHome)不是Java RMI接口,它们是EJB 2.0的新功能。
本地客户端——如其它EJBs,运用相同JVM中传递的参数直接与EJBs通讯。
JSP技术中使用MVC模式实现Web购物车摘要本文介绍了使用jsp技术实现基于mvc模式的web购物车的设计思想,并给出了部分程序代码。
关键词 web购物车;jsp;mvc;javabean;servlet中图分类号 tp393 文献标识码 a 文章编号1674-6708(2010)17-0121-020 引言java server pages简称jsp,是由sun公司倡导,多个公司共同建立的一种技术标准,它建立在servlet之上。
应用jsp,程序员或非程序员可以高效率地创建web应用程序,并使得开发的web应用程序具有安全性高、跨平台等优点。
1 mvc模式mvc是model-view-controller(模型-视图-控制器)的缩写,最早是应用在smalltalk语言中,为图形方式交互的软件提供一种架构。
当软件变得复杂时,适当地按功能分解能使结构更加清晰。
同样,对于界面显示和数据处理都较复杂的软件,将它们分离开来更利于维护,mvc正是为了这一问题而提出的。
mvc模式包含模型、视图、控制器3部分,其原理如图1,其中模型部分定义了软件的数据模型及操作细节,视图部分专门处理图形界面,控制器则是模型和视图之间的协调者。
图1mvc模式原理示意图从功能上看,视图和模型部分是互相影响的,如当用户单击界面的按钮时,模型部分应该执行相应的操作。
但一般情况下,视图和模型不会直接将变化事件通知对方,而是通过控制器来从中协调。
在设计时,视图部分将事件和控制器的事件处理器关联起来,而事件处理器又和模型部分的数据操作挂钩,当用户操作界面元素时,视图部分发出事件,控制器捕获该事件并通知模型部分执行数据操作,然后通知视图更新。
当然这并不是说视图和模型部分完全没有联系,但mvc的设计思想是尽量减少这两者的耦合。
web购物车在具体实现时,javabean实现模型部分,负责处理逻辑以及向jsp页面提供数据接口。
servlet实现控制器的功能,负责创建bean对象,调用相关的处理方法,并根据处理结果转到适当的页面。
应用Servlet实现购物车具体实现过程1、创建封装商品信息的值JavaBean---------GoodsSingle package com.yxq.valuebean;public class GoodsSingle {private String name; //保存商品名称private float price; //保存商品价格private int num; //保存商品购买数量public String getName() {return name;}public void setName(String name) { = name;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}}2、创建工具JavaBean-------- MyTools 实现字符型数据转换为整型及乱码处理package com.yxq.toolbean;import java.io.UnsupportedEncodingException;public class MyTools {public static int strToint(String str){ //将String型数据转换为int型数据的方法if(str==null||str.equals(""))str="0";int i=0;try{i=Integer.parseInt(str); //把str 转换成int 类型的变量}catch(NumberFormatException e){ // try-catch就是监视try中的语句,如果抛出catch中声明的异常类型i=0;e.printStackTrace(); //把Exception 的详细信息打印出来}return i;}public static String toChinese(String str){ //进行转码操作的方法if(str==null)str="";try {str=new String(str.getBytes("ISO-8859-1"),"gb2312");} catch (UnsupportedEncodingException e) {str="";e.printStackTrace();}return str;}}3、创建购物车JavaBean------ ShopCar实现添加、删除,购物车制作package com.yxq.toolbean;package com.yxq.toolbean;import java.util.ArrayList;import com.yxq.valuebean.GoodsSingle;public class ShopCar {private ArrayList buylist=new ArrayList();//用来存储购买的商品public void setBuylist(ArrayList buylist) {this.buylist = buylist;}/*** @功能向购物车中添加商品* @参数single为GoodsSingle类对象,封装了要添加的商品信息*/public void addItem(GoodsSingle single){if(single!=null){if(buylist.size()==0){//如果buylist中不存在任何商品GoodsSingle temp=new GoodsSingle();temp.setName(single.getName());temp.setPrice(single.getPrice());temp.setNum(single.getNum());buylist.add(temp); //存储商品}else{//如果buylist中存在商品int i=0;for(;i<buylist.size();i++){//遍历buylist集合对象,判断该集合中是否已经存在当前要添加的商品GoodsSingle temp=(GoodsSingle)buylist.get(i);//获取buylist集合中当前元素if(temp.getName().equals(single.getName())){ //判断从buylist集合中获取的当前商品的名称是否与要添加的商品的名称相同//如果相同,说明已经购买了该商品,只需要将商品的购买数量加1temp.setNum(temp.getNum()+1);//将商品购买数量加1break;//结束for循环}}if(i>=buylist.size()){//说明buylist中不存在要添加的商品GoodsSingle temp=new GoodsSingle();temp.setName(single.getName());temp.setPrice(single.getPrice());temp.setNum(single.getNum());buylist.add(temp);//存储商品}}}}/*** @功能从购物车中移除指定名称的商品* @参数name表示商品名称public void removeItem(String name){for(int i=0;i<buylist.size();i++){ //遍历buylist集合,查找指定名称的商品GoodsSingle temp=(GoodsSingle)buylist.get(i);//获取集合中当前位置的商品if(temp.getName().equals(name)){ //如果商品的名称为name参数指定的名称if(temp.getNum()>1){ //如果商品的购买数量大于1temp.setNum(temp.getNum()-1); //则将购买数量减1break; //结束for循环}else if(temp.getNum()==1){ //如果商品的购买数量为1buylist.remove(i); //从buylist集合对象中移除该商品}}}}4、创建实例首页面index.jsp,初始化商品信息<%@ page contentType="text/html;charset=gb2312"%><jsp:forward page="/index"/>5、创建处理用户访问首页面请求的Servlet---IndexServletpackage com.yxq.servlet;import java.io.IOException;import java.util.ArrayList;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 com.yxq.valuebean.GoodsSingle;public class IndexServlet extends HttpServlet {private static ArrayList goodslist=new ArrayList();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();session.setAttribute("goodslist",goodslist);response.sendRedirect("show.jsp");}static{ //静态代码块String[] names={"苹果","香蕉","梨","橘子"};float[] prices={2.8f,3.1f,2.5f,2.3f};for(int i=0;i<4;i++){GoodsSingle single=new GoodsSingle();single.setName(names[i]);single.setPrice(prices[i]);single.setNum(1);goodslist.add(single);}}}6、show.jsp显示商品信息<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.ArrayList" %><%@ page import="com.yxq.valuebean.GoodsSingle" %> <% ArrayListgoodslist=(ArrayList)session.getAttribute("goodslist"); %><table border="1" width="450" rules="none" cellspacing="0" cellpadding="0"><tr height="50"><td colspan="3" align="center">提供商品如下</td></tr><tr align="center" height="30" bgcolor="lightgrey"> <td>名称</td><td>价格(元/斤)</td><td>购买</td></tr><% if(goodslist==null||goodslist.size()==0){ %><tr height="100"><td colspan="3" align="center">没有商品可显示!</td></tr><%}else{for(int i=0;i<goodslist.size();i++){GoodsSinglesingle=(GoodsSingle)goodslist.get(i);%><tr height="50" align="center"><td><%=single.getName()%></td><td><%=single.getPrice()%></td><td><a href="doCar?action=buy&id=<%=i%>">购买</a></td></tr><%}}%>7、创建处理用户购买、移除、清空购物车请求的ServletServlet----- BuyServletpackage com.yxq.servlet;import java.io.IOException;import java.util.ArrayList;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 com.yxq.toolbean.MyTools;import com.yxq.toolbean.ShopCar;import com.yxq.valuebean.GoodsSingle;public class BuyServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String action=request.getParameter("action"); //获取action参数值if(action==null)action="";if(action.equals("buy")) //触发了“购买”请求buy(request,response); //调用buy()方法实现商品的购买if(action.equals("remove")) //触发了“移除”请求remove(request,response); //调用remove()方法实现商品的移除if(action.equals("clear")) //触发了“清空购物车”请求clear(request,response); //调用clear()方法实现购物车的清空}//实现购买商品的方法protected void buy(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();String strId=request.getParameter("id"); //获取触发“购买”请求时传递的id参数,该参数存储的是商品在goodslist对象中存储的位置int id=MyTools.strToint(strId);ArrayListgoodslist=(ArrayList)session.getAttribute("goodslist");GoodsSingle single=(GoodsSingle)goodslist.get(id);ArrayListbuylist=(ArrayList)session.getAttribute("buylist"); //从session范围内获取存储了用户已购买商品的集合对象if(buylist==null)buylist=new ArrayList();ShopCar myCar=new ShopCar();myCar.setBuylist(buylist); //将buylist对象赋值给ShopCar类实例中的属性myCar.addItem(single); //调用ShopCar类中addItem()方法实现商品添加操作session.setAttribute("buylist",buylist);response.sendRedirect("show.jsp"); //将请求重定向到show.jsp页面}//实现移除商品的方法protected void remove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();ArrayListbuylist=(ArrayList)session.getAttribute("buylist");String name=request.getParameter("name");ShopCar myCar=new ShopCar();myCar.setBuylist(buylist); //将buylist对象赋值给ShopCar类实例中的属性myCar.removeItem(MyTools.toChinese(name)); //调用ShopCar类中removeItem ()方法实现商品移除操作response.sendRedirect("shopcar.jsp");}//实现清空购物车的方法protected void clear(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session=request.getSession();ArrayListbuylist=(ArrayList)session.getAttribute("buylist"); //从session范围内获取存储了用户已购买商品的集合对象buylist.clear();//清空buylist集合对象,实现购物车清空的操作response.sendRedirect("shopcar.jsp");}}8、在web.xml文件中配置Servlet<?xml version="1.0" encoding="UTF-8"?><web-app><!-- 配置IndexServlet --><servlet><servlet-name>indexServlet</servlet-name><servlet-class>com.yxq.servlet.IndexServlet</servlet-class ></servlet><servlet-mapping><servlet-name>indexServlet</servlet-name><url-pattern>/index</url-pattern></servlet-mapping><!-- 配置BuyServlet --><servlet><servlet-name>buyServlet</servlet-name><servlet-class>com.yxq.servlet.BuyServlet</servlet-class> </servlet><servlet-mapping><servlet-name>buyServlet</servlet-name><url-pattern>/doCar</url-pattern></servlet-mapping></web-app>9、创建页面shopcar.jsp购物车<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.util.ArrayList" %><%@ page import="com.yxq.valuebean.GoodsSingle" %> <%//获取存储在session中用来存储用户已购买商品的buylist 集合对象ArrayListbuylist=(ArrayList)session.getAttribute("buylist");float total=0; //用来存储应付金额%><table border="1" width="450" rules="none" cellspacing="0" cellpadding="0"><tr height="50"><td colspan="5" align="center">购买的商品如下</td></tr><tr align="center" height="30" bgcolor="lightgrey"> <td width="25%">名称</td><td>价格(元/斤)</td><td>数量</td><td>总价(元)</td><td>移除(-1/次)</td><% if(buylist==null||buylist.size()==0){ %><tr height="100"><td colspan="5" align="center">您的购物车为空!</td></tr><%}else{for(int i=0;i<buylist.size();i++){GoodsSingle single=(GoodsSingle)buylist.get(i);String name=single.getName(); //获取商品名称float price=single.getPrice(); //获取商品价格int num=single.getNum(); //获取购买数量//计算当前商品总价,并进行四舍五入float money=((int)((price*num+0.05f)*10))/10f;total+=money; //计算应付金额%><tr align="center" height="50"><td><%=name%></td><td><%=price%></td><td><%=num%></td><td><%=money%></td><td><ahref="doCar?action=remove&name=<%=single.getName() %>">移除</a></td></tr><%}}%><tr height="50" align="center"><td colspan="5">应付金额:<%=total%></td></tr><tr height="50" align="center"><td colspan="2"><a href="show.jsp">继续购物</a></td><td colspan="3"><a href="doCar?action=clear">清空购物车</a></td></tr></table>。