package com.book3un.action;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import javax.servlet.http.Cookie;
import org.apache.struts2.ServletActionContext;
import com.book3un.action.model.GoodsModel;
import com.book3un.bookpresent.biz.BooksLogic;
import com.book3un.common.actions.BaseAction;
import com.book3un.dataentity.Booksinfo;
import com.opensymphony.xwork2.ActionContext;
/**
* @author:王浩然
* @创作时间:2008-8-1 上午09:17:07
* @E-mail:wanghaoran04141205@163.com
* @说明:
* @最后一次修改时间:
* @修改人:
*/
public class GoodsAction extends BaseAction {
private static final long serialVersionUID = 6735634600866791768L;
private GoodsModel gm = null;
public Object getModel() {
if (gm == null) {
this.gm = new GoodsModel();
}
return gm;
}
private BooksLogic bl = null;
public void setBl(BooksLogic bl) {
this.bl = bl;
}
public String execute() {
return this.SUCCESS;
}
public String clearUpCar() {
// 清空cookies
Cookie cookies[] = ServletActionContext.getRequest().getCookies();
System.out.println("now in clear");
if (cookies != null && cookies.length > 0) {
int length = cookies.length;
for (int i = 0; i < length; i++) {
cookies[i].setMaxAge(0);
ServletActionContext.getResponse().addCookie(cookies[i]);
}
}
// 清空session
ActionContext.getContext().getSession().put(
ServletActionContext.getRequest().getRemoteAddr(), null);
return "toCar";
}
public String putInOrGoShoppingCar() {
//得到session
Map session = ActionContext.getContext().getSession();
// 这里用session做了个标记,当用户第一次查看购物车时,读出所有的cookie,然后放到session里,以后用户再查看或进入购物车时,
//就直接从session里拿数据,而不用再读cookie了
if (session.get("flag") == null) {
// 如果用户是购买了书,那么bookID就一定有值,我们就把这本书加进cookie
if (gm.getBookId() != null && gm.getBookId() > 0) {
String bookId = gm.getBookId().toString();
Cookie cookie = new Cookie(bookId, bookId);
cookie.setMaxAge(31536000);// 一年
ServletActionContext.getResponse().addCookie(cookie);
}
// 读cookie
Cookie cookies[] = ServletActionContext.getRequest().getCookies();
if (cookies != null && cookies.length > 0) {
int length = cookies.length;
for (int i = 0; i < length; i++) {
Cookie coo = cookies[i];
// 我们得对coo.getName进行判断,如果是书的话就执行下面这两句话
// 得到书的信息
if (coo.getName().length() <= 6) {
// Booksinfo
// booksinfo=bl.getBooksinfo(Long.parseLong(coo.getName()));
// gm.getCol().add(booksinfo);
Booksinfo booksinfo = new Booksinfo();
booksinfo.setName(coo.getName());
//放到集合里,用来显示
gm.getCol().add(booksinfo);
}
}
}
//把从cookie里读出的数据放到session里,
session.put(ServletActionContext.getRequest().getRemoteAddr(), gm
.getCol());
//设置标记,表示已经读过cookie了,下次直接从session里取
session.put("flag", "havaReadCookie");
} else {
//从session里取出数据,
Collection col = (Collection) session.get(ServletActionContext
.getRequest().getRemoteAddr());
// 如果用户是购买了书,那么bookID就一定有值,我们就把这本书加进cookie
if (gm.getBookId() != null && gm.getBookId() > 0) {
String bookId = gm.getBookId().toString();
Cookie cookie = new Cookie(bookId, bookId);
cookie.setMaxAge(31536000);// 一年
ServletActionContext.getResponse().addCookie(cookie);
// Booksinfo booksinfo=bl.getBooksinfo(Long.parseLong(bookId));
Booksinfo booksinfo = new Booksinfo();
booksinfo.setName(bookId);
if (col == null) {
col = new ArrayList();
col.add(booksinfo);
}
col.add(booksinfo);
}
gm.setCol(col);
session.put(ServletActionContext.getRequest().getRemoteAddr(), gm
.getCol());
}
// userId是当前用户的ID
return "toShoppintCar";
}
public String prepareData() {
// if(gm.getBookId()!=null&&gm.getBookId()>0){
// gm.setGoodsInfo(bl.getBooksinfo(gm.getBookId()));
// }
Booksinfo bookinfo = new Booksinfo();
bookinfo.setId(gm.getBookId());
gm.setGoodsInfo(bookinfo);
bookinfo.setName("javao1");
return "toFavorategoods";
}
}
shoppingCar.jsp
<%@ page contentType="text/html;charset=GB18030"%>
<%@ taglib prefix="w" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>购物车</title>
</head>
<body>
<form name="form" action="clearUpAction.book3un" method="post">
<w:iterator value="col">
book:<w:property value="name"/>
</w:iterator>
<br>
<input type="submit" value="清空" >
</form>
</body>
</html>
bookList.jsp
<%@ page contentType="text/html;charset=GB18030"%>
<%@ taglib prefix="w" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" />
<title>图书展示页面</title>
</head>
<body>
<form >
java011 <a href="goodsAction.book3un?bookId=123">收藏</a> <a href="shoppingCarAction.book3un?bookId=123">放入购物车</a>
</form>
</body>
</html>
struts.xml
<action name="clearUpAction" class="goodsAction" method="clearUpCar">
<result name="toCar">/book/shoppingCar.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="goodsAction" class="goodsAction" method="prepareData">
<result name="toFavorategoods">/book/favorateGoods.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="shoppingCarAction" class="goodsAction" method="putInOrGoShoppingCar">
<result name="toShoppintCar">/book/shoppingCar.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
分享到:
相关推荐
在IT领域,特别是Web开发中,使用Struts2框架结合cookies来实现购物车功能是一种常见的技术方案。本文将深入解析如何通过Struts2与cookies协同工作,构建一个实用且高效的在线购物车系统。 ### Struts2简介 Struts...
在这个"struts实现购物车+数据库"项目中,我们将会深入探讨如何利用Struts框架来创建一个网上订餐系统,其中包含购物车功能以及与SQL Server 2005数据库的交互。 首先,我们要理解Struts的工作原理。Struts通过拦截...
最后,为了实现购物车的持久化,我们可以考虑在用户会话结束时将购物车内容保存到数据库,或者使用cookie在用户下次访问时恢复购物车状态。这需要在session过期或用户登出时执行相应的逻辑。 总结起来,基于Struts...
购物车功能的实现往往涉及到状态管理,这可能涉及到Cookie或Session。当用户决定结算时,系统会验证用户身份,生成订单,并将订单信息持久化到数据库。这一系列复杂的业务流程在Struts2的Action和JSP的协同工作下...
购物车状态可以存储在session或cookie中,Struts处理用户的购物车操作。 4. 订单处理:生成订单、支付处理、订单状态跟踪。Struts控制器可以调用业务服务完成这些流程,而Hibernate用于处理订单和支付相关的数据库...
3. **购物车**:使用Session或Cookie存储用户选择的商品,处理添加、删除和修改数量等操作。 4. **订单处理**:Spring服务层处理订单创建、支付和状态更新,同时利用Hibernate处理订单与书籍之间的关联关系。 5. **...
本项目中,你分享了三种不同的实现购物车的方法,这可能包括基于标签(Tag)、脚本语言(如JavaScript或jQuery)以及Struts框架的实现。下面我们将详细探讨这些技术及其在构建购物车功能中的应用。 首先,**标签...
3. **存储购物车信息**:由于此项目没有直接使用数据库,购物车信息可能被临时存储在Session或Cookie中。Session在服务器端,能存储大量数据,而Cookie在客户端,存储量有限但易于实现。 4. **响应更新**:Servlet将...
7. Session和Cookie的使用:存储用户会话信息,实现购物车功能。 通过学习和实践"myeclipse+struts+jsp网上书店13",开发者不仅可以深入理解Java Web开发流程,还能提升在MVC框架下进行项目开发的能力,为后续的...
使用Struts2,我们可以定义多个Action来对应这些操作,通过session或cookie存储购物车数据。同时,JS可以用于前端交互,提供实时的反馈和验证。 3. **我的订单**:用户查看订单历史、确认支付和跟踪物流等功能,...
3. **Cookie与Session**:在购物车应用中,可能用Cookie存储用户的选择,或者使用Session保持用户的购物车状态。 4. **转发与重定向**:Servlet中的`RequestDispatcher.forward()`和`Response.sendRedirect()`方法...
1. 用户认证与授权:使用session和cookie管理用户登录状态,实现权限控制。 2. 安全性:对敏感信息如密码进行加密存储,防止SQL注入和XSS攻击。 3. 性能优化:合理设计数据库表结构,使用索引,优化查询语句,减少...
购物车状态保存在服务器端,可能使用session或cookie实现,Struts处理购物车操作,SQL Server记录用户订单。 4. 订单处理:结账、支付、订单状态跟踪。涉及到支付网关集成,可能使用第三方API,订单信息存储在SQL ...
【标题】"网上书城 jsp+struts+spring"是一个基于Java技术栈的Web应用程序,主要用于实现在线书店的功能。这个项目将jsp(JavaServer Pages)用于视图展示,Struts作为MVC(模型-视图-控制器)框架处理业务逻辑,而...
在Struts2框架中,对request和session的管理和获取是实现Web应用中用户交互和状态维护的重要手段。本文将深入探讨Struts2中如何获取request和session,以及这两种对象的作用和应用场景。 ### Struts2框架简介 ...
购物车状态需要在多个页面间保持,可以使用session或cookie实现。 4. 订单模块:创建订单,支付处理。支付部分可能涉及到第三方支付接口的集成,如支付宝或微信支付。 5. 后台管理模块:管理员对商品、订单进行...
如登录状态、购物车信息等,它通过在服务器端存储一个唯一标识符(通常为一个随机字符串),并在每次请求时将这个标识符通过cookie或URL重写等方式传递回服务器,从而实现跨请求的数据共享。 ### STRUTS2中获取...
"简单session购物车"是一个基于Java Web技术实现的示例,它利用了Struts框架和Session来实现一个基本的购物车功能。下面我们将深入探讨这个主题。 首先,我们来理解什么是Session。Session是在服务器端保存用户状态...
3. 会话管理:使用Cookie和Session来跟踪用户的登录状态和购物车信息,确保用户在不同页面间的操作一致性。 4. 模板引擎:如FreeMarker或Velocity,可以生成更复杂的HTML页面,提高代码的可读性和复用性。 5. ...