1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 基于BS模式的航材电子商务交易平台(2)

基于BS模式的航材电子商务交易平台(2)

时间:2021-11-21 17:20:08

相关推荐

基于BS模式的航材电子商务交易平台(2)

4) 查看报价草稿时,系统将根据报价单代码查找报价单对象和对应的询价单对象。其时序图如图4-14所示:

图4-14 查看报价草稿时序图

4.3.6实时消息时序图

用户在聊天窗口内输入相应的聊天内容,系统将会处理将其反馈给其他用户,其时序图如图4-15所示:

图4-15 实时消息时序图

4.3.7在线支付时序图

用户在确认订单后,就可以选择在线支付了。其时序图如图4-16所示:

图4-16 在线支付时序图

4.4系统数据库设计与实现

根据系统的需要建立如下的表:

企业实体表(Corp):如表4-17所示:

表4-17 Corp表

用户信息表(User):如表4-18所示:

表4-18 User表

企业认证的供应商表(Corp_Spl):如表4-19所示:

表4-19 Corp_Spl表

询价记录表(Inq)如表4-20所示:

表4-20 Inq表

询价航材项次表(Inq_Parts)如表4-21所示:

表4-21 Inq_Parts表

供应商收到的询价记录表(Inq_Spl)如表4-22所示:

表4-22 Inq_Parts表

第五章航材电子商务系统的实现

本章主要针对用户注册模块、找回密码模块、公告板模块、实时消息模块、用户登录模块、询价管理模块、邮件发送模块、报价管理模块和用户支付模块进行了系统的分析与实现。

5.1用户注册模块

1)用户通过点击首页页面左边的“注册”按钮,通过阅读系统的“隐私声明”(claim_for_privacy_cn_2.htm),点击“我同意”进入注册页面,点击“我不同意”返回首页。

2)在同意系统的隐私声明后,通过MycountManager/USERREC.action(MycountManager为struts2的命名空间)进行数据提交处理,在action注解中,将其返回到MyCountManager/USERREG.jsp页面,页面中会显示已经注册的航空公司、制造商、供应商以及维修商。

3)如果用户所在的企业并没有在系统中注册,那么首先要让用户注册其企业账户,系统将请求提交给REG_CORP_ADMIN.action,进行数据处理后,将页面返回到MyCountManager/REG_CORP_ADMIN.jsp。

其中返回字符串为“next”时,将数据提交到MyCountManager/REG_CORP_ADMIN1.action;返回字符串为“input”时,则将页面返回到MyCountManager/REG_CORP_ADMIN.jsp。

33到呢公路效果4)例如,在REG_CORP_ADMIN.jsp页面中,用户注册的企业代码为a3333,地址为zhejiangsheng,邮政编码为321004等等,通过点击“下一步”,将数据提交到MyCountManager/REG_CORP_ADMIN1.action,将页面返回到管理员注册界面MyCountManager/REG_CORP_ADMIN1.jsp。在这个action中,将会对企业信息和管理员信息进行保存,之所以没有在REG_CORP_ADMIN.action中对企业信息进行保存,就是为了保证在注册了管理员的同时,也注册了公司。

5)如果用户所在的企业已经在本系统中注册过,那么点击“我要注册个人用户”,页面则跳转到AEP_User_Reg.jsp。

用户在个人注册时,需要通过自身企业管理员的审核(批准),在注册时需

填写公司管理员的代码和管理员的登录口令。

系统在经过验证后,将把页面信息提交给MyCountManager/AEP_User_Reg.action,在返回“next”后,把信息提交给REG_CORP_USER.action处理,再把管理员信息反映在用户的注册界面中。

REG_CORP_USER.action的另外一个功能是保存MyCountManager/REG_CORP_USER.jsp中,用户输入的注册信息。

最后,用户注册成功后,还会像企业管理员注册那样,收到一封系统自动发出的电子邮件。

其流程活动图如图5-1所示:

图5-1 用户注册活动图

5.2找回密码模块

用户首先点击首页的“忘记密码”,则页面跳转到找回密码界面MyCountManager/AEP_User_getpass.jsp。

用户输入相关信息,密码将以电子邮件的方式发送至用户邮箱。

此页面将用户输入的信息提交给MyCountManager/AEP_User_GetPass.action。之所以在信息提交给action之后,返回AEP_User_getpass.jsp页面,为的是将用户输入错误的信息经过action处理以后,能够及时反映给用户,增强用户的体验性。

其流程活动图如图5-2所示:

图5-2 用户找回密码活动图

5.3公告板模块

为了满足客户将自己产品信息公布出来的需求,有一个更好市场,公告板是必不可少的。其主页面为MessageBoard/BC_LISTAjax.jsp。

用户通过点击页面的“发布公告”按钮,将会弹出一个填写具体需求信息的对话框,用户填写相应信息即可。

用户点击“发布”按钮以后,将信息提交给MessageBoard/AEPMessage.action进行保存,使得需求信息发布成功。

用户需要查询自己所需要的航材时,在相应的查询条件中输入相应内容,系统将显示其查询结果。

本模块的信息查询采用了ajax分页的技术,在使用中应该注意“中文”参数的传递,在客户端需要进行两次加密的过程,在服务器端需要进行两次解密的过程,以本系统为例:

客户端url进行两次加密:

var url="../MessageBoard/aepMessage.action?page="+page+"&ajax=yes&tag=list&sbj="+sbj+"&mty="+mty;

1) url = encodeURI(url);

2) url = encodeURI(url);

服务器端进行两次解密:

1) String type = ServletActionContext.getRequest().getParameter("mty");

2) type = URLDecoder.decode(type, "UTF-8");

5.4实时消息模块

该模块采用了返回DWR的反向AJAX技术来实现这一功能。反向AJAX的基本概念是客户端不必从服务器端获取信息,服务器会把相关的信息直接推送到客户端。

处理轮询请求的过程通常是在服务器端编写一些代码,以更新附加到服务器端的每个客户端的会话。DWR会记录与之联系的每个客户端,分别存储每个客户端的会话。这一点与通常的HTTP会话不同。借助于此,可以调用javascript代码,下一个轮询请求会通知这些调用。

这里主要通过WebContext类获得DWR应用的web上下文,用ServetContext获得DWRServlet的上下文,以及通过web上下文获取访问本应用的客户端浏览器的ScriptSession。一旦获得当前页面的名称,就可以获取当前连接到这个页面的所有回话列表。然后,启用监听客户端当前页进程,把数据添加到客户端调用的方法中【1】。

5.5用户登录模块

图4-23的左上角为用户登录区域,用户在输入了相关信息后,将信息提交给logonAction.action进行处理,在系统验证所输信息正确后,会在页面中显示出登陆效果。

在用户登录之后可以点击“退出”按钮,其处理方式是通过页面中传递一个用户退出的参数,传递到后台action中。在用户登录看不清验证码时,通常会点击“看不清,在换一张”这类的按钮,这就需要动态刷新验证码的技术,本系统也不例外。

在使用action进行验证码动态刷新时,验证码并不能按照规定显示出来,测试了很久也没有发现可靠的解决办法,故在本系统中采用了servlet的方法。图片路径定位选择了用servlet进行,但缺点是servlet被执行了两遍,在以后寻求变化。

在servlet配置中为了防止被action过滤,要把原来系统自动添加的配置信息改为VImage.jsp,在JavaScript中的src定义图片路径时用“servlet:’VImage.jsp’ +’ ?’ + Math.random();”(使用随机数是为了保证刷新出来的图片不一样)。

5.6询价管理模块

1)用户通过点击首页中的“我的供应商联系人”链接,将请求提交给MyOrderParts/BUYSPLLIST.action,在action中把页面所需的显示信息储存在相应的 request或session对象中,方便页面的调用,处理后将页面返回到MyOrderParts/BUY_SPL_LIST.jsp页面。

用户通过点击BUY_SPL_LIST.jsp页面中的“增加联系人”按钮,将弹出添加联系人对话框。

在MyOrderParts/BUYSPLLIST.action中,不但要处理用户所有联系人的显示信息,还要处理在用户选择了相应的联系人后,进行保存的信息,这都需要页面向后台传递不同的参数,在后台进行判断后处理。

2)用户通过点击首页中的“我公司认证的供应商”链接,将页面信息提交给MyOrderParts/BUYCERSPL.action进行处理,同样在action中把页面所需要显示的信息保存在request或session对象中,方便在对象页面的调用显示,处理后返回到MyOrderParts/BUY_CER_SPL.jsp页面中。

在BUYCERSPL.action中,不但要处理对用户所在企业所有认证供应商的显示信息,还要处理在用户选择了相应的供应商后,进行保存的信息,这都需要页面向后台传递不同的参数,在后台进行判断后处理。

3)所有关于询价单信息的处理,都是用户在客户端通过将相应的请求提交给MyOrderParts/BUYINQEDIT.action来进行的。

用户将请求提交给MyOrderParts/BUYINQEDIT.action进行处理,在此action中可以根据用户不同的需求进行信息的处理,例如:增加新的询价单、发送询价单,查询所有询价单,查询一份具体询价单信息等。此类处理,都是根据请求参数的不同来进行判断处理的。

为了实现用户发布询价单的需求,用户只需点击“询价管理”中的新询价单链接,将请求提交给BUYINQEDIT.action之后返回到MyOrderParts/BUY_INQ_EDIT.jsp页面,便可以方便地按照系统给出的模板进行询价单的发送。

用户在/BUY_INQ_EDIT.jsp中需填写相应的询价信息,选择发送的对象,添加需要询价的器材。点击“增加所涉及的器材”时会弹出对话框,用户只需填写相应的信息即可。

用户点击“发送”按钮后,系统将会自动的将询价单发送给相应的供应商,以便供应商能够及时的将报价单发送给用户。

当用户想查询自己发送的询价单时,可以点击“我发出的询价单”按钮,同样客户端将把相应的信息提交给MyOrderParts/BUYINQEDIT.action进行处理,返回后页面跳转到MyOrderParts/BUY_SEND_INQ_LIST.jsp。

用户可以点击相应的询价单代码,来查看询价单具体的内容,将相应信息提交给后台进行处理后,返回到MyOrderParts/VBUY_SENDINQ_EDIT.jsp页面。

询价单代码的生成规则为:生成询价单号,编码规则为:【企业代码/5】+【年月日/8】+【序列/7】。

其流程活动图如图5-3所示:

图5-3 询价活动图

5.7邮件发送模块

邮件发送的协议【3】:

1)利用SMTP协议发送e-mail,SMTP( Simple Mail Transfer Protocol ) 是TCP/ IP 协议的一部分,用于在Internet上对电子邮件进行路由传送,是Internet上应用最广泛的上层协议。

2)利用POP3协议发送Email,POP3(Post Office Protocol 3)是TCP/IP网络经常使用的邮政协议标准的最新版本。POP3协议允许客户通过暂时的TCP/IP 连接,从POP主机上取得电子邮件。POP协议最大的优点是不需要与网络保持不间断的连接,就可收取电子邮件。

在默认情况自下,POP3的端口号是110。

其工作流程流程分为下面几步:

1) 客户机发出请求,请求和服务器连接;

2) POP3 服务器应答,连接建立;

3) 客户机和服务器交互命令/ 应答和数据;

4) 结束连接。

登录邮件服务器有几个必要条件,首先要通过POP3邮件服务器和SMTP发信服务器的地址,还要提供登录服务器用户名和密码。先通过指定POP3服务器和SMTP服务器的网址属性创建一个session对象,然后再session对象中取得邮件存储对象,再利用用户名和密码通过store对象的connect方法进行连接,就可以对服务器上的邮件进行操作了。

在邮件发送时需要保存用户当前发送或接受邮件的全部信息,包括用户名、口令、邮件发送和接收服务器名称、验证信息等,这些信息封装在MailUser类中。

在Session中,有时需要对邮件的属性进行安全验证,这就需要一个安全验证类MailAuthenticator,其实现代码如代码5-4所示:

public class MailAuthenticator extends Authenticator{

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(MailUser.getUserName(), MailUser.getPassWord());

}

}

代码5-4 MailAuthenticator.java

邮件发送模块增强了与用户的信息交流,增加了用户的体验,在前文中也展示了相关信息,只需在提交的action中调用相应的SendMail的方法便可以实现邮件的发送,这里不再赘述。

5.8报价管理模块

1)用户在首页中通过点击报价管理中“收到的询价单”链接,将请求提交给MySaleparts/SALERECINQLIST.action,返回到MySaleparts/SALE_REC_INQ_LIST.jsp页面。

页面中显示出报价单代码,报价单号编码规则为:B_"企业代码_"+【询价单号】。如果询价单没有生成报价单,则可以通过点击“生成报价单”来生成报价草稿。

2)用户点击“生成报价单”来生成该询价单的报价草稿,将提交请求交由

SALERECINQLIST.action进行处理,最终将报价模板的页面MySaleparts/SALE_REC_INQ_EDIT.jsp显示出来。

3)用户在SALE_REC_INQ_EDIT.jsp中输入相应航材的单价,总价,优惠价后,点击左下角的“生成报价草稿”,将请求再一次提交给SALERECINQLIST.action,处理后,页面返回到MySaleparts/SALE_REC_QFN_LIST1.jsp。

页面中将显示航材对应的价格,用户也可以直接在文本框中进行航材价格的更改,点击“发送报价单”,将此报价单发送给相应客户。

4)用户通过点击首页中的“发出的报价单(草稿)”链接,可以查询用户所发出的所有报价单草稿,页面为MySaleparts/SALE_QFN_LIST.jsp。

通过点击页面中的报价单代码,便可以对报价单进行编辑,页面为MySaleparts/SALE_REC_QFN_LIST1.jsp。

用户对页面中的数据加以更改后,便可以发送报价单了。

5)用户通过点击首页中的“我发出的报价记录”链接,可以查询用户所发出的所有报价记录,页面为MySaleparts/SALE_QFN_LIST.jsp。

点击相应报价单代码后,用户仅能查看相应的报价单,“发送报价单”按钮不可用,页面为MySaleparts/SALE_REC_QFN_LIST2.jsp。

6)SALERECINQLIST.action的业务控制逻辑处理较为复杂,跟报价相关的用户请求都由其进行控制处理,通过页面中参数的传递来对请求信息进行处理,返回不同的页面。

其流程活动图如图5-5所示:

图5-5 报价活动图

5.9用户支付模块

用户在确认订单后,通过点击订单界面的“支付宝即时到账”按钮,系统将会根据请求调用支付宝所提供的网络接口,从而完成此次在线交易。

第六章测试与总结

前几章已经详细介绍了航材电子商务系统的各个功能模块,本章将对已经实现的功能进行功能和性能方面的测试。

6.1测试方案概述

对系统进行测试时,主要是采用以黑盒法设计基本的测试方案,再用白盒法补充一些必要的测试方案的方法。

6.2测试方法

对系统进行测试时,使用得最多的是黑盒测试的边界值分析方法。首先确定边界情况,选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值的数据。同时,应该即包括输入数据的边界情况又包括输出数据的边界情况。

等价划分法和错误推测法也是测试中使用到的黑盒测试技术。等价划分法是将输入输出数据划分为若干个等价类,再选取等价类中的一组数据进行测试。错误推测法是列举出程序中可能有的错误和容易发生的错误来进行测试。

6.3功能测试

登录功能的测试报告见下表6-1。

表6-1 登录功能测试报告

6.4性能测试

连接速度的测试报告见下表6-2。

表6-2 连接速度测试报告

其它系统性能的测试过程与此相似,测试报告略。

6.5测试结论

作者对此系统的功能、性能,以及可用性均进行了测试,通过对测试结果的分析总结得出:此系统的功能基本满足用户需求,性能基本达到需求,具有可用性和友好性。

但是测试用例有一定的局限性,测试环境和实际运行环境也存在着一定的差异,所以不能完全地、准确地测试出系统存在的问题,还需要在后期的维护过程中,对系统暴露出来的问题进行纠正和更新。

第七章总结

通过本次的毕业设计(论文),使我对开发电子商务平台这门技术有了更深入的了解。在此次毕业设计中,我在学习掌握了计算机技术技术与应用、软件工程、SSH架构应用的基础上,综合运用了JSP动态网页制作,SSH框架,AJAX,DOJO,DWR,反向AJAX,MySql数据库构建等技术,设计开发出了一个比较理想的航材交易电子商务平台,达到了预期的设计效果与目的,也掌握了如图7-1所示的控制器设计模型的思想。每个系统网站开发的建设一般都分为三个阶段,分别是网站规划和设计、网站的建设和网站的维护阶段。其中,网站的规划和设计阶段又分为确定建站目标、组织站点结构设计、外观与导航方案和收集资料四个步骤。

图7-1 控制器设计模型

对一个系统的开发而言,它所包含的设计思想,并发处理有着不可估量的作用,这也是衡量一个系统优良的重要标志。生动的系统需要一些亮点来点缀,好比“万花丛中一点绿”一样,好的亮点设计可以让我们设计开发出的系统看起来充满生气且更有吸引力,从而牢牢抓住使用者的目光;相反,糟糕的亮点设计只会让浏览者感到厌烦。

在系统的开发过程中,我也曾遇到过一些棘手的问题,有时候也会犯一些常识性的(低级)错误。问题虽小,但我们绝不能忽视它,为避免和减少我们所犯常识性错误的概率,现总结如下:

1) hibernate HQL语言 hql = "from Boards where bdid=" + boardId; boardId为int类型所以和String类型的属性值写法上有区别:hql = "from Users as b where b.username='" + userName + "'"; userName为String类型。

2) hibernate延迟加载的异常:“no session or session is closed”。关于这个异常,是在延迟加载中,简单的理解就是当session已经关闭后,又出现了hibernate试图通过session从数据库中加载实际的数据集,所以报出session已关闭的错误。但是如果我们采用了延迟加载机制,希望在一些情况下,实现非延迟加载时的功能,在提供一个完整的AEPinq对象时,把所关联的AEPInqParts 信息在session关闭之后仍然可以使用。这就要采用hibernate.initialize方法,可以通过强制加载关联对象来实现这一功能。 Hibernate.initialize(inq.getAEPInqParts());Session.close(); 即可。

3) 遇到了String为空的情况,在执行时虽然有if(string == “”)的判断,但是仍然不能符合需求,需加入if(string == “” || string == null)。

4) 项目有几张表中定义了“双主键”,其中的数据在单个主键中出现了重复的现象,数据仍可保存,个人认为双主键可以看作是一个大的整合主键,仍不违背主键不重复的原则。例如:

Id,name 两个都是主键(双主键)

1 小明

1 小军

这样的数据是可以进行保存的。

5) hibernate 加入注解时应加入的jar包:(过时了,3.5开始支持注解,不用再加入以下三种jar包了,但是需要hibernate的validation产品,才能对属性进行非空、长度等等的约束验证)。

6) 当html的form表单的action="/url"(以/开头的url地址)时,其会从http:// 127.0.0.1:8080这个根开始附加,我们要访问具体信息必需要加上项目的上下文(context),就是tomcat安装目录下wepapps/context(具体是你工程名字)这个文件夹名字,像这样<form action="/Struts2Study/namespace/test.jsp" method="post"> 而struts的form标签的action="/url"(以/开头的url地址)时,struts2帮我们作了优化,他会自动为我们在htpp://127.0.0.1:8080/后面加上 项目的上下文,再附加action后的url,而这也是我们开发时想要的本意,象这样<s:form action="/namespace/test.jsp"> 其余的都是一样的 action="url" 和 action="./url" 都表示当前路径 action="../" 表示上级路径。

7) Ajax url传值乱码:

两次加密和两次解密的过程:

客户端url要经过两次加密:

var url="../MessageBoard/aepMessage.action?page="+page+"&ajax=yes&tag=list&sbj="+sbj+"&mty="+mty;

1) url = encodeURI(url);

2) url = encodeURI(url);

服务器端经过两次解密:

1) String type = ServletActionContext.getRequest().getParameter("mty");

2) type = URLDecoder.decode(type, "UTF-8");

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。