JavaWeb Session学习——模拟购物车(教材学习笔记) - Go语言中文社区

JavaWeb Session学习——模拟购物车(教材学习笔记)


Cookie技术可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享,但是如果传递的信息较多,使用Cookie技术就会增大服务器端程序的处理难度,这个时候我们就可以使用Session技术,

但是需要注意的是,Session技术同样需要Cookie技术来为其传递ID属性,下面通过一个模拟实现购物车的程序熟悉一下Session技术,

一、创建书本类Book

创建web-chapter05的web项目,并在其中创建cn.itcast.chapter05.session的包,并在包中创建一个Book类

package cn.itcast.chapter05.session;

import java.io.Serializable;

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) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

}

其中Book类之所以需要继承自Serializable,是因为Serializable表示此类是一个可序列化的类,

二、创建模拟数据库类BookDB

package cn.itcast.chapter05.session;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class BookDB {
private static Map<String,Book> books =  new LinkedHashMap<String,Book>();
    static {
    	books.put("1", new Book("1", "javaweb开发"));
    	books.put("2", new Book("2", "java数据库连接"));
    	books.put("3", new Book("3", "java基础入门"));
    	books.put("4", new Book("4", "MySQL入门"));
    	books.put("5", new Book("5", "spring开发"));
    }
    //获得所有图书的方法
    public static Collection<Book> getAll(){
    	return books.values();
    }
    //根据指定学号查询指定图书
    public static Book getBook(String id) {
    	return books.get(id);
    }
	
}

代码中使用到了Map的相关知识,可以自行百度

三、创建一个名为ListBookServlet的servlet类

用于显示所有可购买图书的列表,通过单击购买链接,便可将指定的图书添加到购物车中,

package cn.itcast.chapter05.session;

import java.io.*;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.http.*;

public class ListBookServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	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("本站提供的图书有以下:<br />");
		for(Book book : books) {
			String url = "/chapter05/PurchaseServlet?id="+book.getId();
			out.write(book.getName()+"<a href='"+url+"'>点击购买</a><br />");
		}
		
	}

}

其中的PurchaseServlet还没有创建,接下来就是创建这个

四、创建PurchaseServlet类

该类用来将用户购买的图书信息保存到Session对象中,并在用户购买完图书后将页面重定向到已经购买的图书列表

该类中使用ArrayList集合模拟一个购物车,然后将购买的所有图书添加到购物车中,

package cn.itcast.chapter05.session;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.*;

public class PurchaseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");//获得用户购买的商品的id
		if(id==null) {
			//如果没有购买任何图书,则重定向到所有图书的界面,也就是ListBookServlet
			String url = "/chapter05/ListBookServlet";
			response.sendRedirect(url);
			return;
		}
		Book book = BookDB.getBook(id);
		//获取或创建用户的Session对象
		HttpSession session = request.getSession();
		//从session对象中获得用户的购物车
		List<Book> cart = (List<Book>) session.getAttribute("cart");
		if(cart==null) {
			//若为首次购买则为用户创建一个购物车
			cart = new ArrayList<Book>();
			session.setAttribute("cart", cart);
		}
		//将商品放入购物车
		cart.add(book);
		//创建Cookie存放session的标记号
		Cookie cookie = new Cookie("JSESSIONID", session.getId());
		cookie.setMaxAge(60*30);//设置保存时间,此时设置为30分钟
		cookie.setPath("/chapter05");
		response.addCookie(cookie);
		//重定向到购物车页面
		String url = "/chapter05/CartServlet";
		response.sendRedirect(url);
	}

}

五、创建CartServlet类

主要用于展示用户已经购买的图书列表

package cn.itcast.chapter05.session;

import java.io.*;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.*;

public class CartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	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;
		//变量pruFlag标记是否购买过商品
		boolean pruFlag = true;
		//获得用户的Session
		HttpSession session = request.getSession(false);
		//如果session为null,则将pruFlag设置为false
		if(session==null) {
			pruFlag = false;
		}else {
			//获得用户购物车
			cart = (List<Book>) session.getAttribute("cart");
			//如果购物车为null,pruFlag设置为false
			if(cart==null) {
				pruFlag = false;
			}
		}
		
		if(pruFlag==false) {
			out.write("对不起!你还没有购买任何商品!<br />");
		}else {
			//否则显示用户购买的信息
			double price=0;
			for(Book book : cart) {
				out.write(book.getName()+"<br />");
			}
		}
	}

}

六、在web.xml中配置相关参数

<servlet>
    <description></description>
    <display-name>ListBookServlet</display-name>
    <servlet-name>ListBookServlet</servlet-name>
    <servlet-class>cn.itcast.chapter05.session.ListBookServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ListBookServlet</servlet-name>
    <url-pattern>/ListBookServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>PurchaseServlet</display-name>
    <servlet-name>PurchaseServlet</servlet-name>
    <servlet-class>cn.itcast.chapter05.session.PurchaseServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>PurchaseServlet</servlet-name>
    <url-pattern>/PurchaseServlet</url-pattern>
  </servlet-mapping>
  <servlet>
    <description></description>
    <display-name>CartServlet</display-name>
    <servlet-name>CartServlet</servlet-name>
    <servlet-class>cn.itcast.chapter05.session.CartServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>CartServlet</servlet-name>
    <url-pattern>/CartServlet</url-pattern>
  </servlet-mapping>

然后启动tomcat

七、在浏览器中查看

在网址栏输入http://localhost:8080/web-chapter05/ListBookServlet会进入以下界面

然后点击几个购买链接之后的界面如下:

至此,使用session模拟购物车的程序就完成了

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40788630/article/details/84324306
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 13:51:49
  • 阅读 ( 1405 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢