javaee.docx
《javaee.docx》由会员分享,可在线阅读,更多相关《javaee.docx(48页珍藏版)》请在冰豆网上搜索。
javaee
2016年01月
1.系统概述:
3
1.1系统目标3
1.1.1SSH框架介绍3
1.2系统主要功能4
2.可行性分析5
2.1技术可行性5
2.2经济可行性5
2.3操作可行性5
3.系统分析6
3.1功能模块划分6
3.2复杂业务流程分析6
3.3关键业务说明8
4.代码设计9
4.1系统所需代码9
4.2代码详细设计14
5.数据库设计25
5.1数据库结构设计25
5.2数据表关系设计26
6.界面设计28
6.1输入界面设计28
6.2输出界面设计30
7.输出设计33
7.1系统输出内容设计33
8.心得体会37
参考文献38
1.系统概述:
1.1系统目标
针对现今网上购书逐渐白热,特别是针对各阶段的学生,青年,以及书籍爱好者,并作为一种先进的交易方式,网上购书已成为一大趋势,所以,为了满足广大读书者的购书需求,一是节约了大量的时间,二是网上购书的操作简便,服务也不错,我们开发了网上书店系统。
通过分析网上书店的功能需求,理解javaEE各主流框架的作用和集成原理,综合他们各自的优势,开发一个有实际功能的网上书店。
通过对网上书店系统的架构和设计,利用注册登录注销等模块对网上书店系统进行开发。
在软件开发项目中,信息管理的影子随处可见,但要真正使技术人员的积极性都发挥出来,并不是“影子”所能完成的。
正所谓“知易行难”,信息管理并不仅仅是管理信息这么简单。
它有一套完备的目标体系;它需要科学的方法,需要一种对时间进度、任务分解、绩效控制的把握和判断的过程。
1.1.1SSH框架介绍
SSH为SecureShell的缩写,由IETF的网络工作小组(NetworkWorkingGroup)所制定;SSH是建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。
利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
传统的网络服务程序,如:
ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。
而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。
所谓“中间人”的攻击方式,就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。
服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。
SSH也俗称三层架构:
第一层:
实体类层
第二层:
业务逻辑层
第三层:
表示层(显示层)
Struts:
Model,View和Controller都提供了对应的组件。
ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。
Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。
Spring:
是一个开源框架,它由RodJohnson创建。
它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
1.2系统主要功能
网上书店系统要实现的功能主要有:
1)首先用户进入系统,浏览页面。
2)可以进行登陆和新用户的注册,个人信息填写。
3)实现用户购书,购买商品信息;
4)实现信息搜索与查询;
5)实现书籍的选择与购买;
6)实现管理员的操作,主要有针对用户信息、购买书籍信息两个方面的操作,包括添加、删除、修改、查询信息。
2.可行性分析
包括开发新系统必要性,新系统开发方案的经济性,技术上的可行性,组织管理上的可行性及环境的可行性等。
2.1技术可行性
此网上书店系统可以运行于Windows操作系统。
对计算机的硬件配置没有太高要求,现在的个人电脑完全可以满足。
数据库运用Mysql来实现。
在网站设计方面,运用HTML、CSS样式、JSP、ajax等知识制作出合理生动的网页。
2.2经济可行性
此系统可以运行于现在市场上出售的各种个人电脑,系统成本主要集中在系统的开发上。
当系统投入运行后,可以实现在网上卖书功能。
所带来的效益远远大于系统软件的开发成本。
在经济上是完全可行。
2.3操作可行性
界面设计充分考虑浏览用户的习惯,图书信息浏览、会员注册登录、购书等功能操作方便。
而且所有网页设计清新、简洁、合理,不会让用户感到视觉疲劳。
可操作性很强。
3.系统分析
3.1功能模块划分
网上书店是一个典型的基于web网站的javaEE软件系统,集成了诸多的功能软件,主要包括:
1)显示图书分类。
2)用户可以根据分类浏览某一类图书列表。
3)用户可以查看具体某一本书的简介。
4)在图书浏览也只要单击购买按钮,就可把选定的图书加入购物车。
5)用户可以随时单机购物车,查看车中已购图书的信息。
6)已登录的用户可以单击结账按钮下订单。
7)使用需先注册,在注册页填写个人信息,确认有效后成为新用户。
8)用户在登陆页填写用户名和密码,确认正确后才可结账。
各功能模块划分如图:
图3.1功能模块划分
3.2复杂业务流程分析
1.用户业务流程
游客进入系统页面,可以进行浏览,但若想进行网上购物,需进行注册,注册成功后,会提示注册成功,同时后台会把用户信息存在用户数据库中,若系统中已有此用户进行注册会提示注册失败可以进行直接登陆。
然后用户可以进行购书。
图3.2用户业务流程图
2.购书业务流程
用户提交登陆信息进行登陆,系统提示登陆成功或登陆失败,用户根据需要的图书信息进行查找,把所需的图书放在购物车内,自动生成订单,然后进行结算,完成购书过程。
图3.3购书业务流程图
3.管理员业务流程
管理员提交登陆信息进行登陆,系统提示登陆成功或登陆失败,管理员可以进行查看所有的图书信息,也可以进行修改图书信息,然后对售书过程进行发货处理。
,
图3.4管理员业务流程图
3.3关键业务说明
用户成功登陆网上书店后进行购书,可以通过模糊关键字搜索进行关键字查询自己需要的图书,然后可以根据需要加入购物车,可以加入自己喜欢的各种图书最后进行结算,结算后会自动生成订单,最后经过管理员对订单进行处理,从而完成整个的购书售书过程。
1)需要做好数据库的准备,通过Mysql数据库来完成数据的输入工作,通过SQL语句来实现简单的储存过程;
2)前台的页面设计尽量简单化、可视化、可操作化、可扩充化;
3)前台页面功能的设计通过在MyEclipse下编写Jsp页面来实现;
4)要求做到本系统的扩充性和可更新性,就是在对数据库进行修改、添加、更新等操作。
4.代码设计
4.1系统所需代码
主要包名如下:
1.BASEDAO类
publicclassBaseDAO{
privateSessionFactorysessionFactory;
publicSessionFactorygetSessionFactory(){
returnsessionFactory;
}
publicvoidsetSessionFactory(SessionFactorysessionFactory){
this.sessionFactory=sessionFactory;
}
publicSessiongetSession(){
Sessionsession=sessionFactory.openSession();
returnsession;
}
}
2.定义IBookDAO接口
publicinterfaceIBookDAO{
publicListgetBookbyCatalogid(Integercatalogid);
publicListgetBookbyCatalogidPaging(Integercatalogid,intcurrentPage,intpageSize);
publicintgetTotalbyCatalog(Integercatalogid);
publicListgetRequiredBookbyHql(Stringhql);
publicBookgetBookbyId(Integerbookid);
publicListgetAllBook();
publicvoiddeleteBook(Integerbookid);
publicvoidsaveOrUpdate(Bookbook);
publicBookgetBookByName(Stringbookname);
}
3.定义ICatalogDAO接口
publicinterfaceICatalogDAO{
publicListgetAllCatalogs();
}
4.定义IOrderDAO接口
publicinterfaceIOrderDAO{
publicOrderssaveOrder(Ordersorder);
publicListgetAllOrders();
publicvoidcomplete(Integerorderid);
}
5.定义IUserDAO接口
publicinterfaceIUserDAO{
publicvoidsaveUser(Useruser);
publicUservalidateUser(Stringusername,Stringpassword);
publicManagervalidateManager(Stringmanagername,Stringmanagerpassword);
publicUserfindUserById(Integeruserid);
publicbooleanexitUser(Stringusername);
publicvoidsaveOrUpdate(Useruser);
}
6.定义购物车类
publicclassCart{
protectedMapitems;//属性item
//构造函数
publicCart(){
if(items==null)
items=newHashMap();
}
//添加图书到购物车
publicvoidaddBook(Integerbookid,Orderitemorderitem){
//是否存在,如果存在,更改数量
//如果不存在的话,添加入集合
if(items.containsKey("bookid")){
Orderitem_orderitem=items.get(bookid);
orderitem.setQuantity(_orderitem.getOrderitemid()+orderitem.getQuantity());
items.put(bookid,_orderitem);
}
else{
items.put(bookid,orderitem);
}
}
//更新购物车的购买书籍数量
publicvoidupdateCart(Integerbookid,intquantity){
Orderitemorderitem=items.get(bookid);
orderitem.setQuantity(quantity);
items.put(bookid,orderitem);
}
//计算总价格
publicintgetTotalPrice(){
inttotalPrice=0;
for(Iteratorit=items.values().iterator();it.hasNext();){
Orderitemorderitem=(Orderitem)it.next();
Bookbook=orderitem.getBook();
intquantity=orderitem.getQuantity();
totalPrice+=book.getPrice()*quantity;
}
returntotalPrice;
}
publicMapgetItems(){
returnitems;
}
publicvoidsetItems(Mapitems){
this.items=items;
}
}
7.定义BookService类实现IBookService接口
publicclassBookServiceimplementsIBookService{
privateIBookDAObookDAO;
publicListgetBookbyCatalogid(Integercatalogid){
returnbookDAO.getBookbyCatalogid(catalogid);
}
publicListgetBookbyCatalogidPaging(Integercatalogid,intcurrentPage,intpageSize){
returnbookDAO.getBookbyCatalogidPaging(catalogid,currentPage,pageSize);
}
publicintgetTotalbyCatalog(Integercatalogid){
returnbookDAO.getTotalbyCatalog(catalogid);
}
publicListgetRequiredBookbyHql(Stringhql){
returnbookDAO.getRequiredBookbyHql(hql);
}
@Override
publicListgetAllBook(){
Listbooks=bookDAO.getAllBook();
returnbooks;
}
@Override
publicvoiddeleteBook(Integerbookid){
bookDAO.deleteBook(bookid);
}
@Override
publicvoidsaveOrUpdate(Bookbook){
bookDAO.saveOrUpdate(book);
}
8.定义CatalogService类实现ICatalogService接口
publicclassCatalogServiceimplementsICatalogService{
privateICatalogDAOcatalogDAO;
publicListgetAllCatalogs(){
returncatalogDAO.getAllCatalogs();
}
publicICatalogDAOgetCatalogDAO(){
returncatalogDAO;
}
publicvoidsetCatalogDAO(ICatalogDAOcatalogDAO){
this.catalogDAO=catalogDAO;
}
}
9.定义OrderService类实现IOrderService接口
publicclassOrderServiceimplementsIOrderService{
privateIOrderDAOorderDAO;
publicvoidsetOrderDAO(IOrderDAOorderDAO){
this.orderDAO=orderDAO;
}
publicOrderssaveOrder(Ordersorder){
returnorderDAO.saveOrder(order);
}
@Override
publicListgetAllOrders(){
returnorderDAO.getAllOrders();
}
@Override
publicvoidcomplete(Integerorderid){
orderDAO.complete(orderid);
System.out.println("orderServiceexecute");
}
}
10.定义UserService类实现IUserService接口
publicclassUserServiceimplementsIUserService{
privateIUserDAOuserDAO;
publicvoidsaveUser(Useruser){
this.userDAO.saveUser(user);
}
publicUservalidateUser(Stringusername,Stringpassword){
returnuserDAO.validateUser(username,password);
}
publicbooleanexitUser(Stringusername){
returnuserDAO.exitUser(username);
}
publicIUserDAOgetUserDAO(){
returnuserDAO;
}
publicvoidsetUserDAO(IUserDAOuserDAO){
this.userDAO=userDAO;
}
}
4.2代码详细设计
1.BookAction类
publicclassBookActionextendsActionSupport{
publicStringbrowseCatalog()throwsException{
Listcatalogs=catalogService.getAllCatalogs();
Maprequest=(Map)ActionContext.getContext().get("request");
request.put("catalogs",catalogs);
returnSUCCESS;
}
publicStringbrowseBook()throwsException{
Listbooks=bookService.getBookbyCatalogid(catalogid);
Maprequest=(Map)ActionContext.getContext().get("request");
request.put("books",books);
returnSUCCESS;
}
publicStringbrowseBookPaging()throwsException{
inttotalSize=bookService.getTotalbyCatalog(catalogid);
Pagerpager=newPager(currentPage,totalSize);
Listbooks=bookService.getBookbyCatalogidPaging(catalogid,currentPage,pager.getPageSize());
Maprequest=(Map)ActionContext.getContext().get("request");
request.put("books",books);
request.put("pager",pager);
//购物车要返回时,需要记住返回的地址
Mapsession=ActionContext.getContext().getSession();
request.put("catalogid",catalogid);
returnSUCCESS;
}
publicStringsearchBook()throwsException{
StringBufferhql=newStringBuffer("fromBookb");
if(bookname!
=null&&bookname.length()!
=0)
hql.append("whereb.booknamelike'%"+bookname+"%'");
Listbooks=bookService.getRequiredBookbyHql(hql.toString());
Maprequest=(Map)ActionContext.getContext().get("request");
request.put("books",books);
returnSUCCESS;
}
2.定义ManagerAction类
publicclassManagerActionextendsActionSupportimplementsRequestAware,ModelDriven,Preparable{
publicStringvalidateBookName()throwsUnsupportedEncodingException
{
if(bookService.bookNameIsValid(bookname)){
inputStream=newByteArrayInputStream("1".getBytes("UTF-8"));
}else{
inputStream=newByteArrayInputStream("0".getBytes("UTF-8"));
}
return"ajax-success";