哈尔滨工业大学成人教育专升本 计算机科学与技术专业毕业论文 网上拍卖系统
第5章 详细设计
5.1 设计与搭建构架
“网上拍卖系统”采用的构架为Struts+Hirbernate+Spring,系统的视图层与控制层主要通过Struts的标签库和Action相关类设计与实现;Hirbernate用于持久层的实现,包括数据访问层和对象模型的设计;Spring利用其AOP界面编程特性和强大的组装功能将Struts和Hirbernate装配起来,更有利于程序的维护和升级。 5.1.1 设计视图层
系统的视图层是一组JSP页面,他们通过Struts结合JSTL EL表达式语言将数据暴露给用户,供用户操作。本系统在界面设计上采用了模块化处理的思想,把很多页面共有的部分集成一个模块,例如页面的头、尾,这样在开发的时候遇到这类相似的页面部分就不再需要重新编写,而只要以一句:<%@include file=”header.jsp”%>就可以重用这部分的内容,大大提高了系统的开发效率。根据系统的功能,JSP的主要页面如下。
头(header.jsp):所有页面共有的头部分,通过<%@include file=”header.jsp”%>就可以重用这部分的内容。
尾(footer.jsp):所有页面共有的尾部分,通过<%@include file=”footer.jsp”%>就可以重用这部分的内容。
主页(main.jsp):主页是系统的入口。 登录页(login.jsp):系统为注册的用户提供一个进入系统并使用系统功能的入口。
登出页(logout.jsp):用户离开系统时显示的页面。 注册新用户页(newuser.jsp):系统提供给普通用户的注册功能。只有注册用户才可以参加竞拍并管理自己的物品。
管理商品页(mrgitem.jsp):系统为注册用户提供商品管理功能。 管理分类页(mrgkind.jsp):系统为注册用户提供商品分类管理功能。 查看竞得商品页(viewItemSu.jsp):系统为注册用户提供查看用户自己成功竞得的商品的功能。
查看自己的竞标(viewBid.jsp):系统为注册用户提供查看用户自己正在参与竞价的商品。
浏览流拍商品(viewFailItem.jsp):所有用户都可以浏览处于流拍状态的商品。
21
哈尔滨工业大学成人教育专升本 计算机科学与技术专业毕业论文 网上拍卖系统
浏览拍卖商品(viewKind.jsp):所有用户都可以浏览正在拍卖的商品。 查看商品详细信息(viewDetail.jsp):所有用户都可以查看正在拍卖物品的详细信息。但要参与竞拍必须是注册用户。
提示错误信息页面(error.jsp):所有操作错误的提示信息页面。 5.1.2 设计控制层
根据系统要实现的功能,构成此网上拍卖系统的各个控制层动作类如表5-1所示。通过此表,可以从宏观上了解各个控制层动作类的功能。
表5-1 控制层的动作类
ActionForm loginForm refistyForm Action MyActionServlet LoginAction NewUserAction AddBidAction AddItemAction AddKindAction MgrItemAction MgrKindAction ViewBidAction ViewDetailAction ViewFailAction ViewItemAction ViewSuAction ViewKindAction 功能描述 重载ActionServlet,以实现中文编码正确显示,需要在web.xml中重新配置 处理会员登陆的动作类 处理会员注册的动作类 处理添加竞拍成功记录的动作类 处理添加商品的动作类 处理添加商品种类的动作类 处理管理商品的动作类 处理管理商品种类的动作类 处理查看竞拍记录的动作类 处理查看商品细节的动作类 处理查看流拍商品的动作类 处理查看某一种商品的动作类 处理查看竞拍成功商品的动作类 处理查看商品种类的动作类 bidForm itemForm kindForm 此表列出了本系统中主要的动作类和Form Bean及其功能描述。
为了使各个表单中的数据能正确显示,本系统重载了ActionServlet类,使其正确处理中文参数并显示。设置步骤如下:
(1)重载ActionServlet,代码如下: package org.yeeku.struts;
import org.apache.struts.action.ActionServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
public class MyActionServlet extends org.apache.struts.action.ActionServlet {
protected void process(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException
22
哈尔滨工业大学成人教育专升本 计算机科学与技术专业毕业论文 网上拍卖系统
}
{ }
//设置编码方式为GB2312,正确处理中文。 request.setCharacterEncoding(\ //将控制权交给父类继续处理 super.process(request, response);
(2)在web.xml配置文件中应用此重载的MyActionServlet作为前端控制器,部分代码如下: ?
应用此设置后,程序将首先通过MyActionServlet预处理所有发送至此控制器设置中文编码,然后使用super.process()方法将控制权交给ActionSerlet处理完成其功能。 5.1.3 设计对象模型
根据前面的介绍,现在可以很容易的理解本系统的对象模型。通过MyEclipse,可以自动生成这些对象模型,以及数据访问层的相关类。系统对象模型类图如4-1所示,在org.yeeku.model包中有五个对象模型各个类的作用如下。
① Bid类:用户出价相关的信息。 ② Item类:商品类。
③ AcutionUser类:用户信息类。 ④ Kind类:商品种类类。 ⑤ State类:商品状态。
在org.yeeku.model.base包中有五个抽象类分别是org.yeeku.model包中类的父类。每一个抽象类都对应了数据库中的一张表。
23
哈尔滨工业大学成人教育专升本 计算机科学与技术专业毕业论文 网上拍卖系统
5.1.4 设计数据访问层
数据访问层使用Hibernate来实现,根据数据库表和对象模型之间的对应关系,使用MyEclipse可以自动生成数据访问层的DAO类和XXX.hbm.xml文件。此处给出与AuctionUser类相关的AuctionUserDao类及其实现类AuctionUserDaoHirbernet和auctionuser.hbm.xml文件,并对其分析。
AuctionUserDaoHirbernet类实现代码如下: package org.yeeku.dao; import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.yeeku.model.*; import org.yeeku.business.*;
public class AuctionUserDaoHibernate extends HibernateDaoSupport implements AuctionUserDao {
/**
* 根据id查找用户 id);
* @param id 需要查找的用户id */
public AuctionUser get(Integer id) {
return (AuctionUser)getHibernateTemplate().get(AuctionUser.class , } /**
* 增加用户
* @param user 需要增加的用户 */
public void save(AuctionUser user) {
getHibernateTemplate().save(user); } /**
* 修改用户
* @param user 需要修改的用户
24
哈尔滨工业大学成人教育专升本 计算机科学与技术专业毕业论文 网上拍卖系统
*/
public void update(AuctionUser user) {
getHibernateTemplate().saveOrUpdate(user); } /**
* 删除用户
* @param id 需要删除的用户id */
public void delete(Integer id) {
getHibernateTemplate().delete(getHibernateTemplate().get(AuctionUser.class , id)); } /**
* 删除用户
* @param kind 需要删除的用户 */
public void delete(AuctionUser user) {
getHibernateTemplate().delete(user); } /**
* 查询全部用户
* @return 获得全部用户 */
public List findAll() {
return getHibernateTemplate().find(\
} /**
* 根据用户名,密码查找用户
* @param username 查询所需的用户名 * @param pass 查询所需的密码
* @return 用户名,密码对应的用户的id */
public Integer findUserByNameAndPass(String username , String pass)
25