简易购物车---获取图书信息

来源:互联网 发布:餐饮软件破解版 编辑:程序博客网 时间:2024/06/07 00:10

搭好了 框架之后,现在就按照MVC模式去完成任务!今天实现的是获取 所有图书和单个图书的信息及Cookie的应用!
1.先建立JavaBean.
package com.myshopping.form;
public class Book {
 private String id;
 private String name;
 private String title;
 private float price;
 private int yr;
 private String description;
 private int saleAmount;
 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 getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public float getPrice() {
  return price;
 }
 public void setPrice(float price) {
  this.price = price;
 }
 public int getYr() {
  return yr;
 }
 public void setYr(int yr) {
  this.yr = yr;
 }
 public String getDescription() {
  return description;
 }
 public void setDescription(String description) {
  this.description = description;
 }
 public int getSaleAmount() {
  return saleAmount;
 }
 public void setSaleAmount(int saleAmount) {
  this.saleAmount = saleAmount;
 }
 
}
2.在DAO里与数据库建立连接.
package com.myshopping.dao;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.myshopping.db.DBHelper;
import com.myshopping.form.Book;
import com.myshopping.util.MyBookConstants;
public class BookDAO {
 //查询单个图书的信息
 public Book selectByBookId(String bookId){
  Book book = null;
  Connection conn = DBHelper.getonnection();
  
  String sql = "SELECT id,name,title,price,yr,description,saleAmount FROM books WHERE id = ? ";
  
  Object[] params = new Object[]{bookId};
  
  QueryRunner queryRunner = new QueryRunner();
  
  try {
   book = (Book) queryRunner.query(conn, sql, params, new BeanHandler(Book.class));
  } catch (SQLException e) {
   e.printStackTrace();
   throw new RuntimeException(MyBookConstants.SELECT_BOOK_BYBOOKID_EXCEPTION);
  }
  return book;
  
 }
 
 //获取所有图书的信息
 public List queryAllBooks(){
  List books = null;
  
  Connection conn = DBHelper.getonnection();
  
  String sql = "SELECT * FROM books";
  
  
  //创建dbutils中的 QueryRunner对象
  QueryRunner queryRunner = new QueryRunner();
  try {
   books =  (List)queryRunner.query(conn, sql, new BeanListHandler(Book.class) );
  } catch (SQLException e) {
   e.printStackTrace();
   throw new RuntimeException(MyBookConstants.QUERY_ALL_BOOKS_EXCETPION);
  }
  return books;
  
 }
}
3.业务层,调用DAO方法,建立业务 .
package com.myshopping.service;
import java.util.List;
import com.myshopping.dao.BookDAO;
import com.myshopping.form.Book;

public class BookService {
 //获取所有图书的信息
 public List getAllBooks(){
  List books = null;
  BookDAO bookDAO = new BookDAO();
  books = bookDAO.queryAllBooks();
  return books;
 }
 //查询单个图书的信息
 public Book getByBookId(String bookId){
  Book book = null;
  BookDAO bookDAO = new BookDAO();
  book = bookDAO.selectByBookId(bookId);
  return book;
 }
}
4.建立Servlet,使视图层与Model层建立连接 .
package com.myshopping.servlet;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.RequestDispatcher;
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.myshopping.form.Book;
import com.myshopping.service.BookService;
import com.myshopping.util.MyBookConstants;
import com.sun.org.apache.xerces.internal.util.URI;

public class BookDetailServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  String bookId = request.getParameter("bookId");
  BookService bookService = new BookService();
  Book book = bookService.getByBookId(bookId);
  
  if(book != null){
   addBookCookie(book.getTitle(),request,response);//将当前图书的信息以 Cookie 的形式写到客户端的浏览器的临时文件夹中
   String forwardPage = "/WEB-INF/jsp/bookdetail.jsp";
   request.setAttribute(MyBookConstants.BOOK_KEY, book);
   RequestDispatcher dispatcher = null;
   dispatcher = request.getRequestDispatcher(forwardPage);
   dispatcher.forward(request, response);
  }else{
   throw new RuntimeException(MyBookConstants.NOT_EXIST_BOOK_MESSAGE);
  }
 }
 //这段是Cookie的内容
 public void addBookCookie(String title, HttpServletRequest request, HttpServletResponse response){
  
  Cookie [] cookies = request.getCookies();
  
  int myBookCookieLength = 0;
  Cookie myBookFirstCookie = null;
  
  if(cookies != null){
   for(int i = 0;i<cookies.length;i++){
    Cookie ck = cookies[i];
    
    if(ck.getName().startsWith("myshopping_cookie_")){
     myBookCookieLength++;
     if(myBookCookieLength == 1){
      myBookFirstCookie = ck ;
      
     }
     if(myBookCookieLength == 3){
      myBookFirstCookie.setMaxAge(0);
      response.addCookie(myBookFirstCookie);
      myBookCookieLength = 0;
     }
    }
   }
   
  }
  
  Cookie  cookie = null;
  try {
   title = URLEncoder.encode(title,"UTF-8");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
   throw new RuntimeException(MyBookConstants.BOOK_TITLE_ADD_COOKIE_EXCEPTION);
  }
  cookie = new Cookie("myshopping_cookie_" + title,title);
  cookie.setMaxAge(60*60*24*31);
  response.addCookie(cookie);

 }

}
5.页面显示.
'bookDetail.jsp':
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'bookDetail.jsp' starting page</title>
  </head>
 
  <body>
   <center>
    <br><br>
     <table cellpadding="5" cellspacing="0">
      <tr>
       <td>书名: </td>
       <td>${requestScope.bookkey.title }</td>
      </tr>
      <tr>
       <td>作者:</td>
       <td>
        ${requestScope.bookkey.name }(${requestScope.bookkey.yr })
       </td>
      </tr>
      <tr>
       <td>价格:</td>
       <td>${requestScope.bookkey.price }</td>
      </tr>
      <tr>
       <td>销售数量:</td>
       <td>${requestScope.bookkey.saleAmount }</td>
      </tr>
      <tr>
       <td>评论:</td>
       <td>${requestScope.bookkey.description }</td>
      </tr>
     </table>
     <br><br>
     <a href="">加入购物车</a> &nbsp;&nbsp;
     <a href="${pageContext.request.contextPath }/index.jsp">继续购物</a>
    </center>
  </body>
</html>
'catalog.jsp'
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="myshopping" uri="/WEB-INF/tld/myBook.tld" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>My JSP 'catalog.jsp' starting page</title>
  </head>
 
  <body>
   <center>
       <br><br>
         请选择您要购买的书:
        <br><br>
     <table cellpadding="5" cellspacing="0">
       <c:forEach items="${requestScope.allbookskey}" var="book">
        <tr>
         <td>
          <a href="${pageContext.request.contextPath }/bookDetailServlet?bookId=${book.id }">${book.title}</a><br>
          ${book.name }
         </td>
      <td>${book.price}</td>
         <td><a href="">加入购物车</a></td>
        
        
        </tr>
       
       </c:forEach>
      
      </table>
     
      <myshopping:showCookieBook/>//自定义标签的应用
     </center>
  </body>
</html>
6.下面是为了避免在JSP页面使用JAVA 代码,而自己设计的自定义标签  :<myshopping:showCookieBook/>//自定义标签的应用
  Book.tld:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
    version="2.1">
   
  <description>myshopping 1.1 core library</description>
  <display-name>myshopping core</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>myshopping</short-name>
  <uri>http://www.itcast.cn/myshopping/tag/core</uri>
 
  <tag>
   <name>showCookieBook</name>
   <tag-class>com.myshopping.tag.ShowCookieBookTag</tag-class>
   <body-content>empty</body-content>
  </tag>
</taglib>
 这里是JAVA 标签类: 
 ShowCookieBookTag.java
package com.myshopping.tag;

import java.io.IOException;
import java.net.URLDecoder;


import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class ShowCookieBookTag extends SimpleTagSupport {


 public void doTag() throws JspException, IOException {
  //获取代表 JSP 页面的 PageContext
  PageContext pc = (PageContext) this.getJspContext();
  //获取 HttpServletRequest 对象和 JspWriter 对象
  HttpServletRequest request = (HttpServletRequest) pc.getRequest();
  
  JspWriter out = pc.getOut();
  //获取浏览器传过来的 Cookie 数组
  Cookie[] cookies = request.getCookies();
  
  StringBuffer cookieInfoStr = new StringBuffer("");
  
  if(cookies != null && cookies.length > 0){
   //对Cookie数组进行遍历
   for(int i = 0; i<cookies.length; i++ ){
    Cookie cookie = cookies[i];
    String name = cookie.getName();
    
    if(name != null && name.startsWith("myshopping_cookie_")){
     String value = cookie.getValue();
    
      value = URLDecoder.decode(value, "UTF-8");
      cookieInfoStr.append((value + "&nbsp;&nbsp;"));
     
    }
   }
   
  }
  //判断 StringBuffer 是否为空串, 若为空串, 则说明没有 Cookie 信息
  if(cookieInfoStr != null && !cookieInfoStr.toString().equals("")){
   out.println("<br><br><hr><br><br>");
   out.println("您浏览过的历史有: ");
   out.println(cookieInfoStr.toString());
  }
 }
}
最后页面显示的结果:
您浏览过的历史有: Java编程指南  Apache从入门到精通  Weblogic技术参考  
     通过这里我们可以看到MV设计模式给我们开发项目带来了方便!但是真的要学会应用还是需要不断的做项目提炼自己的!这两天我们才完成项目的一半,还有分页之类的功能还没有实现的!明天来实现这一功能.

 

原创粉丝点击