一个小小购物车案例
来源:互联网 发布:如何查看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); }}
- 一个小小购物车案例
- 一个小小的购物车系统
- 一个小小的案例
- 小小购物车
- 一个小小的感染案例
- 第五章:利用计算属性写一个购物车案例
- 经典案例: 购物车
- 购物车案例_02
- servlet+jsp实现小小购物车功能
- 昨天老师讲了一个购物案例
- 简单购物车应用案例
- (angularjs )购物车案例
- 添加购物车小案例
- 购物车的实现案例
- 一个购物车代码
- Session案例之实现购物网址购物车
- 购物车案例--张国亮--总结心得
- Sesion 典型案例---(1)购物车
- timeval 与timespec
- 索引的优点和缺点,设计数据库的人员必看
- 四种流行的AJAX框架jQuery,Mootools,Dojo,ExtJS的对比
- Android里PathEffect的使用
- SQL点滴文章总结
- 一个小小购物车案例
- 计算机3D图形简述
- IOS block dispatch_queue
- 我的web后台开发技术层次图和经验感受
- 如何编译运行系统自带桌面Launcher2源码
- HttpServletRequest
- 玩玩小爬虫——入门
- IT蚁族:蜗居和逃离
- 玩玩小爬虫——试搭小架构