一个小小购物车案例

来源:互联网 发布:如何查看udp端口 编辑:程序博客网 时间:2024/05/01 10:20

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


用cookie编写的代码:BookList.javapackage 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.javapackage 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.javapackage 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.javapackage 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.javapackage 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.javapackage 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.javapackage 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); }}


 

原创粉丝点击