JavaEE实验7.docx
《JavaEE实验7.docx》由会员分享,可在线阅读,更多相关《JavaEE实验7.docx(14页珍藏版)》请在冰豆网上搜索。
JavaEE实验7
实验七图书在线销售系统
(一)
一、实验目的
掌握Spring框架的基本使用方法,能够完成Java对象及对象之间的依赖注入定义,实现对象与对象间控制反转。
掌握使用Spring将Struts、Spring、Hibernate三个框架在WEB应用中的集成。
掌握图书在线销售系统主要功能模块的实现思路与方法。
二、实验内容
1、实现首页中的新书列表功能。
2、实现将图书添加到购物车功能。
3、实现购物车中图书名称、价格、数量,总价的显示功能。
三、实验方法和步骤
1、准备:
安装Mysql数据库服务器。
2、执行bookstore.sql.txt中的SQL命令,创建项目包括的数据表。
--
--数据库:
`bookstore`
--
createdatabasebookstore;
usebookstore;
----------------------------------------------------------
--
--表的结构`book`
--
CREATETABLE`book`(
`bookid`int(11)NOTNULLauto_increment,
`catalogid`int(11)defaultNULL,
`bookname`varchar(20)NOTNULL,
`price`int(11)NOTNULL,
`picture`varchar(30)NOTNULL,
`recommend`int(11)NOTNULL,
PRIMARYKEY(`bookid`),
KEY`FK_Relationship_3`(`catalogid`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8AUTO_INCREMENT=15;
--
--导出表中的数据`book`
--
INSERTINTO`book`(`bookid`,`catalogid`,`bookname`,`price`,`picture`,`recommend`)VALUES
(1,1,'书1',11,'a19.jpg',0),
(2,2,'书2',22,'a15.jpg',1),
(3,2,'书3',33,'a15.jpg',1),
(5,2,'书5',55,'a15.jpg',1),
(6,2,'书6',66,'a15.jpg',1),
(7,2,'书7',77,'a15.jpg',1),
(8,2,'书8',88,'a15.jpg',1),
(9,2,'书9',99,'a15.jpg',1),
(10,2,'书10',10,'a15.jpg',1),
(11,2,'书11',11,'a15.jpg',1),
(12,2,'书12',12,'a15.jpg',1),
(13,2,'书13',13,'a15.jpg',1),
(14,2,'书14',14,'a15.jpg',1);
----------------------------------------------------------
--
--表的结构`catalog`
--
CREATETABLE`catalog`(
`catalogid`int(11)NOTNULLauto_increment,
`catalogname`varchar(20)NOTNULL,
PRIMARYKEY(`catalogid`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8AUTO_INCREMENT=3;
--
--导出表中的数据`catalog`
--
INSERTINTO`catalog`(`catalogid`,`catalogname`)VALUES(1,'类别1'),(2,'类别2');
----------------------------------------------------------
--
--表的结构`orderitem`
--
CREATETABLE`orderitem`(
`orderitemid`int(11)NOTNULLauto_increment,
`orderid`int(11)defaultNULL,
`bookid`int(11)defaultNULL,
`quantity`int(11)NOTNULL,
PRIMARYKEY(`orderitemid`),
KEY`FK_Relationship_2`(`orderid`),
KEY`FK_Relationship_4`(`bookid`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8AUTO_INCREMENT=1;
--
--导出表中的数据`orderitem`
--
----------------------------------------------------------
--
--表的结构`orders`
--
CREATETABLE`orders`(
`orderid`int(11)NOTNULLauto_increment,
`userid`int(11)defaultNULL,
`orderdate`timestampNOTNULLdefaultCURRENT_TIMESTAMPonupdateCURRENT_TIMESTAMP,
PRIMARYKEY(`orderid`),
KEY`FK_Relationship_1`(`userid`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8AUTO_INCREMENT=1;
--
--导出表中的数据`orders`
--
----------------------------------------------------------
--
--表的结构`user`
--
CREATETABLE`user`(
`userid`int(11)NOTNULLauto_increment,
`username`varchar(20)NOTNULL,
`password`varchar(20)NOTNULL,
`sex`varchar(4)defaultNULL,
`age`int(11)defaultNULL,
PRIMARYKEY(`userid`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8AUTO_INCREMENT=2;
--
--导出表中的数据`user`
--
INSERTINTO`user`(`userid`,`username`,`password`,`sex`,`age`)VALUES
(1,'admin','admin',NULL,NULL)
3、编写功能代码
第一步:
实现数据层的对象关系映射。
(1)编写可保存图书信息的可持久化对象:
org/apex/bookstore/vo/Book.java
packageorg.apex.bookstore.vo;
importjava.util.HashSet;
importjava.util.Set;
/**
*Bookentity.
*
*@authorMyEclipsePersistenceTools
*/
publicclassBookimplementsjava.io.Serializable{
//Fields
privateIntegerbookid;
privateCatalogcatalog;
privateStringbookname;
privateIntegerprice;
privateStringpicture;
//Constructors
/**defaultconstructor*/
publicBook(){
}
/**minimalconstructor*/
publicBook(Stringbookname,Integerprice,Stringpicture){
this.bookname=bookname;
this.price=price;
this.picture=picture;
}
/**fullconstructor*/
publicBook(Catalogcatalog,Stringbookname,Integerprice,
Stringpicture){
this.catalog=catalog;
this.bookname=bookname;
this.price=price;
this.picture=picture;
}
//Propertyaccessors
publicIntegergetBookid(){
returnthis.bookid;
}
publicvoidsetBookid(Integerbookid){
this.bookid=bookid;
}
publicCataloggetCatalog(){
returnthis.catalog;
}
publicvoidsetCatalog(Catalogcatalog){
this.catalog=catalog;
}
publicStringgetBookname(){
returnthis.bookname;
}
publicvoidsetBookname(Stringbookname){
this.bookname=bookname;
}
publicIntegergetPrice(){
returnthis.price;
}
publicvoidsetPrice(Integerprice){
this.price=price;
}
publicStringgetPicture(){
returnthis.picture;
}
publicvoidsetPicture(Stringpicture){
this.picture=picture;
}
}
(2)编写Hibernate映射文件以实现ORM:
org/apex/bookstore/vo/Book.hbm.xml
xmlversion="1.0"encoding="utf-8"?
>
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN"
"
--
MappingfileautogeneratedbyMyEclipsePersistenceTools
-->
(3)在Spring配置文件applicationContext.xml中的sessionFactoryBean配置中合适的位置添加映射文件声明:
org/apex/bookstore/vo/Book.hbm.xml
第二步:
实现DAO、Service、Action三层处理代码。
(1)在org/apex/bookstore/dao/impl/BookDAO.java中实现以下方法:
publicListgetNewBook(){
Sessionsession=getSession();
Queryquery=session.createQuery("fromBookb");
query.setFirstResult(0);
query.setMaxResults(5);
Listbooks=query.list();
session.close();
returnbooks;
}
(2)在org/apex/bookstore/action/BookAction.java中实现以下方法:
publicStringnewBook()throwsException{
Listbooks=bookService.getNewBook();
Maprequest=(Map)ActionContext.getContext().get("request");
request.put("books",books);
returnSUCCESS;
}
第三步:
通过applictionContext.xml完成Bean配置。
(1)配置struts.xml,添加对newBookAction的请求处理:
/newBook_succcess.jsp
(2)修改applictionContext.xml内容,实现依赖注入以及ActionBean配置。
a)声明bookDAOBean,该Bean从已声明的baseDAO派生:
class="org.apex.bookstore.dao.impl.BookDAO"parent="baseDAO">
b)声明bookServiceBean并注入BookDAO。
c)修改bookActionBean配置,注入bookService依赖:
第四步:
实现视图。
(1)将视图newBook_succcess.jsp文件修改为以下内容:
<%@pagecontentType="text/html;charset=gb2312"%>
<%@taglibprefix="s"uri="/struts-tags"%>
新书展示
iteratorvalue="#request['books']"id="book">
propertyvalue="#book.picture"/>"/>
propertyvalue="#book.bookname"/>
价格:
propertyvalue="#book.price"/>元
数量:
propertyvalue="#book.bookid"/>"name="bookid">