javaweb学习——session和Cookie实现购物车功能
1.创建Book类,实现对图书信息的封装。
package cn.it.sessionDemo.example1; import java.io.Serializable; /**
* 该类实现对图书的封装
*
* @author 12428
*
*/
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
private String ID;
private String name; public Book() { } public Book(String ID, String name) {
this.ID = ID;
this.name = name;
} public String getID() {
return ID;
} public void setID(String iD) {
ID = iD;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
2.创建一个BookDB类实现对图书类的操作
package cn.it.sessionDemo.example1; import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map; /**
* 该类实现数据库模拟
*
* @author 12428
*
*/
public class BookDB {
private static Map<String, Book> books = new LinkedHashMap<String, Book>();
// 静态代码块在Java类被加载时执行,由于类只加载一次,应此静态代码块只执行一次。
static {
books.put("1", new Book("1", "javaweb开发"));
books.put("2", new Book("2", "jdbc开发"));
books.put("3", new Book("3", "java基础"));
books.put("4", new Book("4", "struts开发"));
books.put("5", new Book("5", "spring开发"));
} // 获得所有的图书
public static Collection<Book> getAll() {
return books.values();
} // 根据指定的ID获得图书
public static Book getBook(String ID) {
return books.get(ID);
} }
3.创建一个ListBookServlet类,用来显示可购买的图书信息。
package cn.it.sessionDemo.example1; import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* 该servlet是显示所有的图书列表。通过图书后面的购买连接可以把图书添加到购物车中
*
* @author 12428
*
*/
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public ListBookServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Collection<Book> books = BookDB.getAll();
out.write("本站的图书有:");
for (Book b : books) {
// 将图书的id值作为参数传过去
String url = "/SessionDemo2/PurchaseServlet?id=" + b.getID();
out.write(b.getName() + "<a href='" + url + " '>点击购买</a><br/>");
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
4.创建一个实现购物车功能的servlet类
package cn.it.sessionDemo.example1; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* 该servlet类是用于实现购物车功能,既将用户购买的东西作为session的属性值存进去,再重定向到 到已购买商品的也买你
*
* @author 12428
*
*/
@WebServlet("/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public PurchaseServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获得用户的购买信息
String id = request.getParameter("id");
// 有些用户会直接访问这个Servlet,先判断访问时是否带有书的ID
if (id == null) {
// 如果Id为空,返回图书列表Servlet
String url = "/SessionDemo2/ListBookServlet";
response.sendRedirect(url);
//此处一定要返回,不然会出现错误
return;
} // 获取购买的图书信息
Book book = BookDB.getBook(id);
// 创建session对象
HttpSession session = request.getSession();
// 从session中获得购物车对象
List<Book> cart = (List<Book>) session.getAttribute("cart");
// 判断session对象是否有cart这个属性,如果没有这个属性的话,集合cart的值应为空
if (cart == null) {
// 没有cart属性,用户是首次购买,为用户创建一个购物车
cart = new ArrayList<Book>();
// 将购物车对象添加到session对象中
session.setAttribute("cart", cart);
}
// 将商品放入购物车
cart.add(book); // 创建一个Cookie存放session的信息
Cookie cookie = new Cookie("JSESSION", session.getId());
cookie.setMaxAge(60 * 30);
cookie.setPath("/SessionDemo2");
// 将cookie发送到客户端
response.addCookie(cookie); // 重定向到已购买商品的页面。
String url = "/SessionDemo2/CartServlet";
response.sendRedirect(url);
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
5.创建一个展示用户购买信息的类
package cn.it.sessionDemo.example1; import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; 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; @WebServlet("/CartServlet")
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public CartServlet() {
super();
// TODO Auto-generated constructor stub
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter(); // 变量cart引用用户的购物车
List<Book> cart = null;
// 创建一个变量是来判断用户是否购买过商品
boolean Flag = true;
// 获得用户的session,如果没有查到也不创建新的session。
HttpSession session = request.getSession(false);
// 如果session为空,Flag为false;
if (session == null) {
Flag = false;
} else {// 不为空,就获得用户的购物车
cart = (List<Book>) session.getAttribute("cart");
// 如果用户的购物车为空,就设置Falg为false。
if (cart == null) {
Flag = false;
} } // 如果Flag为false,表明用户没有购买过商品,重定向到ListServlet页面。
if (!Flag) {
out.write("对不起,你没有购买任何商品");
} else {
// 显示用户的购买信息
out.write("你购买的商品有:");
for (Book b : cart) {
out.write(b.getName() + "<br/>");
} }
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }
javaweb学习——session和Cookie实现购物车功能的更多相关文章
- 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能
Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...
- javaWeb学习-----session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- 【Tomcat】JSP使用Session、Cookie实现购物车
购物界面shop.jsp 初始页面 添加商品后,在session中设置属性,重定向回到shop.jsp,然后根据session的内容显示结果 Cookie设置setMaxAge可以延长session的 ...
- django学习,session与cookie
Cookies,某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明.Cook ...
- JavaWeb基础-Session和Cookie
JSP状态管理 http的无状态性,服务器不会记得发送请求的浏览器是哪一个 保存用户状态的两大机制:session和cookie Cookie:是web服务器保存在客户端的一系列文本信息 作用:对特定 ...
- JavaWeb基于session和cookie的数据共享
在了解session和cookie技术之前,我们需要先了解一下什么是会话?会话可以简单理解为用户打开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程称为一个会话.这样, ...
- JavaWeb学习——session总结
一.session简介 sesion也就是会话,Session对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整 ...
- Javaweb学习笔记5—Cookie&Session
今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...
- 工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能
登入界面<% Cookie[] cks =request.getCookies(); String str=null; for(Cookie ck:cks) { if(ck.getName(). ...
随机推荐
- 如何将本地项目推送到Github
如何将本地项目推送到Github Tip:在本地要安装好Git,官网:https://git-scm.com/ 一个学习Git的好地方:https://try.github.io/ 在线闯关实战,边练 ...
- Mac修改用户名后程序配置和文件都找不到了?
小编今天手残,修改mac 的用户名,幸亏文件没丢失,要不然配置程序估计至少要花费周末的两天时间了.. 所幸的是,各种Google,终于找回了原用户名下的所有配置. 接下来,讲讲小编如何入坑又如何脱坑的 ...
- SpringMVC: JSON
SpringMVC:JSON讲解 什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编 ...
- POJ - 3349 Snowflake Snow Snowflakes (哈希)
题意:给定n(0 < n ≤ 100000)个雪花,每个雪花有6个花瓣(花瓣具有一定的长度),问是否存在两个相同的雪花.若两个雪花以某个花瓣为起点顺时针或逆时针各花瓣长度依次相同,则认为两花瓣相 ...
- 从华硕裁员、分拆业务看传统PC企业转型到底有多难?
近段时间,华硕的处境可谓"冰火两重天".一方面,华硕正式发布ROG游戏手机.这款手机以超强性能和华丽外观,让游戏玩家群体为之沸腾.即使最高售价高达12999元,还是有不少玩家趋之若 ...
- js 获取时间对象
1.当前系统时间 var date=new Date(); 2.字符串转时间对象 var date=new Date("2018-01-01"); 3.获取年份: var y ...
- C# 添加Log文件、记录Log
其实在平时的开发过程中都是不怎么写log的,觉得在debug中能看得一清二楚.同事小姐姐前辈,一直就我不写log进行批判,但是我从来不改,哈哈.也算是遇到报应了,在最近一个工程里,本地调试一切正常,到 ...
- iOS应用内跳转到指定系统设置页
APP的跳转: 通过[ [UIApplication sharedApplication] openURL:url]这种方法来实现的. iOS 10以后跳转设置页要用 [[UIApplication ...
- hibernate 插入date值到postgresql,丢失时分秒
用hibernate插入java.util.Date数据时发现 时分秒 会丢失.如 2014-05-30 15:59:16.921 在postgresql数据库中显示2014-05-30 00:00: ...
- 直线电机设计与优化(TFLM,FSLM)论文阅读笔记3
2.21-(2.7论文引出)傅里叶对开关磁通电机建模 Modeling of Flux Switching Permanent Magnet Machines With Fourier Analysi ...