4.1网上书店的架构4.24.3搭建项目框架注册、登录和注销功能开发4.1.1功能需求和展示1.主界面网上书店购书界面如图4.1所示。2.功能模块网上书店是一个典型的基于Web网站的JavaEE软件系统,集成了诸多的功能模块,主要包括:(1)显示图书分类。(2)用户可以根据分类浏览某一类图书列表。(3)用户可以查看具体某一本书的简介。(4)在图书浏览页只要单击【购买】按钮,就可把选定的图书加入购物车中。(5)用户可以随时单击,查看车中已购图书的信息。(6)已登录的用户可以单击【结账】按钮下订单。(7)使用需先注册,在注册页填写个人信息,确认有效后成为新用户。(8)用户在登录页填写用户名和密码,确认正确后才可结账。各功能模块的划分如图4.2所示。1.添加Spring核心容器2.添加Hibernate并持久化user表3.添加Struts2框架4.Struts2与Spring集成①添加Spring支持包。②配置web.xml文件。打开web.xml文件,增加Spring的配置,代码所示。③创建struts.properties。在src目录下创建struts.properties文件,把Struts2的类的生成交给Spring完成:struts.objectFactory=spring;5.开发DAO层BaseDAO代码如下:packageorg.easybooks.bookstore.dao;importorg.hibernate.SessionFactory;importorg.hibernate.Session;publicclassBaseDAO{privateSessionFactorysessionFactory;publicSessionFactorygetSessionFactory(){returnsessionFactory;}publicvoidsetSessionFactory(SessionFactorysessionFactory){this.sessionFactory=sessionFactory;}publicSessiongetSession(){Sessionsession=sessionFactory.openSession();returnsession;}}IUserDAO接口代码如下:packageorg.easybooks.bookstore.dao;importorg.easybooks.bookstore.vo.User;publicinterfaceIUserDAO{publicUservalidateUser(Stringusername,Stringpassword);publicvoidsaveUser(Useruser);}UserDAO类代码所示。6.开发业务层在src目录下建立包org.easybooks.bookstore.service,包中安置一个IUserService接口。IUserService接口代码如下:packageorg.easybooks.bookstore.service;importorg.easybooks.bookstore.vo.User;publicinterfaceIUserService{publicUservalidateUser(Stringusername,Stringpassword);publicUserregisterUser(Useruser);//实现(注册+登录)的Service}UserService类代码所示。7.开发Action控制块LoginAction.java代码所示。struts.xml文件内容如下:!DOCTYPEstrutsPUBLIC-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN=strutsextends=struts-defaultactionname=loginclass=loginresultname=error/error.jsp/resultresultname=success/welcome.jsp/result/actionactionname=registerclass=loginmethod=registerresultname=error/error.jsp/resultresultname=success/welcome.jsp/result/action/package/struts8.注册组件applicationContext.xml文件代码所示。9.编写JSP文件login.jsp的代码如下:%@pagelanguage=javapageEncoding=utf-8%htmlheadtitle登录页面/title/headbodyformaction=login.actionmethod=post用户登录br姓名:inputtype=textname=user.username/br密码:inputtype=passwordname=user.password/brinputtype=submitvalue=登录/ahref=register.jsp注册/a/form/body/htmlregister.jsp的代码如下:%@pagelanguage=javapageEncoding=utf-8%htmlheadtitle注册页面/title/headbodyformaction=register.actionmethod=post用户注册br用户名:inputtype=textname=user.usernamesize=20/br密 码:inputtype=textname=user.passwordsize=21/brinputtype=submitvalue=提交//form/body/htmlwelcome.jsp的代码如下:%@pagelanguage=javapageEncoding=gb2312%%@taglibprefix=suri=/struts-tags%htmlheadtitle成功页面/title/headbodys:propertyvalue=user.username/,您好!欢迎光临叮当书店。/body/htmlerror.jsp的代码如下:%@pagelanguage=javapageEncoding=gb2312%htmlheadtitle失败页面/title/headbody登录失败!/body/html10.部署运行部署项目、启动Tomcat服务器。在浏览器中输入并回车,出现如图4.3所示的登录首页。单击【登录】按钮提交表单,跳转到如图4.4所示的成功页面。后退到登录首页,如图4.5所示,用鼠标单击页面上的“注册”链接,进入如图4.6所示的注册页面。此时控制器会调用IUserService接口里的“注册+登录”服务(registerUser()方法),该服务又先后调用DAO层的saveUser()方法和validateUser()方法,实现新用户注册后立即用新账号登录的功能,本例将跳转到如图4.7所示的页面。1.分层模型总结前述的知识,轻量级的JavaEE系统最适合采用分层的方式架构,下面给出其分层模型,如图4.8所示。2.实施方案这里将讨论一个使用3种开源框架的解决方案,如图4.9所示。1.创建Web项目在MyEclipse中创建一个新的WebProject,命名为bookstore。2.创建源代码包在项目src目录下创建如图4.10所示的包。3.创建数据库网上书店有以下5个实体:用户、图书分类、图书、订单、订单项,因此,本系统的数据库设计如图4.11所示。根据图4.11所示的设计模型,用CASE工具生成SQL语句,代码所示。最终生成的表如图4.12所示,每个实体对应一个表,总共5个表。向catalog表输入记录的SQL语句:INSERTINTOcatalogVALUES(1,'C语言程序设计');INSERTINTOcatalogVALUES(2,'Java开发');INSERTINTOcatalogVALUES(3,'数据库');INSERTINTOcatalogVALUES(4,'网页编程');向book表输入记录:INSERTINTObookVALUES(1,4,'ASP.NET3.5实用教程',38,'ASP.NET3.5.jpg');INSERTINTObookVALUES(2,1,'C#实用教程',43,'CSharp.jpg');INSERTINTObookVALUES(3,1,'C实用教程',36,'C.jpg');INSERTINTObookVALUES(4,1,'C++实用教程',40,'C++.jpg');INSERTINTObookVALUES(5,4,'Flex4开发实践',45,'Flex4.jpg');INSERTINTObookVALUES(6,2,'JavaEE基础实用教程',35,'JavaEEBasic.jpg');INSERTINTObookVALUES(7,2,'JavaEE实用教程',39,'JavaEE.jpg');INSERTINTObookVALUES(8,2,'Java实用教程(第2版)',50,'Java.jpg');INSERTINTObookVALUES(9,4,'JSP编程教程',30,'JSP.jpg');INSERTINTObookVALUES(10,3,'MySQL实用教程',37,'MySQL.jpg');INSERTINTObookVALUES(11,3,'Oracle实用教程(第3版)',29,'Oracle.jpg');INSERTINTObookVALUES(12,4,'PHP实用教程',35,'PHP.jpg');INSERTINTObookVALUES(13,3,'SQLServer实用教程(第3版)',25,'SQLServer.jpg');INSERTINTObookVALUES(14,1,'VisualC++教程(第2版)',25,'VC++.jpg');4.添加SSH2多框架要注意添加的次序:(1)添加Spring核心容器。(2)添加Hibernate框架。(3)添加Struts2框架。(4)Struts2与Spring集成。具体操作同4.1.2小节,在第(2)步添加了Hibernate后,要一并将bookstore中的5个表全都用“反向工程”法生成持久化对象及映射文件,生成项全部置于先前创建的org.easybooks.bookstore.vo包中,如图4.13所示。4.3.1表示层页面设计1.页面布局在WebRoot下建立文件夹css,在其中创建bookstore.css文件。编写CSS代码所示。2.知识点:CSS样式表例如,在CSS定义了a标签的样式如下:a{font-family:宋体;color:#000000;}那么在页面中若出现:ahref=a.jsp链接/a而类样式则不同,定义一个样式的类格式如下:.name{…该类样式的属性}在页面标签中加入“class=name”属性,该标签就可以使用CSS中.name定义的样式。例如:divclass=n