课程设计报告基于Struts的网上书店.docx
《课程设计报告基于Struts的网上书店.docx》由会员分享,可在线阅读,更多相关《课程设计报告基于Struts的网上书店.docx(71页珍藏版)》请在冰豆网上搜索。
![课程设计报告基于Struts的网上书店.docx](https://file1.bdocx.com/fileroot1/2022-11/29/15e2a34d-e9cf-48d2-babb-df7ee8d2894c/15e2a34d-e9cf-48d2-babb-df7ee8d2894c1.gif)
课程设计报告基于Struts的网上书店
课程设计报告-基于Struts的网上书店
Struts_BookStore
一、绪论
1.系统开发背景
●本项目作为《JAVAWEB开发技术》课程的实习项目提出,希望通过《网上书店》电子商务网站的设计开发,提高使用JSP开发J2EE架构的电子商务网站(B/S结构)的能力;了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧。
●21世纪初,随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。
个性化已逐渐成为当今Web应用的潮流。
2.网上书店系统现状
●网上书店在我国刚起步,但发展很快。
随着我国互联网的更加普及和网上书店的更趋成熟,会有越来越大的消费群体,市场潜力会得到充分发挥。
技术的进步对传统书店上网解决方案提出更严格的要求和挑战。
为了保护传统书店的投资,书店上网解决方案应切合传统书店实际的需求和发展的趋向,使投入回报和管理效益最大化,传统书店在实施上网方案的之前,必须对一系列问题进行科学的论证,如书店上网的需求分析、书店上网总体规划、网上书店系统的功能和实施方案、网上书店的传播与推广、运行网上书店系统的软件和硬件配置、网上书店的管理系统和管理方法等等。
3.主要工作
●本项目主要实现了两个大的基本功能:
即1:
用户的对图书的浏览、购买,2:
管理员对用户、图书、订单的管理两部分。
●用户分为注册于非注册用户,区别是能否对书籍进行购买。
●管理员可执行三种基本操作:
对用户的查看、冻结;对图书的上传、修改;对订单的查看、执行、删除操作。
二、系统需求分析
1.系统功能需求
⏹客户功能需求
客户分为注册用户和非注册用户,客户的功能需求如下:
✓通过的书名对库中的书籍进行查找,显示到客户端
✓查看图书的排行榜、推荐、新书上架等推荐内容
✓对用户的登陆、注册操作
✓登陆后可将书籍加入到购物车
✓查看购物车中现有书籍、对购物车中的书籍数量进行修改、清空购物车
✓跳转到收银台进行结账,录入自己的详细信息(地址、联系方式、邮编等必须信息)进行订单的提交,保存到账户信息中以便下次登录查看
⏹管理员功能需求
管理员是管理需求的应用人员,分配一个账号为此,可实现对前端信息的管理和后台信息的修改等,管理需求如下:
✓图书信息的维护:
增加、修改、删除操作
✓用户信息的管理:
对用户的信息的查看、冻结、删除等操作
✓订单管理:
查看当前订单的状态、对订单执行发货操作、删除订单等操作
2.开发平台
⏹集成开发环境:
Myeclipse7.5
✓简单而言,Myeclipse是Eclipse的一个插件,也是一款功能强大的J2EE集成开发环境,支持代码编写、配置、测试以及除错,而且6.0版本以后都不需要安装Eclipse了,7.0以后连服务器都不需配置安装了,它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML,Struts,JSF,CSS,Javascript,SQL,Hibernate。
⏹Web应用服务器:
Tomcat
✓Tomcat是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。
对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应对HTML页面的访问请求。
实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache独立的进程单独运行的。
⏹数据库服务器:
SqlServer2005
✓SQLServer2005是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企业级的数据管理。
SQLServer2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序。
此外SQLServer2005结合了分析、报表、集成和通知功能。
⏹框架:
Struts
✓Struts把servlet、jsp、自定义标签和信息资源管理整合到一个统一的框架中,这样方便了开发人员实现mvc模式,极大节省了时间,struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发。
⏹主要技术
✓Struts是实现MVC模式的通用框架。
它由四个主要部分组成,模型、视图、控制器和XML文件。
模型通常由JavaBean或EJB组件实现(本项目由JavaBean实现),负责处理业务逻辑;视图包括一组JSP文件,这些文件主要由JSP标签或客户化标签构成,它简化了JSP页面的编码工作;在Struts框架中控制器主要包括ActionServlet类和Action类,ActionServlet是Struts的核心部件,它接受用户的Http请求,根据配置信息将请求转发给适当的Action对象,Action类负责调用模型的方法,并帮助控制应用程序的流程;Struts包括Web.xml和Struts—config.xml两个配置文件,其中Web.xml是Web应用的发布描述文件,Struts—config.xml是与Struts相关的特殊信息配置的描述文件。
✓页面部分由Tiles框架动态包含组合而成,增加了页面的灵活性,提高了页面的复用性。
✓注册部分验证采用了两种验证方式:
javascript客户端验证和Validtor框架服务端验证,javascript验证被灵活的运用到客户端,可以起到对用户输入文本格式的验证,Validator框架可以起到服务器端的验证,为了防止一些人直接通过编写http请求发送到服务端,保证了数据的安全、准确性。
三、系统设计与实现
1.系统整体设计
下表中给出了StrutsBookStore的各个组件,根据此表可以宏观上了解各个组建的大体功能([]中为后缀格式):
用户表示层(View)
[.jsp]
控制处理层(Controller)
业务逻辑层(Model)
[.java]
ActionForm
[.java]
Action[.java]
1.Guest:
Index
BookCatalog
BookInfo.jsp
NewBooks.jsp(*)
Order
OrderDetail
Reg
ShopCart
CheckOut
SaleList
2.Management:
BookManagement
ModifyBook
OrderManagemement
ManageOrderInfo
UserManagement
UserInfo
CheckOutForm
LoginForm
RegForm
UploadBookForm
searchForm(*)
searchuserForm(*)
searchorderForm(*)
cartForm(*)
printForm(*)
catalogForm(*)
(*)为动态formBean
CheckOutAction
loginAction
logoutAction
ModifyBookAction
OrderManagementAction
PrintBookAction
RegAction
searchCatalogAction
seatchEngineAction
ShopCartAction
UploadBookAction
UserManagementAction
ChangeLanguageAction
Book
BookCatalog
Customer
FilUpLoad
Item
Order
Pager
ShopCart
User
Dbconn(interface)
DBconnimpforJDBC
过滤器(Filter):
SetCharacterEncodingFilter
资源文件(message-resources):
ApplicationResources.properties(默认-英文)
ApplicationResources_en.properties(英文)
ApplicationResources_zh.properties(中文)
✓Struts大体工作流程:
✓系统用例:
该用例说明了系统的参与者与所能观察到的系统功能的模型图,呈现了一些参与
者和一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。
✓View层主要是对信息的显示、收集的工作,其中没有逻辑处理代码。
分为两类Guest和Management,Guest是指前端用户可见部分,注册用户和游客均可浏览,Management部分仅是管理员账号可操作部分。
此部分为jsp页面,其中应用了tiles框架来动态组合页面,页面大体设计如下:
这是页面的总体框架设计情况,共划分了四个主区域:
header,left,main,footer
Header包含页面头的部信息,各页面基本相同。
其中left部分又包含三部分:
login,message(*),vote(*),
Main包含部分比较多,包含searchEngine,maincontent;
Maincontent又划分为两部分:
mainView,Rightpart(*).
Footer包含页脚部分。
这样划分页面可以做到页面的复用性,提高了页面的灵活性。
每个页面只需编写不同的小部分便可,减少了代码的重复、冗余。
✓控制器中的Form其实也是一种bean类,为Action服务,其中包含了相对应的Action中配置的页面的可收集内容,负责由ActionServlet将该页面请求中内容剥离放入Action配置的对应的Form中,然后作为参数传递给Action,所以Form中并没有实际的处理方法,只有一些对应页面的属性,和对应属性的getter/setter方法,如果有必要验证页面传来的参数是否合法可以重写validate()方法来实现对页面中属性的验证,验证不通过责由核心控制器返回到请求页面至客户端,由于本项目由Validator框架来实现的验证所以没有实现validate方法。
只有对应的getter/setter方法。
✓Action部分:
此部分为中间组件,只是起到了调用逻辑的功能,接受到ActionServlet传来的参数后调用相应的Bean完成相应的逻辑。
具体分类表如下:
Action
逻辑方法
CheckOutAction
接受到提交订单页面传来的请求,处理相应的逻辑,将客户的订单按提交得到的数据保存到库中并与对应的用户名关中。
loginAction
接受到客户登陆请求,并取出密码用户名,到库中校验,返回相应的操作(已注册予以登陆并取出相应的订单放入用户对象中、已注册但被冻结不予以登陆资格、未注册密码错误)
logoutAction
销毁当前客户对应的Session,返回到主面
ModifyBookAction
search:
接受到用户提交修改书籍请求,并取出相应的书籍id,从库中取出书籍信息,返回到页面中。
modify:
接受用户提交的书籍修改后的内容,将其更新到库中。
OrderManagementAction
提供了分页功能,分为三个方法:
初始化页面,上下翻页,按关键词检索订单,然后返回相应的信息(包含适合页面大小的、符合请求的内容)
PrintBookAction
该Action接受一个id参数,然后调用逻辑搜寻该id的书的详细信息,然后返回到BookInfo.jsp上。
RegAction
该页面提供用户注册,接受用户注册的所有信息,然后调用逻辑处理bean将信息存放到库中,完成注册返回到登陆页面
searchCatalogAction
该Action接受请求后,调用逻辑bean查询该图书分类的所有有关书籍信息,返回到页面上
seatchEngineAction
该Action接受搜索引擎传递过来的请求,然后调用逻辑bean,将参数作为关键字在库中查找相对应的符合结果,将所有的结果返回到页面上进行显示。
ShopCartAction
Buy:
接受客户传来的请求,该请求中包含客户要放入购物车的书籍的id,然后搜索购物车中是否有该书籍,有则将书籍的数目+1,没有则实例一个item,数量为1,放入车中。
Modify:
提供了修改书籍数量的操作,按对应的item的id重新对车中的书籍数量遍历修改
Clear:
将购物车清空,并将session中信息清空
Delete:
接受用户要删除的书籍id,然后从车中将书籍删除
UploadBookAction
进行书籍的上传,接受书籍的详细信息,包括图片等,然后将书籍存入库中,返回状态值到页面上。
UserManagementAction
该Action功能于OrderManagementAction功能有大致相似性,提供了初始化页面、上下翻页、查找用户、冻结/解冻用户等几个功能。
ChangeLanguageAction
进行页面的语言的转换支持中文-英文,
✓业务逻辑部分提供了一些实体类用来表示客观存在的事物,还包括一些业务逻辑处理类,具体解释如下表:
Model
相关介绍
Book
封装了实体书籍的详细信息,便于操作
BookCatalog
表示库中书籍的分类信息
Customer
客户在浏览网站时所持有的身份证明,包含客户的一些状态信息
FilUpLoad
实现了文件的上传,受UploadBookAction的调用
Item
代表书籍和购物车的一种关联
Order
表示用户的订单
Pager
提供分页支持,封装了当前页面的信息。
ShopCart
代表虚拟的购物车,其中包含所有的客户购买的item
User
封装注册后的用户信息,便于管理员存取操作
Dbconn(interface)
借口,定义了所有与数据库有关的操作
DBconnimpforJDBC
实现了,dbconn接口中的方法.
2.各功能的实现
a)搜索:
通过的书名对库中的书籍进行查找,显示到客户端
以下为搜索对应的Action代码:
publicclasssearchEngineActionextendsAction{
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
//取值方法有两种:
如下:
//DynaActionFormsearchForm=(DynaActionForm)form;
//Stringbookkey=(String)searchForm.get("bookkey");
Stringbookkey=(String)PropertyUtils.getSimpleProperty(form,"bookkey");
DBconndb=newDBconnimpforJDBC();
LinkedListbooks=db.SearchBookByName(bookkey);
request.setAttribute("books",books);
StringreturnString=request.getParameter("page");
request.setAttribute("nowbookcatalog",newBookCatalog(1,bookkey,"NO"));
if(returnString.startsWith("/searchCatalog.do")){
returnString=newString("BookCatalog");}
returnmapping.findForward(returnString);}
}
本Action主要是从页面请求中取出书籍的检索关键字,然后交给后台db.SearchBookByName(bookkey)方法来查找,该方法返回一个linkedlist类型,其中包含了根据关键字检索到数目所有结果.然后返回到提交请求的页面.
截图:
b)查看图书的排行榜、推荐、新书上架等推荐内容
此处只是各个页面中直接调用DBbean来查找一些满足条件(排行榜、推荐、新书上架等)的表数据,封装成书籍,然后打印到相对应的部分中,就不具体说明实现方法了。
截图(仅一例其他类似):
c)对用户的登陆、注册操作
用户的登陆部分:
(代码)
loginAction的execute方法:
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
LoginFormloginForm=(LoginForm)form;
HttpSessionsession;
Stringpassword=loginForm.getPassword();
Stringusername=loginForm.getUsername();
db=newDBconnimpforJDBC();
if(db.CheckManage(username,password)){
session=request.getSession();
Customercustomer=newCustomer();
customer.setName(username);
customer.setLimit
(1);
session.setAttribute("customer",customer);
returnmapping.findForward("Manager");
}elseif(db.CheckUser(username,password)!
=null){
session=request.getSession();
Customercustomer=db.CheckUser(username,password);
customer.setName(username);
if(customer.getState()==0){
PrintWriterwriter=response.getWriter();
writer.write("Sorry,youraccounthasbeenfrozen!
Youcanvisitthewebsiteonly.
returnIndex....
Changeanotherusernameloginagain.....");returnnull;
}
//将用户的库中订单信息从库中取到用户当前身份中!
customer=db.SearchOrder(customer);
session.setAttribute("customer",customer);
returnmapping.findForward(request.getParameter("page"));
}
//取出page来源,返回到登陆时所在页面
PrintWriterwriter=response.getWriter();
writer.write("Sorry!
Loginfailed!
Pleasecheckyourpasswordandusername.
returnIndex....
loginagain.....");returnnull;
jsp页面:
在这里是将客户登陆时传递过来的用户名、密码取出来调用Dbbean的方法来查找是否存在该用户,查找的时候先从管理员表里查找,然后再查找客户表,最后返回一个包含客户信息的Customer类事例,两表都不存在信息则返回一个简单的错误页面
登陆前截图:
登陆后截图:
用户的注册部分:
(代码)
publicActionForwardexecute(ActionMappingmapping,ActionFormform,
HttpServletRequestrequest,HttpServletResponseresponse)
throwsException{
Stringtarget=null;
DBconndb=newDBconnimpforJDBC();
RegFormregForm=(RegForm)form;
Customercustomer=newCustomer();
if(db.RegisterUser(regForm.getUsername(),regForm.getPassword(),regForm.getEmail(),regForm.getAddress()))
{
customer.setName(regForm.getUsername());
request.getSession().setAttribute("customer",customer);
target="/Index.jsp";
}else{
PrintWriterpt=response.getWriter();
pt.write("Sorry,failedtoregister,please:
"+
"
Registeragain!
"+
"Justwatchit!
");
}returnmapping.findForward(target);}
在这里将用户注册时填写的信息取出来传递给Dbb