一个小小购物车案例

        改项目用到cookie技术和session技术的综合运用,以及分别用cookie和session达到不同的功能,模拟一个简单的购物车,登录、浏览商品、以及购买的过程。一下是案例:


用cookie编写的代码:
BookList.java
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
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 com.dao.BookDao;
import com.domain.Book;
public class BookList extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //1.显示所有书名
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter pw = response.getWriter();
  BookDao book = new BookDao();
  pw.print("<h1>本网站的商品有:</h1>");
  List<Book> list = book.getAll();
  for(Book book1:list){
   pw.print("<a href='BookBack?id="+book1.getId()+"'target='_blank'>"+book1.getName()+"</a><br>");
  }
  //2.显示浏览过的书名
  pw.write("<h1>您最近浏览过的商品有:</h1>");
  Cookie[] cookie = request.getCookies();
  for(int i=0; cookie!=null && i<cookie.length;i++){
   if(cookie[i].getName().equals("bookshop")){
    String[] id = cookie[i].getValue().split("_");
    for(String str:id){
     Book books = book.getBook(str);
     pw.print(books.getName()+"<br/>");
    }
    
   }
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
 
Bookback.java
package com.cookie;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.LinkedList;
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 com.dao.BookDao;
import com.domain.Book;
public class BookBack extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //显示书的详细信息,根据id获取
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter pw = response.getWriter();
  String id = request.getParameter("id");
  BookDao bd = new BookDao();
  Book book2 = bd.getBook(id);
  pw.print("书号:"+book2.getId()+"<br>");
  pw.print("书名:"+book2.getName()+"<br>");
  pw.print("作者:"+book2.getAuthor()+"<br>");
  pw.print("描述:"+book2.getDescribe()+"<br>");
  //将书号写入cookie,有三种情况
  //bookhistory=2,3,1  1   1,2,3 (已存在,删除后面的加前面)
  //bookhistory=2,3,5   1  1,2,3 (三个删后面)
  //bookhistory=2,3     1  1,2,3(两个直接添加)
  String cookieValue = BuildCookieValue(id,request);
  Cookie cookie = new Cookie("bookshop",cookieValue);
  cookie.setMaxAge(30*24*3600);
  cookie.setPath("/BookShop");
  response.addCookie(cookie);
  
 }
 private String BuildCookieValue(String id, HttpServletRequest request) {
  String bookshop = null;
  Cookie[] cookies = request.getCookies();
  for(int i=0;cookies!=null&&i<cookies.length;i++){
   if(cookies[i].getName().equals("bookshop")){
    bookshop = cookies[i].getValue();
   }
  }
  if(bookshop==null){
   return id;
  }
  LinkedList<String> list = new LinkedList<String>(Arrays.asList(bookshop.split("_")));
  if(list.contains(id)){
   list.remove(id);
   list.addFirst(id);
  }
  else if(list.size()>=3){
   list.removeLast();
   list.addFirst(id);
  }
  else{
   list.addFirst(id);
  }
  StringBuffer sb = new StringBuffer();
  for(String ids:list){
   sb.append(ids+"_");
  }
  return sb.deleteCharAt(sb.length()-1).toString();
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
BookDao.java
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.domain.Book;
import com.util.DBManager;
public class BookDao {
 
 private Connection con = null;
 private PreparedStatement ps = null;
 private ResultSet rs = null;
 //查询所有书的方法
 public List<Book> getAll(){
  List<Book> list = new ArrayList<Book>();
  String sql = "select * from book";
  con = DBManager.getConnection();
  try {
   ps = con.prepareStatement(sql);
   rs = ps.executeQuery();
   while(rs.next()){
    Book book = new Book();
    book.setId(rs.getString("id"));
    book.setName(rs.getString("name")); 
    book.setAuthor(rs.getString("author")); 
    book.setDescribe(rs.getString("describe")); 
    list.add(book);
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   DBManager.closeDB(con, ps, rs);
  }  
  return list; 
 }
 //按id获取书
 public Book getBook(String id){
  Book book = null;
  con = DBManager.getConnection();
  String sql = "select * from book where id=?";
  try {
   ps = con.prepareStatement(sql);
   ps.setString(1, id);
   rs = ps.executeQuery();
   if(rs.next()){
    book = new Book();
    book.setId(rs.getString("id"));
    book.setName(rs.getString("name")); 
    book.setAuthor(rs.getString("author")); 
    book.setDescribe(rs.getString("describe")); 
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   DBManager.closeDB(con, ps, rs);
  }
  return book;
  
 }
}
 
UserDao.java
package com.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.domain.User;
import com.util.DBManager;
public class UserDao {
 
 public User login(String username,String password){
  User user = null;
  Connection con = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  String sql = "select username,password from user where username=? and password=?";
  try {
   con = DBManager.getConnection();
   ps = con.prepareStatement(sql);
   ps.setString(1,username);
   ps.setString(2,password);
   rs = ps.executeQuery();
   while(rs.next()){
    user = new User();
    user.setUsername(rs.getString("username"));
    user.setPassword(rs.getString("password"));
   }
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return user;  
 }
}
Book.java
package com.domain;
public class Book {
 private String id;
 private String name;
 private String author;
 private String describe;
 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;
 }
 public String getAuthor() {
  return author;
 }
 public void setAuthor(String author) {
  this.author = author;
 }
 public String getDescribe() {
  return describe;
 }
 public void setDescribe(String describe) {
  this.describe = describe;
 }
 
}
User.java
package com.domain;
public class User {
 
 private String username;
 private String password;
 
 public User() {
 }
 
 public User(String username, String password) {
  super();
  this.username = username;
  this.password = password;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
}
DBManager.java
package com.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBManager {
 /**
  * @param args
  */
 static String driver;
 static String url;
 static String username;
 static String password;
 static {
  InputStream in = DBManager.class.getClassLoader().getResourceAsStream(
    "db.properties");
  Properties pro = new Properties();
  try {
   pro.load(in);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  driver = pro.getProperty("driver");
  url = pro.getProperty("url");
  username = pro.getProperty("username");
  password = pro.getProperty("password");
  try {
   Class.forName(driver);
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public static Connection getConnection() {
  Connection con = null;
  try {
   con = DriverManager.getConnection(url, username, password);
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return con;
 }
 public static void closeDB(Connection con, Statement st, ResultSet rs) {
  if (rs != null) {
   try {
    rs.close();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  if (st != null) {
   try {
    st.close();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  if (con != null) {
   try {
    con.close();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
 public static void main(String[] args) {
  getConnection();
 }
}
package com.session;
import java.io.IOException;
import java.io.PrintWriter;
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;
import com.dao.BookDao;
import com.domain.Book;
import com.domain.User;
public class BookCartList extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter pw = response.getWriter();
  HttpSession hs = request.getSession();
  User user = (User) hs.getAttribute("user");
  //这里必须有if判断语句,否则注销的时候会提示你空指针错误
  if(user != null){   
   pw.print("<h1>欢迎您:"+user.getUsername()+"</h1>");
  }
  //注销登录链接
  pw.print("<a href='/BookShop/login.html'>登录</a>"+"   ");
  pw.print("<a href='/BookShop/Logout'>注销</a><br><br>");
  pw.write("<h2>本商店有以下商品:</h2>");
  BookDao bd = new BookDao();
  List<Book> list = bd.getAll();
  for(Book book:list){
   String url = " /BookShop/BuyBook?id="+book.getId();
   pw.print(book.getName()+"   "+"<a href='"+url+"'>购买</a><br>");
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
package com.session;
import java.io.IOException;
import java.io.PrintWriter;
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;
import com.dao.BookDao;
import com.domain.Book;
public class BuyBook extends HttpServlet {
 @SuppressWarnings("unchecked")
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  String id = request.getParameter("id");  
  BookDao bd = new BookDao();
  Book book = bd.getBook(id);
  HttpSession hs = request.getSession();
  Cookie cookie = new Cookie("JSESSIONID",hs.getId());
  cookie.setMaxAge(30*60);
  cookie.setPath("/BookShop");
  response.addCookie(cookie);
  List<Book> list = (List<Book>) hs.getAttribute("cart");
  if(list == null){
   list = new ArrayList<Book>();
   hs.setAttribute("cart",list);
  }
  list.add(book);
  String url = "/BookShop/ShowBook";
  response.sendRedirect(url);
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
package com.session;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckCode extends HttpServlet {
 private static final int WIDTH = 130;
 private static final int HEIGHT = 30;
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // 1.创建图片
  BufferedImage image = new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_INT_RGB);
  // 2.得到图片
  Graphics g = image.getGraphics();
  // 3 对图片进行绘制
  // a.设置图片的背景色
  setBackGround(g);
  // c.添加干扰线
  setRandomLine(g);
  // g.向图形中写数据
  String checkcode = setRandomNum(g);
  request.getSession().setAttribute("imgcode", checkcode);
  // 4.把图片写给浏览器
  response.setContentType("image/jpeg");
  // 告诉浏览器不要缓存
  response.setHeader("Pragma", "no-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setIntHeader("Expires", -1);
  ImageIO.write(image, "JPEG", response.getOutputStream());
 }
 private String setRandomNum(Graphics g) {
  g.setFont(new Font("宋体", Font.BOLD, 25));
  Random random = new Random();
  StringBuffer sb = new StringBuffer();
  int x = 10;
  for (int i = 0; i < 4; i++) {
   // 产生随机数
   String str = String.valueOf(random.nextInt(10));
   sb.append(str);
   g.setColor(new Color(random.nextInt(255), random.nextInt(255),
     random.nextInt(255)));
   int degree = random.nextInt() % 30;
   ((Graphics2D) g).rotate(degree * Math.PI / 180, x, 20);
   g.drawString(str, x, 20);
   ((Graphics2D) g).rotate(-degree * Math.PI / 180, x, 20);
   x += 30;
  }
  return sb.toString();
 }
 private void setRandomLine(Graphics g) {
  g.setColor(Color.green);
  Random random = new Random();
  for (int i = 0; i < 5; i++) {
   int x1 = random.nextInt(WIDTH);
   int y1 = random.nextInt(HEIGHT);
   int x2 = random.nextInt(WIDTH);
   int y2 = random.nextInt(HEIGHT);
   g.drawLine(x1, y1, x2, y2);
  }
 }
 private void setBackGround(Graphics g) {
  g.setColor(Color.WHITE);
  g.fillRect(0, 0, WIDTH, HEIGHT);
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
package com.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.UserDao;
import com.domain.User;
public class Login extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter pw = response.getWriter();
  String username = request.getParameter("username");
  String password = request.getParameter("password");
  String checkcode = request.getParameter("checkcode");
  String imgcode = (String) request.getSession().getAttribute("imgcode");
  // 验证码判断
  if (checkcode != null && imgcode != null && checkcode.equals(imgcode)) {
   UserDao ud = new UserDao();
   User user = ud.login(username, password);
   if (user != null) {
    request.getSession().setAttribute("user", user);
    response.sendRedirect("/BookShop/BookCartList");
   }
   pw.print("用户名或密码错误!!!");
  } else {
   pw.print("验证码错误!!!");
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
package com.session;
import java.io.IOException;
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 Logout extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  HttpSession hs = request.getSession(false);//有session就获取没有也不创建
  if(hs==null){
   response.sendRedirect("/BookShop/BookCartList");
   return;
  }
  hs.removeAttribute("user");
  //此方法是使session失效hs.invalidate();
  response.sendRedirect("/BookShop/BookCartList");
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}
package com.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.domain.Book;
public class ShowBook extends HttpServlet {
 @SuppressWarnings("unchecked")
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter pw = response.getWriter();
  List<Book> list = (List<Book>) request.getSession().getAttribute("cart");
  pw.print("<h1>你购买的商品有:</h1>");
  for(Book book:list){
   pw.print(book.getName()+"<br>");
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
}


 

posted @ 2012-11-05 15:01  yangkai_keven  阅读(225)  评论(0编辑  收藏  举报