购物车案例--张国亮--总结心得

来源:互联网 发布:淘宝搜索 排除关键字 编辑:程序博客网 时间:2024/05/16 08:35

改项目用到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>"+"&nbsp;&nbsp;&nbsp;");
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()+"&nbsp;&nbsp;&nbsp;"+"<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);
}

}

原创粉丝点击