1.创建封装图书信息类:
用于封装图书的信息,其中定义了id和name属性,分别表示书的编号和名称。
mport java.io.Serializable;
public class Book implements Serializable {
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 serId(String id) {
this.id=id;
}
public String getName() {
return name ;
}
public void setName(String name) {
this.name=name;
}
}
2.创建数据库模拟类:
用于模拟保存所有图书的数据库。
通过Map集合存储了5个不同的Book对象,提供了获取指定图书和所有图书的相关方法。
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","javaweb工程"));
books.put("3",new Book("3","javaweb教程"));
books.put("4",new Book("4","javaweb任务"));
books.put("5",new Book("5","javaweb实践"));
}
//获取所有的图书
public static Collection <Book>getAll(){
return books.values();
}
//根据指定的id获得图书
public static Book getBook(String id) {
return books.get(id);
}
}
3.创建Servlet
(1)创建一个ListBookServlet类,用于显示所有可购买图书的列表
通过单击“购买”连接,可将指定的图书添加到购物车中。
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ListBookServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter() ;
Collection<Book> books=BookDB.getAll();
out.write(("本站提供的图书有<br />"));
for(Book book:books) {
String url="/RefreshServlet/PurchaseServlet?id="+book.getID();
resp.getWriter().println(book.getName()+"<a href='"+url+"'>点击购买</a><br />");
}
}
}
(2)创建一个PurchaseServlet类:
主要将用户购买的图书信息保存到session对象中;另一个是在用户购买图书结束后,将页面重定向到用户已经购买的图书列表。通过ArrayList集合模拟一个购物车,然后将购买的所有图书添加到购物车中,最后通过Session对象传递给CartServlet,由CartServlet展示用户已经购买的图书。
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
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;
public class PurchaseServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获得用户购买的商品
String id=req.getParameter("id");
if((id==null)) {
//如果id为null,重定向到listbookservlet页面
String url="/RefreshServlet/ListBookServlet";
resp.sendRedirect(url);
return;
}
Book book= BookDB.getBook(id);
//创建或者获得用户的session对象
HttpSession session=req.getSession();
//从session对象中获得用户的购物车
List<Book> cart=(List)session.getAttribute("cart");
if(cart==null) {
//首次购买。为用户为创建一个购物车(list集合模拟购物车)
cart=new ArrayList<Book>();
//将购物车存入session对象
session.setAttribute("cart", cart);
}
//将商品放入购物车
cart.add(book);
//创建Cookie存放Session的标识号
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(10);
cookie.setPath("/RefreshServlet");
resp.addCookie(cookie);
//重定向到购物车页面
String url="/RefreshServlet/CartServlet";
resp.sendRedirect(url);
}
}
(3)创建一个CartServlet类,主要用于展示用户已经购买的图书列表。
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class CartServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//变量cart引用用户的购物车
List<Book>cart=null;
//变量purflag标记用户是否买过商品
boolean purflag=true;
//获得用户的session
HttpSession session=req.getSession(false);
//如果session为null,purflag置为false
if(session==null) {
purflag=false;
}else {
//获得用户购物车
cart=(List<Book>) session.getAttribute("cart");
//如果用的购物车null,purflag置为false;
if(cart==null) {
purflag=false;
}
}
/*
* 如果purflag为false,表示用户没有购买图书,重定向到listbookservlet
*/
if(!purflag) {
resp.getWriter().println("对不起!您还没买任何商品!");
}else {
resp.getWriter().println("你购买的图书有:<br/>");
for(Book book:cart) {
resp.getWriter().print(book.getName()+"<br/>");
}
}
}
}
4.web.xml配置
<servlet>
<servlet-name>PurchaseServlet</servlet-name>
<servlet-class> PurchaseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PurchaseServlet</servlet-name>
<url-pattern>/PurchaseServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>ListBookServlet</servlet-name>
<servlet-class> ListBookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ListBookServlet</servlet-name>
<url-pattern>/ListBookServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>CartServlet</servlet-name>
<servlet-class> CartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CartServlet</servlet-name>
<url-pattern>/CartServlet</url-pattern>
</servlet-mapping>