【购物车中的信息保存】

【Book.java】

package com.Higgin.shopping;

public class Book {
private String id;
private String name;
private String author;
private double price; public Book(String id, String name, String author, double price) {
this.id = id;
this.name = name;
this.author = author;
this.price = price;
} //忽略get/Set方法
}

【Db.java】  模拟数据库

package com.Higgin.shopping;

import java.util.LinkedHashMap;
import java.util.Map; import org.junit.Test; /**
* 模拟一个保存Book的数据库
*/
public class Db {
private static Map<String,Book> map=new LinkedHashMap<String,Book>(); static{
map.put("1", new Book("1","《spring实战》","沃尔斯 (Craig Walls)",66));
map.put("2", new Book("2","《大型分布式网站架构设计与实践》","陈康贤",79));
map.put("3", new Book("3","《一线架构师实践指南》","温昱",35));
map.put("4", new Book("4","《高性能网站构建实战》","刘鑫",88));
map.put("5", new Book("5","《淘宝技术这十年》","子柳",45));
}
public static Map getAll(){
return map;
} @Test
public void test(){
Map<String,Book> map=Db.getAll(); //获取模拟数据库Db的所有Book数据
for(Map.Entry<String, Book> entry:map.entrySet()){
Book book=entry.getValue();
System.out.println(book.getName()+"<a href='BuyServlet?id="+book.getId()+"' target='_blank' >购买</a><br/>");
}
}
}

【ListBookServlet.java】 商品列表购买页面

package com.Higgin.shopping;

import java.io.IOException;
import java.io.PrintWriter;
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; /**
* 购买页面
* 模拟网站首页 列出所有书本
*/
@WebServlet("/ListBookServlet")
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public ListBookServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter(); out.println("本站有如下书籍:<br/>");
Map<String,Book> map=Db.getAll(); //获取模拟数据库Db的所有Book数据
for(Map.Entry<String, Book> entry:map.entrySet()){
Book book=entry.getValue();
//点击"购买"后跳转至 BuyServlet处理,并带上对应的书本Id
out.print(book.getName()+"<a href='BuyServlet?id="+book.getId()+"' target='_blank' >购买</a><br/>");
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
} }

【BuyServlet.java】 点击购买之后

package com.Higgin.shopping;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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; //点击购买
@WebServlet("/BuyServlet")
public class BuyServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public BuyServlet() {
super();
} //ListBookServlet点击购买后跳转到这里
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id=request.getParameter("id"); //获取书本的Id
Book book=(Book) Db.getAll().get(id); //根据Id查找"数据库"对应的书,即本次购买的书 HttpSession session=request.getSession(); //从Session得到用户用于保存所有书的集合(购物车)
List<Book> list = (List) session.getAttribute("listBook"); //首次购买这里没有数据
if(list==null){ //如果是首次购买
list=new ArrayList(); //新建一个List
session.setAttribute("listBook", list); //将购买的书本放入Session
}
list.add(book); //每多购买一本,就在List中多添加一本书
//request.getRequestDispatcher("/ListCarServlet").forward(request, response); //转发会导致页面在刷新时,不断购买刚刚购买的商品
response.sendRedirect(request.getContextPath()+"/ListCarServlet"); //重定向:可以避免刷新时重复购买的情况
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
} }

【ListCarServlet.java】  购物车页面(点击购买了多少书本,就展示多少书本)

package com.Higgin.shopping;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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("/ListCarServlet")
public class ListCarServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ListCarServlet() {
super();
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out =response.getWriter(); HttpSession session =request.getSession(false); //获取Session
if(session==null){ //如果Session中为空
out.write("您没有购买任何商品!!!");
return ;
} out.write("您购买了如下商品:<br/>");
List<Book> list=(List) session.getAttribute("listBook"); //如果Session不为空,提取对应的Session中的数据
for(Book book:list){
out.write(book.getName()+"<br/>"); //将提取的数据进行展示
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
} }

【运行结果】

[1. 进入 http://localhost:8080/HelloServlet/ListBookServlet]

[2.点击购买]

[ 3.再点 ]

16_会话技术_Session案例的更多相关文章

  1. 16_会话技术_Session

    [Session简述] * 在Web开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下),因此,在需要保存用户数据时,服务 ...

  2. 会话技术之Cookie 和 Session

    为什么要使用会话技术 会话从字面上来说就是,就是两个人说话,也就是两个人交流,那么这里说的是计算机web端的交流,因为互联网是基于HTTP传输信息的,而http传输是无状态协议,缺少状态,意味着如果后 ...

  3. 会话技术cookie和session详解

    什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...

  4. JavaWeb学习笔记五 会话技术Cookie&Session

    什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...

  5. 关于PHP中会话技术的知识点分享

    前言:在PHP中会话技术也是特别重要的,主要应用在免登录,保存一些持久化数据等等的方面,但是后期的介绍中,我将会放弃这种技术改用redis方法来替换这种方法. (一)cookie技术(即数据缓存在客户 ...

  6. 6.19-response(响应),session(会话技术,服务器端技术) 内置对象,application(内置对象),pageContext (内置对象),cookie(客户端技术)

    一.response(响应) 页面重定向 response.sendRedirect(""); 转发: request.getRequestDispatcher("&qu ...

  7. php会话技术之Session用法

    php会话技术之Session用法举例. 本文原始链接:http://www.jbxue.com/article/8940.html1.创建session <?php     //创建sessi ...

  8. 会话技术: Cookie Session JSP

    ##  Cookie A..概念:客户端会话技术,将数据保存到客户端 B.使用步骤: 1.创建Cookie对象,绑定数据 new Cookie(String  name, String value) ...

  9. 5.13会话技术Cookie---Session

    .会话技术: 1.会话:一次会话中包含多次请求和相应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 2.功能:在一次会话的范围内的多次请求间,共享数据 3.方式: 1.客 ...

随机推荐

  1. cocos2d-x 动画加速与减速

    转自:http://novacreo.com/%E7%A8%8B%E5%BA%8F%E7%BB%84/cocos2d-x%E5%8A%A8%E7%94%BB%E5%8A%A0%E9%80%9F%E4% ...

  2. 今天写一些 有关iOS 多图片组合 成一张图片的问题。保持原像素不变

    1.要求:服务器给一张图片模板,要在模版上镂空,然后添加一些别的图片,然后组合成一张图,这个模版的像素 不是固定的,有可能比 当前手机屏幕大.所以,在组合截图的时候,有一定的要求. 贴代码: /** ...

  3. 【47】请使用traits classes表现类型信息

    1.考虑下面的需求,对迭代器移动d个单位.因为不同类型的迭代器,能力不同,有的迭代器(vector,deque内置迭代器)可以一步到位移动到指定位置,有的迭代器(list内置迭代器)必须一步一步移动, ...

  4. PHP函数ip2long转换IP时数值太大产生负数的解决办法

    有两种办法: 1. bindec( decbin($long))  利用bindec和decbin两个函数转换一次就没有问题了 我一直在用上面的方法,但是在升级到PHP7以后就不起作用了(因为最近只进 ...

  5. (DP6.1.2.1)UVA 147 Dollars(子集和问题)

    /* * UVA_147.cpp * * Created on: 2013年10月12日 * Author: Administrator */ #include <iostream> #i ...

  6. ios项目开发(天气预报项目):通过经纬度获取当前城市名称

     1 . 在项目里加入� CoreLocation.framework 2 .在 .h 文件输入例如以下: 1.#import <CoreLocation/CLLocation.h> ...

  7. C#系列之String和StringBuilder

    前言 首先和博园的各位打声招呼,小弟在博园呆了也有一年多了.平常一有时间就会过来看看文章,学习各位的经验,现在养成了一种一天不来博园,心里就不踏实的习惯,不知道在看我博文的大哥们有没有这个感觉. 读归 ...

  8. (原)nginx 源码编译

    要在nginx上开发,所以先了解下这个是干嘛的..百度一下很多 编译源码需要的组件 1.zlib 2.pcre 3.openssl 使用ubuntu的话.可以直接使用 sudo apt-get ins ...

  9. HTTP 无法注册 URL http://+:12345/HelloWcfService/。进程不具有此命名空间的访问权限

    运行的时候却发现出如下问题:HTTP 无法注册 URLhttp://+:12345/HelloWcfService/.进程不具有此命名空间的访问权限(有关详细信息,请参见http://go.micro ...

  10. 外网访问SVN

    1.路由端口映射: 进入路由器管理管理界面-->转发规则-->虚拟服务器 将端口3690(svn默认端口)和你的局域网IP(如192.168.1.104)映射,勾上“启动”,保存,OK了. ...