J2EE 课程设计实训项目——《蓝梦网上商城》——系统UML包图的设计

合集下载

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统表示层页面中应用OSCache缓存技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统表示层页面中应用OSCache缓存技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统表示层页面中应用OSCache缓存技术1.1.1应用OSCache缓存框架改善系统运行性能(实现页面中的动态内容的缓存)1、添加OSCache的系统包文件到本项目中(1)主要的jar包文件:oscache-2.3.2.jar和commons-logging.jar文件(已经在前面加入过,则不再需要)(2)最后为下面的结果状态2、将oscache.properties、oscache.tld放入WEB-INF\class目录中(1)导入这两个文件(2)最后为下面的状态3、修改web.xml文件以增加下面的内容,增加对OSCache提供的taglib的支持(1)对于JSP1.2的Web应用系统为下面的状态<taglib><taglib-uri>oscache</taglib-uri><taglib-location>/WEB-INF/classes/oscache.tld</taglib-location> </taglib>(2)对JSP2.0的Web应用,则不再需要了上面的设置注意:可以在IDE中通过帮助来获得我们的JSP版本。

4、在需要缓存的页面中添加下面的内容(1)对于JSP1.2的Web应用系统为下面的状态<%@ taglib uri="oscache" prefix="cache" %>(2)对于JSP2.0的Web应用系统为下面的状态<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="cache" %> (3)根据应用的要求添加对应的标签<cache:cache key="allTitleInfoList" refresh="false" scope="session"> //页面中待缓存的动态数据</cache:cache>5、测试上面的缓存的页面效果。

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统需求分析与建模实例

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统需求分析与建模实例

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统需求分析与建模实例1.1.1网上购物系统业务流程分析1、可行性研究的前提由于近几年互联网形态下的外部大的市场环境日趋成熟,从而对传统产业的影响不可忽视。

目前我国的大中城市,电脑和网络的应用已经非常普遍,互联网的迅速崛起便催生出网上购物,这一新兴购物方式。

随着经济的发展和人们思想意识的逐渐开放,更多的人加入到买电脑上网的行列。

网上购物人群迅速扩大,各种网络设施的完善,经济的持续发展及人们生活水平的提高,网上购物已逐渐成为人们习惯性的行为。

其次,网络正在冲击着人们的传统消费习惯和思维、生活方式。

越来越多的人们逐渐习惯于到网上查找信息,当他产生某种需求到网上查找相关产品和企业信息时就成了潜在的客户,当信息能满足他的需要的时候,便成为了该应用系统的客户。

2、网上购物业务流程概述顾客首先访问网上购物网站,浏览网页。

接着如果是新用户就登录注册界面,输入相关信息进行注册,立刻成为用户。

老用户就直接登录界面。

注册成为会员后,就能够享受到商场提供的各种方便的服务,可以利用商品查询的功能,快捷地查询到自己需要购买的商品,为顾客实现不出门也能方便快捷地了解到自己需要购买的商品的价格,生产日期。

找到自己需要购买的商品以后,就可以进行购物了。

在需要购买的商品点击购买按扭,进入订货界面,进行订货。

客户可以查询自己的订单,看看是否交易成功。

成功后就进行付款,最后可以选择继续购买还是注销退出,实现网上购物整个活动过程。

3、用户购物子系统用例图1.1.2网上购物系统业务功能分析《网上购物系统》的建构主要分为两部分:前台客户功能和后台管理功能。

整个系统将实现以下功能。

1、前台客户功能1)用户注册2)用户登录3)用户信息修改4)商品查询5)购物车6)订单查询7)用户留言8)结账2、后台管理功能1)商品维护2)查看用户3)查看留言3、前台业务功能分析4、后台业务功能分析1.1.3系统各个用例的事件流建模1、用户模块——用户登录子功能模块(1)功能解释后台管理登录时,要求检验用户名、密码、校验码。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦集团网上求职招聘系统项目系统设计评审总结报告说明书1.1.1系统设计评审会议记录1、会议时间XX月XX日2、会议人员张三(组长),李四(组员),王五(组员)3、会议地点教学楼4064、会议目的本次设计和开发评审会议的目的是小组全体人员对软件设计的技术文档进行评价,以判断确定设计和开发能否实现软件产品预先定义的规格,同时通过评审标识出与规格和标准的偏差,它向管理部门提供充足的证据以证明:1)设计是否符合了其规格要求;2)设计是否满足相关法律、法规以及企业标准的要求;3)软件产品的更改得到了恰当地实施;4)软件产品的更改只对那些规格发生了更改的系统区域有影响,没有引入新的问题5、会议讨论范围会议讨论对软件设计和开发的原始设计以及设计与开发的更改进行评审。

6、角色和职责(1)主审人主审人是技术评审的指挥人员,负责评审活动的组织、结论、书面报告和问题跟踪,主审人由张三同志承担。

(2)评审专家评审专家应由满足要求的技术人员担任,负责向评审组成员提出自己的评审意见和建议。

评审专家是由李四、王五同志承担。

(3)质量保证人员由杨六同志承担。

(4)会议记录员由赵七同志承担。

(5)顾客和用户代表由章八、王九同志承担。

(6)相关领导和部门管理人员无。

7、评审时机在项目的详细设计文档出来后,由项目开发组长和技术总工共同组织本项目的设计评审会议,对项目的设计结果进一步理性地思考,对项目的设计结果(架构和类)进一步完善和重构,并考虑如何应用有关的设计模式(架构和编程实现等方面)优化系统的设计以最终达到系统的可扩展性、可维护性。

8、评审的基本要求(1)项目的设计评审会议在本次执行,不排除在项目开发过程中出现变动,再次召开评审会议的可能。

(2)评审结论应明确;(3)评审资料应及时归档。

9、评审依据(1)立项说明书,软件需求规格说明书,软件概要设计文档和软件详细设计文档。

(2)软件设计文档国家标准GB8567—88 中的相关规定。

J2EE 课程设计实训项目——《蓝梦网上商城》——系统详细设计说明书(第3部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——系统详细设计说明书(第3部分)

J2EE 课程设计实训项目《蓝梦网上商城》系统详细设计说明书编写人(签字):日期:年月日用户方项目代表(签字):日期:年月日开发方项目代表(签字):日期:年月日质量保证代表(签字):日期:年月日1目录第1章引言···············································································错误!未定义书签。

1.1编写目的 ········································································错误!未定义书签。

J2EE 课程设计实训项目《蓝梦网上商城》——对系统业务处理层用户信息组件添加AOP ThrowsAdvice拦截器组件

J2EE 课程设计实训项目《蓝梦网上商城》——对系统业务处理层用户信息组件添加AOP ThrowsAdvice拦截器组件

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统业务处理层的用户信息组件添加AOP ThrowsAdvice拦截器组件1.1.1对系统业务处理层中的相关组件添加AOP ThrowsAdvice拦截器组件1、org.springframework.aop.ThrowsAdvice接口(1)应用的目标若想要在业务组件(erInfoManageImple)中的某些方法出现com.px1987.webshop.service.ServiceException异常抛出时产生AOP通知并将异常信息以Log的形式记录下来,我们可以使用Throws Advice。

(2)要求在Spring中想要实现Throws Advice,必須实现org.springframework.aop.ThrowsAdvice接口,然而这个接口并沒有定义任何的方法,它只是一个标签(tag)。

(3)org.springframework.aop.ThrowsAdvice接口的定义2、定义的方式(1)afterThrowing方法的一般的定义方式因此,我们可以在代码中定义任意的方法名称,只要它是以下的形式就可以:public void afterThrowing(Method targetMethod, Object[] methodArgs, Object targetClass,Throwable exceptionClass);其中targetMethod、methodArgs与targetClass都是可以省略的,方法中必须要有的是exceptionClass,在异常发生时,会检验所设定的Throws Advice中是否有符合异常类型的响应方法afterThrowing,如果有的话就通知它执行。

(2)afterThrowing方法可以是下面的各种形式public void afterThrowing(Exception ex)public void afterThrowing(RemoteException)public void afterThrowing(Method method, Object[] args, Object target, Exception ex)public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)所应该注意的是,我们只能通知方法,并传入异常对象,我们并不能在Throws Advice 中将异常处理掉,异常处理仍然是应用系统程序本身所要负责的。

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring JavaMail邮件抽象实现项目中的邮件自动发送功能

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring JavaMail邮件抽象实现项目中的邮件自动发送功能

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring JavaMail 邮件抽象实现项目中的邮件自动发送功能1.1.1应用Spring JavaMail邮件抽象实现项目中的邮件自动发送功能1、Spring JavaMail概述E-mail是一个优秀的通知系统,也充当一个基本的工作流系统的角色。

Spring使发送邮件变得非常容易,它隐藏底层邮件系统的复杂性。

Spring邮件支持的主要接口叫做MailSender。

它还提供了一个SimpleMailMessage类来封装一条消息的公共属性(from, to, subject, message)。

如果我们想发送带附件的邮件,则可以用MimeMessagePreparator来创建和发送消息。

下面给出一个在本项目中的实现示例。

2、修改webShopUserInfoIoC.xml文件以添加与Spring邮件抽象实现相关的组件(1)定义一个org.springframework.mail.javamail.JavaMailSenderImpl组件对象<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value=""/><property name="username" value="trainict"/><property name="password" value="6407"/></bean>(2)并将该组件对象注入到我们的Spring事件广播的响应的组件SpringActionEventResponse类中<bean id="springActionEventResponse" class="com.px1987.webshop.business.springevent.SpringActionEventResponse"> <property name="mailSender"><ref bean="mailSender"/></property></bean>(3)到目前为止的配置示例如下<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/dtd/spring-beans-2.0.dtd"><beans><bean id="userInfoCRUDImple" class="erInfoCRUDImple" scope="prototype"> </bean><bean id="orderInfoCRUDImple" class="com.px1987.webshop.dao.crud.OrderInfoCRUDImple" scope="prototype"> </bean><bean id="goodsInfoCRUDImple" class="com.px1987.webshop.dao.crud.GoodsInfoCRUDImple" scope="prototype"> </bean><bean id="userInfoDAOServiceImple" class="erInfoDAOServiceImple" scope="prototype"> <property name="userInfoCRUDImple"><ref bean="userInfoCRUDImple"/></property><property name="orderInfoCRUDImple"><ref bean="orderInfoCRUDImple"/></property><property name="goodsInfoCRUDImple"><ref bean="goodsInfoCRUDImple"/></property></bean><bean id="orderInfoDAOServiceImple" class="com.px1987.webshop.service.OrderInfoDAOServiceImple" scope="prototype"> <property name="userInfoCRUDImple"><ref bean="userInfoCRUDImple"/></property><property name="orderInfoCRUDImple"><ref bean="orderInfoCRUDImple"/></property><property name="goodsInfoCRUDImple"><ref bean="goodsInfoCRUDImple"/></property></bean><bean id="goodsInfoDAOServiceImple" class="com.px1987.webshop.service.GoodsInfoDAOServiceImple" scope="prototype"> <property name="userInfoCRUDImple"><ref bean="userInfoCRUDImple"/></property><property name="orderInfoCRUDImple"><ref bean="orderInfoCRUDImple"/></property><property name="goodsInfoCRUDImple"><ref bean="goodsInfoCRUDImple"/></property></bean><bean id="userInfoManageImple" class="erInfoManageImple"scope="prototype"><property name="userInfoDAOServiceImple"><ref bean="userInfoDAOServiceImple"/></property><property name="springActionEventResponse"><ref bean="springActionEventResponse"/></property></bean><bean id="springActionEventResponse"class="com.px1987.webshop.business.springevent.SpringActionEventResponse"> <property name="mailSender"><ref bean="mailSender"/></property></bean><bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"><property name="host" value=""/><property name="username" value="trainict"/><property name="password" value="12345678"/></bean></beans>3、在我们的Spring事件广播的响应的组件SpringActionEventResponse类中增加一个名称为mailSender的JavaMailSenderImpl成员属性对象,并提供set方法import org.springframework.mail.javamail.JavaMailSender;…private JavaMailSender mailSender=null;public void setMailSender(JavaMailSender mailSender){this.mailSender = mailSender;}4、编程我们的邮件发送功能代码package com.px1987.webshop.business.springevent;import org.springframework.context.ApplicationListener;import org.springframework.context.ApplicationEvent;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.MailException;import org.springframework.mail.javamail.MimeMessagePreparator;import javax.mail.internet.MimeMessage;import javax.mail.MessagingException;import javax.mail.internet.InternetAddress;import javax.mail.Message;public class SpringActionEventResponse implements ApplicationListener { private JavaMailSender mailSender=null;public void setMailSender(JavaMailSender mailSender) {this.mailSender = mailSender;}String userMail=null;String userName=null;String userPassWord=null;public SpringActionEventResponse() {}public void onApplicationEvent(ApplicationEvent applicationEvent) {//识别事件源对象是否为指定的事件类型if (applicationEvent instanceof SpringActionEvent) {userMail=((SpringActionEvent)applicationEvent).getOneUserInfo().getUserMail();userName=((SpringActionEvent)applicationEvent).getOneUserInfo().getUserName();userPassWord=((SpringActionEvent)applicationEvent).getOneUserInfo().getUserPassWord();MimeMessagePreparator preparator = new MimeMessagePreparator() { public void prepare(MimeMessage mimeMessage) throws MessagingException{mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(userMail));mimeMessage.setFrom(new InternetAddress("trainict@"));mimeMessage.setText("您在本系统中的注册用户名称为:"+userName+ "密码为:"+userPassWord);}};try{mailSender.send(preparator);}catch (MailException ex) {System.err.println("邮件发送过程中出现了错误:"+ex.getMessage());return;}System.out.println("我们已经将您的ID及密码等信息发送到您的邮箱"+userMail);}}}。

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring框架中 的“Open Session in View模式”

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring框架中 的“Open Session in View模式”

J2EE 课程设计实训项目——《蓝梦网上商城》——应用Spring框架中的“Open Session in View模式”1.1.1在Spring框架与Hibernate框架相互整合的应用中应用Spring框架中的“OpenSession in View模式”(实现方式一)1、Spring提供了OpenSessionInViewerFilter和OpenSessionInViewInterceptor两种组件(1)功能使用它们中的任一个都能获得同样的功能。

(2)两者唯一不同点其中interceptor在Spring容器中运行,并且在web应用的上下文中配置(WebApplicationContext);而Fitler在Spring前就已经运行,并且需要在web.xml中配置。

不管使用哪一个,他们都会在请求绑定到Session的当前线程期间打开Hibernate Session。

(3)实现的原理Open Session In View在request把session绑定到当前thread期间一直保持hibernate session在open状态,使session在request的整个期间都可以使用,如在View层里PO也可以lazy loading数据。

当View 层逻辑完成后,才会通过Filter的doFilter方法或Interceptor的postHandle方法自动关闭session。

(4)HibernateDaoSupport透明地使用Hibernate 的Session一旦绑定到线程,打开的Hibernate 的Session能被DAO的实现类透明地使用。

Session 会持续打开允许延迟加载访问数据库。

一旦View逻辑完成,Hibernate 的Session会被关闭,无论是在Filter的doFilter方法中还是在Interceptor的postHandle方法中。

2、Interceptor配置示例此时可以使用Spring的AOP配置,将这个Interceptor配置到我们所需要的层次上去。

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统功能模块设计及系统数据库表结构设计实例

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统功能模块设计及系统数据库表结构设计实例

《J2EE系统架构和程序设计》课程设计实训项目——某网上购物系统详细设计中的功能模块设计及系统数据库表结构设计实例1.1.1系统用户注册及登录模块1、本模块主要包括如下的系统功能(1)用户注册(2)用户登录(3)用户信息修改2、本模块的功能设计属性及接口参数功能public UserBean Connectiong conUserClass user 用户注册信息添加到数据库1.1.2商品查询模块1、本模块主要包括如下的系统功能(1)显示最新商品信息(2)根据关键词查询(3)根据分类查询(4)根据鲜花类型查询(5)根据价格查询(6)根据厂商查询2、本模块的功能设计属性及接口参数功能public GoodsBean()public int getAllpage()public int getAllpagesort()public int getAllpageByprice() public int getAllpageByMaterial() public collectiong getAllgoods() public collection getGoodsBySortpublic collection getGoodsByPricepublic collection getGoodsByMaterialpublic collection getGoodsByID public collection getGoodsByName public collection getGoodsByPrice public collection getGoodsByLower Selectpublic collection getGoodsByHighest Selectpublic boid addGoodspublic boid deleteGoodspublic boid modifyGoods String sString sString sInt sString sInt ageCountString sInt ageCountString sInt ageCountString sString sString sString mString nString mString n建立数据库连接获得全部查询商品信息根据商品类型获得商品信息根据商品价格活的商品信息根据商品花材获得商品信息分页显示所获得所有商品信息分页显示根据商品类型获得商品信息分页显示根据商品价格活的商品信息分页显示根据商品花材获得商品信息根据商品ID获得商品信息根据商品名称获得商品信息根据商品销售价格获得商品信息根据商品名称和类型获得商品信息根据商品名称类型价格获得商品信息添加商品信息删除商品信息修改商品信息1.1.3购物车模块1、本模块主要包括如下的系统功能(1)向购物车中添加商品(2)从购物车中删除商品(3)查看购物车(4)生成订单(5)查看历史订单(6)查看订单明细2、本模块的功能设计属性及接口参数功能1.1.4系统管理员对系统信息管理模块1、本模块主要包括如下的系统功能(1)商品管理包括商品的添加、删除、修改(2)订单管理包括订单的添加、删除、修改(3)用户管理包括添加、删除、修改(4)厂商管理包括厂商的添加、删除、修改1.1.5系统安全管理模块1、本模块主要包括如下的系统功能(1)记录用户登录时间(2)记录用户登录IP(3)记录用户离开时间2、本模块的功能设计属性及接口参数功能1.1.6用户留言模块1、本模块主要包括如下的系统功能(1)用户添加留言(2)显示所有用户留言2、本模块的功能设计属性及接口参数功能1.1.7系统数据库表结构设计1、系统用户Customer数据库表2、产品信息Product数据库表3、类别Main_type数据库表4、系统管理员信息Admin数据库表5、订单信息Orders数据库表6、订单详细信息OrderDetail数据库表7、支付信息Payment数据库表1.1.8系统信息安全设计本系统将从网络通讯、操作系统、数据库管理系统、应用系统、计算机病毒的防治等五个方面为系统提供安全保障。

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件

J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统项目中的用户信息业务处理功能组件1.1.1实现系统项目中的用户信息业务处理功能组件1、添加与Spring相关的系统包(1)在Web-INF/lib目录下添加下面的各个文件spring.jar、aopalliance.jar、cglib-nodep-2.1_3.jar、spring-mock.jar、quartz-1.6.0.jar(定时器)、mail.jar和activation.jar(JMail相关的文件)而commons-logging.jar、log4j-1.2.14.jar已经在前面的Struts中添加过。

(2)实现过程如下2、用户信息管理的接口(1)接口名称为UserInfoManageInterface,包名称为er(2)设计该接口中的各个成员package er;import com.px1987.webshop.business.vobject.*;import com.px1987.webshop.service.*;import java.util.*;public interface UserInfoManageInterface{public boolean doUserLogin(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUserRegister(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUpdateOneUserInfo(UserInfoVO oneUserInfoVO) throws ServiceException;public boolean doUpdateOneRegisterUserPassWord(UserInfoVO oneUserInfoVO,String newPassWord) throws ServiceException;public boolean doUpdateOneAdminUserPassWord(UserInfoVO oneUserInfoVO,String newPassWord) throws ServiceException;public boolean doCheckUserNameExist(String userName,Integer type_User_Admin) throws ServiceException;public String doGetOneRegisterUserPassWord(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public String doGetOneAdminUserPassWord(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public UserInfoVO doGetOneRegisterUserInfo(String registerUserID) throws ServiceException;public UserInfoVO doGetOneRegisterUserInfo(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public UserInfoVO doGetOneAdminUserInfo(String adminUserID) throws ServiceException;public UserInfoVO doGetOneAdminUserInfo(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public UserInfoBaseVO doGetOneUserInfo(String userName,String userPassWord, Integer type_User_Admin) throws ServiceException;public ArrayList doGetAllUserNameInfo(String userName) throws ServiceException;public boolean doDeleteOneRegisterUserInfo(String registerUserID) throws ServiceException;public boolean doDeleteOneRegisterUserInfo(UserInfoVO oneRegisterUserInfoVO) throws ServiceException;public boolean doDeleteOneAdminUserInfo(String adminUserID) throws ServiceException;public boolean doDeleteOneAdminUserInfo(UserInfoVO oneAdminUserInfoVO) throws ServiceException;public ArrayList doGetAllRegisterUserInfo() throws ServiceException;public ArrayList doGetSomeRegisterUserInfo(Map registerUserInfos) throws ServiceException;public ArrayList doGetAllAdminUserInfo() throws ServiceException;public ArrayList doGetSomeAdminUserInfo(Map adminUserInfos) throws ServiceException;}3、用户信息管理的接口UserInfoManageInterface的实现类(1)用户信息管理的接口UserInfoManageInterface的实现类------类名称为UserInfoManageImple,包名称为er(2)将产生出下面的状态(3)并在其中提供一个“UserInfoDAOServiceInterface userInfoDAOServiceImple=null;”的对象声明,同时为它提供set方法。

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统持久层中的DAO组件进行单元测试(第2部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统持久层中的DAO组件进行单元测试(第2部分)

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统持久层中的DAO组件进行单元测试(第2/3部分)8、添加对DAO组件GoodsInfoCRUDImple类进行测试的TestCase类(1)新增一个测试用例,类名称为TestGoodsInfoCRUDImple,包名称为com.px1987.webshop.testdao,基类为junit.framework.TestCase,被测试的类选择为com.px1987.webshop.dao.crud.GoodsInfoCRUDImple(2)进入到下一步,并选择我们需要进行测试的方法(3)将产生出下面的结果(4)编程该测试用例类中的各个测试方法package com.px1987.webshop.testdao; import junit.framework.*;import com.px1987.webshop.dao.crud.*;import com.px1987.webshop.dao.exception.DAOException;import java.util.*;import com.px1987.webshop.dao.pobject.*;public class TestGoodsInfoCRUDImple extends TestCase{private GoodsInfoCRUDInterface goodsInfoCRUDImple = null;public TestGoodsInfoCRUDImple(String arg0){super(arg0);}protected void setUp() throws Exception{super.setUp();goodsInfoCRUDImple=new GoodsInfoCRUDImple();}protected void tearDown() throws Exception{goodsInfoCRUDImple=null;super.tearDown();}public void testInsertOneGoodsInfo() throws DAOException{GoodsInfoPO oneGoodsInfoPO=new GoodsInfoPO();//不需要设置该值,可以由Hibernate自动来实现添加// oneGoodsInfoPO.setId(new Integer(1));oneGoodsInfoPO.setGoodsName("海尔电冰箱");oneGoodsInfoPO.setGoodsKind(1);oneGoodsInfoPO.setGoodsPrice(1500.50f);oneGoodsInfoPO.setOffPrice(0.8f);oneGoodsInfoPO.setHitNumber(1000);oneGoodsInfoPO.setBuyNumber(1200);oneGoodsInfoPO.setImageFile("../webResource/goodsImage/goods.jpg");oneGoodsInfoPO.setGoodsDescriptor("海尔新一代的电冰箱。

J2EE 课程设计实训项目——《蓝梦网上商城》——应用DWR框架实现对购物车信息无刷新页面的实时显示

J2EE 课程设计实训项目——《蓝梦网上商城》——应用DWR框架实现对购物车信息无刷新页面的实时显示

J2EE 课程设计实训项目——《蓝梦网上商城》——应用DWR框架实现对购物车信息无刷新页面的实时显示1.1.1对在线商品购买(购物车)功能的实现1、将CartInfoManageImple类中的有关购物车方面的各个方法远程化(1)在dwr.xml中添加下面的配置标签<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "/dwr//dwr20.dtd"><dwr><allow><create creator="spring" javascript="userInfoManageImple" ><param name="beanName" value="userInfoManageImple"/><include method="doCheckUserNameExist"/></create><create creator="none" javascript="onLineCounterBean" ><param name="class" value="com.px1987.webshop.control.bean.OnLineCounter"/><include method="getOnLine"/><include method="getOnLineMemberUserNumber"/><include method="getOnLineUserNameList"/></create><create creator="spring" javascript="goodsInfoManageImple" ><param name="beanName" value="goodsInfoManageImple"/><include method="doGetAllGoodsInfo"/><include method="doGetSomeBookInfo"/><include method="doGetSomeComputerInfo"/><include method="doGetSomeCommDeviceInfo"/><include method="doGetSomeClothInfo"/></create><create creator="spring" javascript="cartInfoManageImple" ><param name="beanName" value="cartInfoManageImple"/><include method="addGoodsToCartFromPage"/><include method="backGoodsFromCartFromPage"/><include method="listGoodsTotalCountInCartFromPage"/><include method="removeAllGoodsInCartFromPage"/></create><convert converter="bean"match="com.px1987.webshop.business.vobject.BookInfoVO"> <param name="include" value="id,goodsName,goodFactoryName,goodsDescriptor,goodsPrice,goodsKind,goodsProductT ime,onLibNumber,imageFile,authorName"/></convert><convert converter="bean"match="com.px1987.webshop.business.vobject.ClothInfoVO"> <param name="include" value="id,goodsName,goodFactoryName,goodsDescriptor,goodsPrice,goodsKind,goodsProductT ime,onLibNumber,imageFile,clothColor,clothMatieal,clothSize"/></convert><convert converter="bean"match="mDeviceInfoVO"> <param name="include" value="id,goodsName,goodFactoryName,goodsDescriptor,goodsPrice,goodsKind,goodsProductT ime,onLibNumber,imageFile,deviceModel,baseFunction"/></convert><convert converter="bean"match="puterInfoVO"> <param name="include" value="id,goodsName,goodFactoryName,goodsDescriptor,goodsPrice,goodsKind,goodsProductT ime,onLibNumber,imageFile,cpuName,memorySize,hdiskSize"/></convert><convert converter="bean"match="com.px1987.webshop.business.vobject.GoodsInfoVO"> <param name="include" value="id,goodsName,goodFactoryName,goodsDescriptor,goodsPrice,goodsKind,goodsProductT ime,onLibNumber,imageFile"/></convert></allow><signatures><![CDATA[import java.util.List;import com.px1987.webshop.control.bean.OnLineCounter;List<String> OnLineCounter.getOnLineUserNameList();import java.util.ArrayList;import com.px1987.webshop.business.vobject.BookInfoVO;import com.px1987.webshop.business.vobject.ClothInfoVO;import mDeviceInfoVO;import puterInfoVO;import com.px1987.webshop.business.vobject.GoodsInfoVO;import com.px1987.webshop.business.goods.GoodsInfoManageImple;ArrayList<GoodsInfoVO> GoodsInfoManageImple.doGetAllGoodsInfo();ArrayList<BookInfoVO>GoodsInfoManageImple.doGetSomeBookInfo(Map<String,String>);ArrayList<ComputerInfoVO>GoodsInfoManageImple.doGetSomeComputerInfo(Map<String,String> );ArrayList<CommDeviceInfoVO>GoodsInfoManageImple.doGetSomeCommDeviceInfo(Map<String,String> );ArrayList<ClothInfoVO>GoodsInfoManageImple.doGetSomeClothInfo(Map<String,String>);]]></signatures></dwr>(2)所应该注意的问题由于我们的业务组件是基于Spring实现的,因此注意定义的方式。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书杨教授大学堂精心创作的优秀程序员职业提升必读系列资料《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统测试计划说明书1.1.1 引言1、编写目的本测试计划书的目的是为了描述蓝梦网上商店系统项目所要完成的测试,包括测试背景、测试目的、风险分析、所需资源、任务安排和进度等。

本计划的读者对象为项目经理,软件测试工程师以及软件测试人员。

2、参考资料(1)J2EE项目实训Hibernate框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(2)J2EE项目实训Spring框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(3)J2EE项目实训UML及设计模式(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年5月(4)J2EE项目实训Struts框架技术(21世纪高等学校实用软件工程教育规划教材)杨少波编著清华大学出版社 2008 年10月(5)《JSP与数据库连接》刘瑞挺,高等教育出版社(6)《数据库原理与方法》郑若忠王鸿武,湖南科学技术出版社(7)《软件需求》(美) Karl E.Wiegers 著,刘伟琴刘洪涛译1.1.2 任务概述1、测试目标本测试计划的目标分为三个阶段,第一阶段测试本系统的各种功能的实现效果,分为管理员功能和用户购物功能两大部分;第二阶段测试本系统在各种平台下的兼容性;第三阶段测试系统的安全性和可扩展性。

本计划说明书主要针对第一阶段。

2、测试运行环境杨教授大学堂,版权所有,盗版必究。

1/9页杨教授大学堂精心创作的优秀程序员职业提升必读系列资料(1)硬件环境目前市场上出售的一般个人或商务电脑均可使用,机器配置要求如下:1)CPU: P3同类档次或更高档次以上。

2)内存: 256M以上内存。

J2EE 课程设计实训项目——《蓝梦网上商城》——实现Struts框架与Spring框架相互整合

J2EE 课程设计实训项目——《蓝梦网上商城》——实现Struts框架与Spring框架相互整合

J2EE 课程设计实训项目——《蓝梦网上商城》——实现Struts框架与Spring框架相互整合1.1.1实现Struts框架与Spring框架相互整合1、在src的目录下添加一个allAction IoC.xml文件(1)在该文件中主要放Struts中的各个Action类的IoC的Bean定义。

(2)下面以erInfoManageAction类为例加以说明<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "/dtd/spring-beans-2.0.dtd"><beans><bean name="/userInfoManage" scope="prototype"class="erInfoManageAction"> <property name="userInfoManageImple"><!-- 没有应用AOP Throws Advice或者应用了Spring中的“自动代理”功能时(本项目应用了自动代理)<ref bean="userInfoManageImple" />--><!-- 下面是应用ProxyFactoryBean来实现AOP Throws Advice时<ref bean="userInfoManageImpleProxy" />--><ref bean="userInfoManageImple" /></property></bean></beans>2、修改struts-config.xml配置文件以增加ContextLoaderPlugIn 的plugin的设置(1)plugin的设置<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"> <set-property property="contextConfigLocation"value="/WEB-INF/classes/webShopUserInfoIoC.xml,/WEB-INF/classes/allAction IoC.xml"/></plug-in>利用该plugin实现对我们Spring的各个IoC的配置文件进行定位。

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统概要设计说明书

《J2EE系统架构和程序设计》课程设计实训项目——蓝梦网上商店系统概要设计说明书

《J2EE系统架构和程序设计》课程设计实训项⽬——蓝梦⽹上商店系统概要设计说明书《J2EE系统架构和程序设计》课程设计实训项⽬——蓝梦⽹上商店系统概要设计说明书1.1.1编写⽬的将软件系统需求转换为未来系统的设计,逐步开发强壮的系统构架,并使设计适合于实施环境,为提⾼性能⽽进⾏设计和为程序开发步骤配置提供指导。

因此,本设计说明书作为《蓝梦⽹上商店系统》项⽬开发的依据和规范,并作为开发任务及⽬标依据和规范系统开发操作,《蓝梦⽹上商店系统》⽹站的开发内容及达到的各项功能及性能指标以此设计说明书为准。

本设计⽂档描述了整个系统的架构以及业务逻辑实现时应遵循的步骤,⽂档的预期读者主要包括:项⽬管理⼈员、系统设计⼈员与程序编写⼈员、测试⼈员、⽤户⼿册编写⼈员、客户、系统维护⼈员和项⽬评审⼈员等。

1.1.2系统总体设计1、系统主要的特⾊(1)系统基于J2EE架构设计将界⾯表⽰、业务务逻辑和数据层相对分离,使系统结构更加合理;采⽤成熟的J2EE 架构,使系统具有较好的维护性。

(2)采⽤中间件的负载平衡、动态伸缩等功能为关键业务建⽴了最佳的运⾏环境,为应⽤提供了充分的扩展余地。

(3)以Browser(浏览器)为核⼼的客户端程序实现了真正意义上的“零维护”,从⽽使业务软件的更新、发布和维护更为容易。

(4)系统的外部接⼝采⽤XML数据交换格式降低系统间偶合度,确保数据交换与具体应⽤平台⽆关。

(5)系统采⽤个性化的权限管理和界⾯显⽰具体的⽤户只看到整个系统的⼀部分,即只有⽤户具有操作权限的模块,对该⽤户才是可见的,不具有操作权限的部分是不可见,因此,每个⽤户只看到整个界⾯树的⼀个⼦集,系统菜单动态⽣成。

2、系统运⾏环境(1)软件环境(2)硬件环境(3)开发环境1)服务器软件环境2)服务器硬件环境3)开发机器软件环境4)开发机器硬件环境3、系统功能层次结构4、系统中所应⽤的关键技术与算法(1)本系统采⽤JSP+JavaBeans实现JSP 即Java Server Pages,它是Serverlet的直接扩展,JSP框架的⽬标是将应⽤逻辑同表⽰分离,它旨在允许⾮JA V A开发⼈员⽤下列⽅式设计JSP 页⾯:1)HTML标记。

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统控制层中的用户信息管理的Action程序类进行单元测试1.1.1对系统控制层中的各个Action程序类进行单元测试1、引用在控制层测试中所需要的各个*.jar包文件(1)将Strutstest和Junit所需要的*.jar包加入到本测试项目中(2)将J2EE Web技术中所需要的Servlet和JSP的*.jar包加入------因为,本测试用例所在的项目为Java项目1)servlet-api.jar和jsp-api.jar文件(在Tomcat中带有)2)commons-collections-2.1.1.jar包文件(在Struts的系统包中已经带有)2、在测试的Java项目中添加一个针对UserInfoManageAction类的TestCase类(1)新增加一个TestCase类(2)设置该TestCase的各个项目类名称为MockStrutsTestUserInfoManageAction,包名称为com.px1987.webshop.testcontrol,基类选择为servletunit.struts.MockStrutsTestCase。

被测试的类为erInfoManageAction。

(3)选择需要进行测试的各个方法(4)点击“完成”按钮,将产生出下面的状态5、编程该MockStrutsTestUserInfoManageAction测试用例类package com.px1987.webshop.testcontrol;import servletunit.struts.MockStrutsTestCase;import junit.framework.*;import java.io.*;import java.util.Date;import javax.servlet.http.HttpSession;public class MockStrutsTestUserInfoManageAction extends MockStrutsTestCase { public MockStrutsTestUserInfoManageAction(String arg0) {super(arg0);}protected void setUp() throws Exception{super.setUp();}protected void tearDown() throws Exception{super.tearDown();}public void testDoSuccessUserLogin(){/*下面的目录路径根据实际的状态,修改为对应的内容*/setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");//代表目前为登录状态addRequestParameter("login_GetPassWord_ActionType","1");actionPerform();verifyForward("userLoginSuccess");}public void testDoFailureUserLogin(){/*下面的目录路径根据实际的状态,修改为对应的内容*/setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");//将密码设置为错误的数据addRequestParameter("userPassWord","abcd");//代表目前为登录状态addRequestParameter("login_GetPassWord_ActionType","1");actionPerform();verifyForward("loginFailure");}public void testDoSuccessGetPassWord() {// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");//代表目前为找回密码状态addRequestParameter("login_GetPassWord_ActionType","2");actionPerform();verifyForward("getPassWordSuccess");}public void testDoFailureGetPassWord(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doLogin_GetPassWord");//代表目前为登录和找回密码的表单状态addRequestParameter("menuID","2");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("passWordAsk","Who Are You?");//将答案设置为错误的数据addRequestParameter("passWordAnswer","1234");//代表目前为找回密码状态addRequestParameter("login_GetPassWord_ActionType","2");actionPerform();verifyForward("getPassWordFailure");}public void testDoRegister() {// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");addRequestParameter("actionType","doRegister");//代表目前为注册的表单状态addRequestParameter("menuID","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("confirmPassWord","12345678");addRequestParameter("aliaoName","网上张飞");addRequestParameter("type_User_Admin","1");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");addRequestParameter("userMail","trainict@"); addRequestParameter("userImage","../webResource/PersonImage/Chang.gif");addRequestParameter("userSex","1");addRequestParameter("userBirthDay","2007-01-25");addRequestParameter("userComeFrom","北京");addRequestParameter("userResume","我是网络飞人");addRequestParameter("userType","1");addRequestParameter("userQQCode","QQ1234567890");addRequestParameter("userICQCode","ICQ1234567890");addRequestParameter("userMSNCode","MSN1234567890");addRequestParameter("userSign","12345678900");addRequestParameter("emailVisible",new Boolean(true).toString());addRequestParameter("acceptAdvise",new Boolean(true).toString());actionPerform();verifyForward("registerSuccess");}public void testDoUpdateUserPassWord(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");//代表目前为修改密码的表单状态addRequestParameter("menuID","3");addRequestParameter("actionType","doUpdateUserPassWord");addRequestParameter("type_User_Admin","1");addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("userNewPassWord","1234");actionPerform();verifyForward("updateUserPassWordSuccess");}public void testDoUpdateUserInfo(){// 下面的目录路径根据实际的状态,修改为对应的内容setContextDirectory(new File("D:/AllInOneWebShop/WebShopProject/WebRoot"));setConfigFile("/WEB-INF/struts-config.xml");setRequestPathInfo("/userInfoManage");HttpSession session=request.getSession();session.setAttribute("verifyCode","1234");addRequestParameter("verifyCodeDigit","1234");//代表目前为修改用户的信息的表单状态addRequestParameter("menuID","1");addRequestParameter("actionType","doUpdateUserInfo");//应该根据数据库表中的实际的数据值来决定String registerUserId="402880681071d7ed011071d7f24b0002";addRequestParameter("userID",registerUserId);addRequestParameter("userName","张三");addRequestParameter("userPassWord","12345678");addRequestParameter("confirmPassWord","12345678");addRequestParameter("aliaoName","网上张飞");addRequestParameter("type_User_Admin","1");addRequestParameter("passWordAsk","Who Are You?");addRequestParameter("passWordAnswer","zhang");addRequestParameter("userMail","trainict@");addRequestParameter("userImage","../webResource/PersonImage/Chang.gif");addRequestParameter("userSex","1");addRequestParameter("userBirthDay","2007-01-25");addRequestParameter("userComeFrom","北京");addRequestParameter("userResume","我是网络飞人");addRequestParameter("userType","1");addRequestParameter("userQQCode","QQ1234567890");addRequestParameter("userICQCode","ICQ1234567890");addRequestParameter("userMSNCode","MSN1234567890");addRequestParameter("userSign","12345678900");addRequestParameter("emailVisible",new Boolean(true).toString());addRequestParameter("acceptAdvise",new Boolean(true).toString());actionPerform();verifyForward("updateUserInfoSuccess");}}6、执行该MockStrutsTestUserInfoManageAction测试用例类(1)执行该测试用例类杨教授大学堂精心创作的优秀程序员职业提升必读系列资料(2)将产生出下面的结果杨教授大学堂,版权所有,盗版必究。

J2EE 课程设计实训项目——《蓝梦网上商城》——应用J2EE Listener监听器组件显示在线用户总数

J2EE 课程设计实训项目——《蓝梦网上商城》——应用J2EE Listener监听器组件显示在线用户总数

J2EE 课程设计实训项目——《蓝梦网上商城》——应用J2EE Listener 监听器组件显示在线用户总数1.1.1应用J2EE Listener组件显示在线用户数1、添加一个在线用户计数的组件(1)类名称为OnLineCounter,包名称为com.px1987.webshop.control.bean(2)编程该OnLineCounter组件package com.px1987.webshop.control.bean;import java.util.*;import erInfoVO;import com.px1987.webshop.control.listener.CounterOnLineVisitorListener;public class OnLineCounter{private static int onLine = 0;public static int getOnLine(){return onLine;}public static void addOneUser(){onLine++;}public static void reduceOneUser(){onLine--;}public static List getOnLineUserNameList(){Iterator onLineUserList=CounterOnLineVisitorListener.getOnLineUserList().iterator();List onLineUserNameList=new ArrayList();while(onLineUserList.hasNext()){UserInfoVO oneLoginUserInfoVO=(UserInfoVO)onLineUserList.next();onLineUserNameList.add(oneLoginUserInfoVO.getUserName());}return onLineUserNameList;}public static int getOnLineMemberUserNumber(){return CounterOnLineVisitorListener.getOnLineUserList().size();}}2、添加CounterOnLineVisitorListener监听器组件(1)类名称为CounterOnLineVisitorListener,包名称为com.px1987.webshop.control.listener,并且实现javax.servlet.http.HttpSessionListener和HttpSessionAttributeListener等接口(2)部署该CounterOnLineVisitorListener监听器组件<listener><listener-class>com.px1987.webshop.control.listener.CounterOnLineVisitorListener </listener-class></listener>(3)编程该Listener监听器组件package com.px1987.webshop.control.listener;import javax.servlet.http.HttpSessionAttributeListener;import javax.servlet.http.HttpSessionBindingEvent;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;import com.px1987.webshop.control.bean.OnLineCounter;import erInfoVO;import java.util.*;public class CounterOnLineVisitorListener implementsHttpSessionAttributeListener, HttpSessionListener{private static List onLineUserList=new ArrayList();public void sessionCreated(HttpSessionEvent se){OnLineCounter.addOneUser();}public void sessionDestroyed(HttpSessionEvent se){OnLineCounter.reduceOneUser();}public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent){//识别该用户是否已经登录if(httpSessionBindingEvent.getName().equals("oneUserInfoVO")){UserInfoVO nowLoginUserInfo=(UserInfoVO)httpSessionBindingEvent.getValue();onLineUserList.add(nowLoginUserInfo);}}public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent){if(httpSessionBindingEvent.getName().equals("oneUserInfoVO")){UserInfoVO nowLoginUserInfo=(UserInfoVO)httpSessionBindingEvent.getValue();onLineUserList.remove(nowLoginUserInfo);}}public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent){}public static List getOnLineUserList(){return onLineUserList;}}3、添加对Cookie进行操作的JavaBean组件(1)类名称为ReadWriteCookie,包名称为com.px1987.webshop.control.bean(2)编程该组件package com.px1987.webshop.control.bean;import javax.servlet.*;import javax.servlet.jsp.*;import javax.servlet.http.*;import java.util.*;import com.px1987.webshop.business.vobject.*;public class ReadWriteCookie {private PageContext pageContext=null;Cookie lastAccessCookie=null;HttpServletRequest request=null;HttpServletResponse response=null;HttpSession session=null;ServletContext application=null;String nowDateString=null;UserInfoBaseVO oneUserInfoVO=null;String lastAccessDateString=null;String nowBrowseingUserName=null;String onLineGuestCounter="0";public ReadWriteCookie(){}public ReadWriteCookie(PageContext pageContext) {this.pageContext=pageContext;request=(HttpServletRequest)pageContext.getRequest();response=(HttpServletResponse)pageContext.getResponse();session=request.getSession();application=pageContext.getServletContext();}public void operateCookie(){Date nowDate=new Date();nowDateString=nowDate.toLocaleString();//取得Cookie资料(因为在Cookie中可以存储多个信息)Cookie[] cookies = request.getCookies();if(cookies==null){//建立Cookie变量lastAccessCookie = new Cookie("lastAccessDate", nowDateString);//设定Cookie在用户机器硬盘上的存活期为1年。

J2EE 课程设计实训项目——《蓝梦网上商城》——建立系统中的各个数据库表之间关联关系

J2EE 课程设计实训项目——《蓝梦网上商城》——建立系统中的各个数据库表之间关联关系

J2EE 课程设计实训项目——《蓝梦网上商城》——建立系统中的各个数据库表之间关联关系
1.1.1在SQLServer2000中建立各个数据库表之间关系的过程
1、在我们的数据库的“关系图”节点上右击,然后选择“新建数据库关系图”
2、进入关系图的创建向导
3、选择需要放到关系图中的各个数据库表
4、点击“完成”按钮,将前面的各个数据库表放到关系图中
5、根据我们的数据库表之间的关系,分别对两各数据库之间进行关系的设定(1)右击我们的源数据库表,并且选择“关系”子菜单项目
(2)选择我们的“主/外键”
(3)依此方法,再对其它的数据库表同样建立出关系
(4)依此方法,再对其它的数据库表同样建立出关系
(5)依此方法,再对其它的数据库表同样建立出关系
(6)最后为下面的关系状态图
杨教授大学堂精心创作的优秀程序员职业提升必读系列资料
杨教授大学堂,版权所有,盗版必究。

11/11页。

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试

J2EE 课程设计实训项目——《蓝梦网上商城》——对系统中的用户信息业务处理功能组件进行单元测试1.1.1对系统中的用户信息业务处理功能组件进行单元测试1、在测试项目中引入与Spring相关的*.jar包文件(1)引入与Spring相关的*.jar包文件(log4j-1.2.14.jar、spring.jar和commons-logging.jar)(2)实现的过程如下(3)注意:log4j-1.2.14.jar和commons-logging.jar已经在前面添加过,在此可以不再需要重复。

2、添加log4j的属性配置文件(1)新建log4j.properties文件(2)log4j.properties文件的内容如下# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.log4j.rootLogger=INFO, stdout, logfilelog4j.appender.stdout=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - <%m>%nlog4j.appender.logfile=org.apache.log4j.RollingFileAppenderlog4j.appender.logfile.File=mylog.loglog4j.appender.logfile.MaxFileSize=512KB# Keep three backup files.log4j.appender.logfile.MaxBackupIndex=3# Pattern to output: date priority [category] - messageyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d %p [%c] - %m%n3、针对UserInfoManageImple类提供对应的测试用例类(1)添加测试用例类(2)设置该测试用例的各个名称类名称为TestUserInfoManageImple,包名称为com.px1987.webshop.testbusiness,基类为junit.framework.TestCase,被测试的类选择为erInfoManageImple(3)选择我们业务组件类中的各个被测试方法(4)将产生出下面的状态4、编程该TestUserInfoManageImple类(1)引入与ApplicationContext相关的各个包import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;(2)在setUp方法中获得我们的被测试类的对象protected void setUp() throws Exception{super.setUp();//根据实际来决定String springXMLPath="E:/NetShopProject/SpringBusiness/webShopUserInfoIoC.xml";ApplicationContext applicationContext =new FileSystemXmlApplicationContext(springXMLPath);userInfoManageImple=(UserInfoManageInterface) applicationContext.getBean("userInfoManageImple");}(3)编程各个测试方法---如下面的testDoUserLogin方法public void testDoUserLogin() throws Exception{String userName="张三"; //根据实际数据库表中的数据来决定String userPassWord="1234"; //根据实际数据库表中的数据来决定int type_User_Admin=1; //表示现在是前台用户在登录UserInfoVO oneLoginUserInfo=new UserInfoVO();oneLoginUserInfo.setUserName(userName);oneLoginUserInfo.setUserPassWord(userPassWord);oneLoginUserInfo.setType_User_Admin(type_User_Admin);boolean actualReturn=userInfoManageImple.doUserLogin(oneLoginUserInfo);this.assertTrue(actualReturn);}(4)最后的代码如下package com.px1987.webshop.testbusiness;import java.util.*;import junit.framework.*;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;import er.*;import com.px1987.webshop.business.vobject.*;import com.px1987.webshop.service.*;public class TestUserInfoManageImple extends TestCase{UserInfoManageInterface userInfoManageImple=null;public TestUserInfoManageImple(String arg0) {super(arg0);}protected void setUp() throws Exception{super.setUp();//根据实际来决定String springXMLPath="D:/ WebShopProject/WebRoot/WEB-INF/classes/webShopUserInfoIoC.xml";ApplicationContext applicationContext =new FileSystemXmlApplicationContext(springXMLPath);/* 没有应用AOP Throws Advice或者应用了Spring中的“自动代理”功能时* userInfoManageImple=(UserInfoManageInterface)applicationContext.getBean("userInfoManageImple");*//** 下面是应用ProxyFactoryBean来实现AOP Throws Advice时* userInfoManageImple=(UserInfoManageInterface) applicationContext.getBean("userInfoManageImpleProxy");*/userInfoManageImple=(UserInfoManageInterface)applicationContext.getBean("userInfoManageImple");}protected void tearDown() throws Exception {userInfoManageImple=null;super.tearDown();}public void testDoUserLogin() throws ServiceException{String userName="张三"; //根据实际数据库表中的数据来决定String userPassWord="1234"; //根据实际数据库表中的数据来决定int type_User_Admin=1; //表示现在是前台用户在登录UserInfoVO oneLoginUserInfo=new UserInfoVO();oneLoginUserInfo.setUserName(userName);oneLoginUserInfo.setUserPassWord(userPassWord);oneLoginUserInfo.setType_User_Admin(new Integer(type_User_Admin));boolean actualReturn=userInfoManageImple.doUserLogin(oneLoginUserInfo);this.assertTrue(actualReturn);}public void testDoGetOneUserInfo() throws ServiceException{UserInfoBaseVO oneUserInfoBaseVO=null;int type_User_Admin=1;String userName="张三";String userPassWord="1234";oneUserInfoBaseVO=userInfoManageImple.doGetOneUserInfo(userName,userPassWord, type_User_Admin);this.assertNotNull(oneUserInfoBaseVO);String returnUserName=oneUserInfoBaseVO.getUserName();this.assertNotNull(returnUserName);}public void testDoUserRegister() throws ServiceException{UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setUserName("张三");oneRegisterUserInfoVO.setUserPassWord("1234");oneRegisterUserInfoVO.setUserType(new Integer(1));oneRegisterUserInfoVO.setAliaoName("网上张飞");oneRegisterUserInfoVO.setPassWordAsk("Who Are You?");oneRegisterUserInfoVO.setUserImage("zhang.gif");oneRegisterUserInfoVO.setRegisterTime(new Date().toLocaleString());oneRegisterUserInfoVO.setPassWordAnswer("zhang");oneRegisterUserInfoVO.setUserMail("trainict@");oneRegisterUserInfoVO.setUserSex(1);oneRegisterUserInfoVO.setUserBirthDay("2007-01-25");oneRegisterUserInfoVO.setUserComeFrom("北京");oneRegisterUserInfoVO.setUserResume("我是网络飞人");oneRegisterUserInfoVO.addOneContactMethod("userQQCode","QQ1234567890");oneRegisterUserInfoVO.addOneContactMethod("userICQCode","ICQ1234567890");oneRegisterUserInfoVO.addOneContactMethod("userMSNCode","MSN1234567890");oneRegisterUserInfoVO.setUserSign("12345678900");oneRegisterUserInfoVO.setEmailVisible(1);oneRegisterUserInfoVO.setAcceptAdvise(1);//代表前台用户在进行注册oneRegisterUserInfoVO.setType_User_Admin(new Integer(1));boolean actualReturn=userInfoManageImple.doUserRegister(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}public void testDoCheckUserNameExist() throws ServiceException{String userName="张三"; //根据实际选择数据int type_User_Admin=1;boolean actualReturn=userInfoManageImple.doCheckUserNameExist(userName,type_User_Admin);this.assertTrue(actualReturn);}/*public void testDoDeleteOneRegisterUserInfoString() throws ServiceException{ String registerUserID="4028806810723e1a0110723e1f660002"; //根据实际选择数据boolean actualReturn=userInfoManageImple.doDeleteOneRegisterUserInfo(registerUserID);this.assertTrue(actualReturn);}public void testDoDeleteOneRegisterUserInfoUserInfoVO() throws ServiceException{ String registerUserID="40288068107200f101107200f91a0003"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setId(registerUserID);boolean actualReturn=userInfoManageImple.doDeleteOneRegisterUserInfo(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}public void testDoDeleteOneAdminUserInfoString() throws ServiceException { String adminUserID="4028806810723e1a0110723e1eca0001"; //根据实际选择数据boolean actualReturn=userInfoManageImple.doDeleteOneAdminUserInfo(adminUserID);this.assertTrue(actualReturn);}public void testDoDeleteOneAdminUserInfoUserInfoVO() throws ServiceException{ String adminUserID="40288068107200f101107200f8eb0002"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setId(adminUserID);boolean actualReturn=userInfoManageImple.doDeleteOneAdminUserInfo(adminUserID);this.assertTrue(actualReturn);}*/public void testDoGetAllAdminUserInfo() throws ServiceException{ArrayList allAdminUserInfos=userInfoManageImple.doGetAllAdminUserInfo();this.assertNotNull(allAdminUserInfos);Iterator allItem=allAdminUserInfos.iterator();while(allItem.hasNext()){UserInfoVO oneAdminUserInfoVO=(UserInfoVO)allItem.next();this.assertNotNull(oneAdminUserInfoVO);String adminUserName=oneAdminUserInfoVO.getUserName();this.assertNotNull(adminUserName);}}public void testDoGetAllRegisterUserInfo() throws ServiceException{ArrayList allRegisterUserInfos=userInfoManageImple.doGetAllRegisterUserInfo();this.assertNotNull(allRegisterUserInfos);Iterator allItem=allRegisterUserInfos.iterator();while(allItem.hasNext()){UserInfoVO oneRegisterUserInfoVO=(UserInfoVO)allItem.next();this.assertNotNull(oneRegisterUserInfoVO);String adminUserName=oneRegisterUserInfoVO.getUserName();this.assertNotNull(adminUserName);}}public void testDoGetAllUserNameInfo() throws ServiceException{String userName="张";String oneUserNameReturned=null;ArrayList allUserNameInfo=userInfoManageImple.doGetAllUserNameInfo(userName);this.assertNotNull(allUserNameInfo);Iterator allItem=allUserNameInfo.iterator();while(allItem.hasNext()){oneUserNameReturned=(String)allItem.next();this.assertNotNull(oneUserNameReturned);}}public void testDoGetOneRegisterUserInfoString() throws ServiceException{ String registerUserID="402880681071d7ed011071d7f24b0002"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVOReturned=null;oneRegisterUserInfoVOReturned=userInfoManageImple.doGetOneRegisterUserInfo(registerUserID);this.assertNotNull(oneRegisterUserInfoVOReturned);String oneUserNameReturned=oneRegisterUserInfoVOReturned.getUserName();this.assertNotNull(oneUserNameReturned);}public void testDoGetOneRegisterUserInfoUserInfoVO() throws ServiceException{ String registerUserID="402880681071d7ed011071d7f24b0002"; //根据实际选择数据UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setId(registerUserID);UserInfoVO oneRegisterUserInfoVOReturned=null;oneRegisterUserInfoVOReturned=userInfoManageImple.doGetOneRegisterUserInfo(oneRegisterUserInfoVO);}public void testDoGetOneAdminUserInfoString() throws ServiceException{ String adminUserID="402880681071d7ed011071d7f20d0001"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=null;oneAdminUserInfoVO=userInfoManageImple.doGetOneAdminUserInfo(adminUserID);this.assertNotNull(oneAdminUserInfoVO);String oneUserNameReturned=oneAdminUserInfoVO.getUserName();this.assertNotNull(oneUserNameReturned);}public void testDoGetOneAdminUserInfoUserInfoVO() throws ServiceException{ String adminUserID="402880681071d7ed011071d7f20d0001"; //根据实际选择数据UserInfoVO oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setId(adminUserID);UserInfoVO oneAdminUserInfoVOReturned=null;oneAdminUserInfoVOReturned=userInfoManageImple.doGetOneAdminUserInfo(oneAdminUserInfoVO);}public void testDoGetOneRegisterUserPassWord() throws ServiceException{ UserInfoVO oneRegisterUserInfoVO=null;String userName="张三";String passWordAsk="Who Are You?";String passWordAnswer="zhang";oneRegisterUserInfoVO=new UserInfoVO();oneRegisterUserInfoVO.setUserName(userName);oneRegisterUserInfoVO.setPassWordAsk(passWordAsk);oneRegisterUserInfoVO.setPassWordAnswer(passWordAnswer);String userPassWordReturned=userInfoManageImple.doGetOneRegisterUserPassWord(oneRegisterUserInfoVO);this.assertNotNull(userPassWordReturned);}public void testDoGetOneAdminUserPassWord() throws ServiceException{ UserInfoVO oneAdminUserInfoVO=null;String userName="张三";String passWordAsk="Who Are You?";String passWordAnswer="zhang";oneAdminUserInfoVO=new UserInfoVO();oneAdminUserInfoVO.setUserName(userName);oneAdminUserInfoVO.setPassWordAsk(passWordAsk);oneAdminUserInfoVO.setPassWordAnswer(passWordAnswer);String userPassWordReturned=userInfoManageImple.doGetOneAdminUserPassWord(oneAdminUserInfoVO);this.assertNotNull(userPassWordReturned);}public void testDoGetSomeAdminUserInfo() throws ServiceException{}public void testDoGetSomeRegisterUserInfo() throws ServiceException{}public void testDoUpdateOneUserInfo() throws ServiceException{UserInfoVO oneRegisterUserInfoVO=new UserInfoVO();//应该根据数据库表中的实际的数据值来决定String registerUserId="402880681071d7ed011071d7f24b0002";//设置需要修改的某个用户的ID以定位其记录oneRegisterUserInfoVO.setId(registerUserId);oneRegisterUserInfoVO.setUserName("张三");//本测试的数据只是对原来的数据改变了此值oneRegisterUserInfoVO.setUserPassWord("12345678"); oneRegisterUserInfoVO.setUserType(new Integer(1)); oneRegisterUserInfoVO.setAliaoName("网上张飞"); oneRegisterUserInfoVO.setPassWordAsk("Who Are You?"); oneRegisterUserInfoVO.setUserImage("zhang.gif"); oneRegisterUserInfoVO.setRegisterTime(new Date().toLocaleString()); oneRegisterUserInfoVO.setPassWordAnswer("zhang"); oneRegisterUserInfoVO.setUserMail("trainict@"); oneRegisterUserInfoVO.setUserSex(1);oneRegisterUserInfoVO.setUserBirthDay("2007-01-25"); oneRegisterUserInfoVO.setUserComeFrom("北京"); oneRegisterUserInfoVO.setUserResume("我是网络飞人"); oneRegisterUserInfoVO.setUserSign("12345678900"); oneRegisterUserInfoVO.setEmailVisible(1);oneRegisterUserInfoVO.setAcceptAdvise(1);Map newContactMethod = new HashMap(); //可以在此改变用户的联系方式newContactMethod.put("userQQCode","QQ1234567890"); newContactMethod.put("userICQCode","ICQ1234567890"); newContactMethod.put("userMSNCode","MSN1234567890"); oneRegisterUserInfoVO.setContactMethod(newContactMethod);int type_User_Admin=1;oneRegisterUserInfoVO.setType_User_Admin(type_User_Admin);boolean actualReturn=userInfoManageImple.doUpdateOneUserInfo(oneRegisterUserInfoVO);this.assertTrue(actualReturn);}}5、执行该测试用例(1)右击我们的的测试用例类,并选择运行方式为JUnit测试用例。

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统的表示层JSP页面中应用DWR框架相关的技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统的表示层JSP页面中应用DWR框架相关的技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在系统的表示层JSP 页面中应用DWR框架相关的技术1.1.1在系统的表示层JSP页面中应用DWR框架相关的技术1、添加DWR的系统包(1)导入DWR框架相关的系统程序包文件(2)定位到我们的系统包所在的目录处(3)最后将产生出下面的状态2、在web.xml中部署DWR的Servlet(本项目采用DWR2.0系统库)DWR 2.0版最后的配置内容如下<servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> <init-param><param-name>logLevel</param-name><param-value>DEBUG</param-value></init-param><init-param><param-name>config</param-name><param-value>/WEB-INF/dwr.xml</param-value></init-param><init-param><param-name>debug</param-name><param-value>true</param-value></init-param><init-param ><param-name>classes</param-name><param-value>ng.Object</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>3、定位Spring(使DWR能够找到它)的IoC的 XML配置文件由于本项目中的业务组件是在 Spring IoC容器中创建的,因此需要将Spring与DWR 进行整合使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J2EE 课程设计实训项目——《蓝梦网上商城》——系统UML包图的设计“蓝梦网上商城”的UML包图的设计
1、UML中的包图(Package Diagram)
(1)包图是保持系统整体结构简明、清晰的重要工具
通过给出包可以列出各个包之间的关系。

包图由包和包之间的联系构成,它是维护和控制系统总体结构的重要建模工具。

(2)在Rose中包图是通过类图来体现的
并且注意如果某个包为其它包的子包,则应该将子包放入到父包的里面。

2、本系统中的包图中表示层的各个组件所在的包
(1)新建某个包
(2)输入包的名称
(3)在该包中再新建其各个子包
本系统分为四个----- JSP表示组件包、ViewHelp表示逻辑JavaBean组件包、ViewHelp 表示逻辑标签组件包。

3、本系统中的包图中的控制层的各个组件所在的包
(1)新建某个包
(2)输入包的名称
(3)在该包中再新建其各个子包
本系统分为四个-----前端控制器组件包、后端控制器组件包、过滤器组件包、监听器组件包
4、本系统中的包图中的业务层的各个组件所在的包
(1)新建某个包
(2)输入包的名称
(3)在该包中再新建其各个子包
本系统分为四个-----用户信息管理包、商品信息管理包、购物车信息管理包、订单信息管理包
5、本系统中的包图中的数据访问层的各个组件所在的包
(1)新建某个包
(2)输入包的名称
(3)在该包中再新建其各个子包
本系统分为四个----- DAO服务组件包、DAO CRUD组件包、数据连接组件包、持久实体组件包
6、本系统中的包图设计
由于在Rose中包图是通过类图来体现的,并且注意如果某个包为其它包的子包,则应该将子包放入到父包的里面,因此新建一个类图。

(1)新建一个类图
(2)并且输入名称:蓝梦网上商城前台服务的UML包图
(3)在该包图中分别添加前面的各个包及对应的子包(直接拖入)
(4)设置各个子包之间的关联关系(在父包之外进行)
注意:也可以是双向关联。

(5)最后为下面的状态
(6)在各个父包加入对应的子包-----再将这些子包拖入到对应的父包中以体现包含关系
(7)最后为下面的状态
(8)再设置各个父包之间的关联关系。

相关文档
最新文档