J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统表示层中的各个JSP页面
《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 课程设计实训项目——《蓝梦网上商城》——在项目中应用Hibernate框架中的二级缓存管理技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在项目中应用Hibernate框架中的二级缓存管理技术1.1.1应用Hibernate中的二级缓存管理技术1、在DAO项目中启用Hibernate中的二级缓存技术------采用主流的EHCache框架(1)需要在hibernate.cfg.xml中增加一个属性项目(以EHCache为例)<property name ="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>1)缓存策略提供商(Cache Providers)的列表2)Hibernate在启动时,将会出现下面的状态提示(2)另外还需要针对Cache实现本身进行配置例如EHCache配置文件,ehcache.xml。
它是Hibernate 的缓存配置文件,和hibernate.cfg.xml 放在一起的(默认的位置在class-path,可以放到我们的src目录下)。
我们可以从Hibernate的系统包目录中的etc目录中获得其模板配置文件。
利用它,这对以后我们在大量数据操作提供一个很好优化方案。
下面的path为Java中的属性项目,如果设置为1)user.home - User's home directory2)user.dir - User's current working directory3)java.io.tmpdir - Default temp file path -->下面为某个示例。
<?xml version="1.0" encoding="UTF-8" ?><ehcache><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="1000" //cache中最大允许保存的数据对象数量eternal="false" //缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期timeToIdleSeconds="120" //缓存数据钝化时间(设置对象在它过期之前的空闲时间秒) timeToLiveSeconds="120" //缓存数据的生存时间(设置对象在它过期之前的生存时间秒) overflowToDisk="true" />//内存不足时,是否启用磁盘缓存(把缓存中的部分数据保存在硬盘上的临时文件中)</ehcache>(3)在应用时所应该注意的问题1)每个需要缓存的class都要这样配置如果我们没有配置,hibernate会在启动的时候警告我们,然后使用defaultCache的配置,这样多个class会共享一个配置。
J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》客户信息在线即时显示的功能实现

J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》客户信息在线即时显示的功能实现1.1.1对查询结果的数据实现在线“实时”显示1、在线“实时”显示数据的实现原理(1)利用事件指向onmouseover和onmouseout事件(2)在事件处理函数中动态显示或者隐藏某个<div>标签(区域)2、动态添加或者修改<div>标签内的数据(1)数据已经动态获得(2)利用AJAX技术动态(异步)获得服务器返回的数据3、订单详细信息4、与订单相关的客户信息——必须要应用AJAX技术5、与订单相关的员工信息——必须要应用AJAX技术6、产品详细信息(1)产品的详细信息显示(2)产品名称和型号的鼠标指向事件7、合同详细信息8、与合同相关的客户信息——必须要应用AJAX技术9、客户详细信息1.1.2请求状态即时显示的功能实现1、请求状态即时显示在本项目中的具体应用——在请求的响应时间比较慢的时候,及时状态提示(1)表单请求(如查询)(2)翻页请求2、实现的基本原理(1)在提交过程中动态显示一个GIF动画图(2)将该GIF动画图(<img>)移动到目标显示位置(如屏幕的正中)3、实现的方法(1)利用<div>包装<img>标签<div id="popUpLoadStatusImageDivTagID"><img src="../images/preload.gif" /></div> (2)在CSS样单表中设置该图片的显示风格#popUpLoadStatusImageDivTagID{position:absolute;top:130px;z-index:999;display:none;width:100px;height:50px;background:#FFFFFF;}#popUpLoadStatusImageDivTagID img{width:100%;height:100%;}(3)在JavaScript脚本代码中动态显示和移动它function createLoadStatusImageCSSFilter() {var popUpLoadStatusImageDivTagInstance=document.getElementById("popUpLoadStatusImageDivTagID");popUpLoadStatusImageDivTagInstance.style.display="inline";popUpLoadStatusImageDivTagInstance.style.left =(parseInt(document.body.scrollWidth) - 200) / 2 + "px";document.body.style.filter = "alpha(opacity=20)"; //为IE提供的滤镜document.body.style.opacity = "0.20"; //为FireFox提供的滤镜}1.1.3兼容不同版本和厂商浏览器的JavaScript编程实现方法1、对于不同版本和厂商的浏览器应用不同的CSS和页面文件<script language="javascript" type="text/javascript">function switchRightDefaultContent(){var browserType=erAgent;var rightContentFrameObj=document.getElementById("rightContentFrame");if(browserType.indexOf("MSIE 6.0")> -1){rightContentFrameObj.src="rightDefaultContent_IE6.html";}else{rightContentFrameObj.src="rightDefaultContent.html";}}</script>可以参考saleManage目录内的index.jsp页面内对不同版本浏览器应用不同的文件的代码示例,该方法一般应用于差别比较大的场合。
J2EE 课程设计实训项目——《蓝梦网上商城》——实现横跨多个Hibernate SessionFacotry的分布式事务

J2EE 课程设计实训项目——《蓝梦网上商城》——实现横跨多个Hibernate SessionFacotry的分布式事务1.1.1实现横跨多个Hibernate SessionFacotry的分布式事务1、实现的原理只需简单地将JtaTransactionManager 同多个LocalSessionFactoryBean 的定义结合起来作为事务策略。
然后在我们的每一个DAO中通过bean属性得到各自的SessionFactory 引用。
2、配置示例<beans><bean id="sqlServerDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/sqlServerDataSource"/></bean><bean id="oracleDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/oracleDataSource"/></bean><bean id="sqlServerSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="sqlServerDataSource"/><property name="mappingResources"><list><value>product.hbm.xml</value></list></property><property name="hibernateProperties"><props><propkey="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop> <prop key="hibernate.show_sql">true</prop></props></property></bean><bean id="oracleSessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="oracleDataSource "/><property name="mappingResources"><list><value>inventory.hbm.xml</value></list></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop><prop key="hibernate.show_sql">true</prop></props></property></bean><bean id="myTxManager"class="org.springframework.transaction.jta.JtaTransactionManager"/><bean id="myProductDao" class="com.px1987.product.ProductDaoImpl"><property name="sessionFactory" ref="sqlServerSessionFactory"/></bean><bean id="myInventoryDao" class=" com.px1987.product.InventoryDaoImpl"><property name="sessionFactory" ref="oracleSessionFactory"/></bean><bean id="myProductService"class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager" ref="myTxManager"/><property name="target"><bean class=" com.px1987.product.ProductServiceImpl"><property name="productDao" ref="myProductDao"/><property name="inventoryDao" ref="myInventoryDao"/></bean></property><property name="transactionAttributes"><props><prop key="increasePrice*">PROPAGATION_REQUIRED</prop><prop key="someOtherBusinessMethod">PROPAGATION_REQUIRES_NEW</prop> <prop key="*">PROPAGATION_SUPPORTS,readOnly</prop></props></property></bean></beans>1.1.2对应用Spring框架的声明式事务组件进行单元测试1、对上面的重构的结果进行测试(1)执行业务层中的测试套件类(2)将出现下面的结果(3)表明整合是成功的。
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 课程设计实训项目——《蓝梦网上商城》——在项目中应用Hibernate框架中的查询缓存管理技术

J2EE 课程设计实训项目——《蓝梦网上商城》——在项目中应用Hibernate框架中的查询缓存管理技术1.1.1在项目中应用Hibernate框架中的查询缓存管理技术1、启用查询缓存-------查询缓存在Hibernate同样是可配置的,默认是关闭的(1)启用查询缓存可以通过在hibernate.cfg.xml文件中添加e_ query_cache为true来打开查询缓存------查询缓存在数据发生任何变化的情况下都会被自动的清空。
<property name="e_query_cache"> true </property>该设置将会创建两个缓存区域:1)一个用于保存查询结果集(org.hibernate.cache.StandardQueryCache);2)另一个则用于保存最近查询的一系列表的时间戳(org.hibernate.cache.UpdateTimestampsCache)。
(2)请注意在查询缓存中,它并不缓存结果集中所包含的实体的确切状态;它只缓存这些实体的标识符属性的值、以及各值类型的结果。
所以查询缓存通常会和二级缓存一起使用。
(3)本项目中的查询缓存的配置如下<?xml version='1.0' encoding='gb2312'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="dialect">org.hibernate.dialect.SQLServerDialect</property><property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> <property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433/NetShopDB</property> <property name="ername">sa</property><property name="connection.password">1234</property><property name="show_sql">true</property><!-- 将Hibernate发送给数据库的sql显示出来--><property name="e_query_cache"> true </property><property name = "hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name=".hibernate.cache">debug</property><mapping resource="UserInfoPO.hbm.xml" /><mapping resource="AdminUserInfoPO.hbm.xml" /><mapping resource="GoodsInfoPO.hbm.xml" /><mapping resource="OrderInfoPO.hbm.xml" /></session-factory></hibernate-configuration>(4)Hibernate启动时,将能够看到下面的状态提示16:05:30,218 INFO SettingsFactory:209 - Second-level cache: enabled16:05:30,218 INFO SettingsFactory:213 - Query cache: enabled16:05:30,218 INFO SettingsFactory:325 - Cache provider: org.hibernate.cache.EhCacheProvider16:05:30,218 INFO SettingsFactory:228 - Optimize cache for minimal puts: disabled16:05:30,218 INFO SettingsFactory:237 - Structured second-level cache entries: disabled16:05:30,218 INFO SettingsFactory:312 - Query cache factory: org.hibernate.cache.StandardQueryCacheFactory2、如果用ehcache,则还需要配置ehcache.xml请见前面的ehcache.xml配置项目的内容。
课程设计项目《蓝梦网上商城》——应用J2EE Filter过滤器组件实现对用户请求URL地址进行拦截和过滤处理功能
J2EE 课程设计实训项目——《蓝梦网上商城》——应用J2EE Filter过滤器组件实现对用户的请求URL地址进行拦截和过滤处理功能1.1.1应用J2EE Filter过滤器组件实现对用户的请求URL地址进行拦截和过滤处理功能1、目的利用该Filter来检查用户的权限,这样既可以防止用户登陆后跨url访问。
2、在本项目中再添加一个过滤器组件(1)类名称为WebShopURLFilter,包名称为com.px1987.webshop.control.filter,并实现javax.servlet.Filter接口(2)编程该Filter程序:注意其中的init和doFilter方法的实现package com.px1987.webshop.control.filter;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;import java.util.*;import erInfoBaseVO;public class WebShopURLFilter extends HttpServlet implements Filter{private FilterConfig filterConfig;String errorTextTargetPage=null;public void init(FilterConfig filterConfig) throws ServletException {this.filterConfig = filterConfig;errorTextTargetPage=this.filterConfig.getInitParameter("errorTextTargetPage");}public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try{HttpServletRequest httpServletRequest=(HttpServletRequest)request;HttpSession session=httpServletRequest.getSession();RequestDispatcher oneRequestDispatcher=null;if (session.getAttribute("oneUserInfoVO") == null){httpServletRequest.setAttribute("errorText","您没有进行登录,因此无法操作该功能!");oneRequestDispatcher= httpServletRequest.getRequestDispatcher(errorTextTargetPage);oneRequestDispatcher.forward(request,response);return;}UserInfoBaseVO oneUserInfoVO=(UserInfoBaseVO)session.getAttribute("oneUserInfoVO");if (oneUserInfoVO.getType_User_Admin() != 2) {//是系统管理员吗httpServletRequest.setAttribute("errorText","本功能只面向系统管理员,因此您无法操作该功能!");oneRequestDispatcher= httpServletRequest.getRequestDispatcher(errorTextTargetPage);oneRequestDispatcher.forward(request,response);}filterChain.doFilter(request, response);}catch(ServletException sx) {filterConfig.getServletContext().log(sx.getMessage());}catch(IOException iox) {filterConfig.getServletContext().log(iox.getMessage());}}public void destroy() {}}3、在web.xml中部署该Filter项目(1)设置该Filter的URL-pattern为:/systemManage/*<filter-mapping><filter-name>webshopurlfilter</filter-name><url-pattern>/systemManage/*</url-pattern></filter-mapping>(2)为该Filter程序提供一个init-param的配置该初始参数为错误页面的文件名称及路径。
《J2EE系统架构和程序设计》课程设计实训项目——某网上交易平台系统项目开发计划说明书
《J2EE系统架构和程序设计》课程设计实训项目——某网上交易平台系统项目开发计划说明书1.1.1项目概述1、项目名称XXXX网上交易平台系统2、项目背景近几年在国家相关政策的推动下,我国网上交易进入快速发展时期,我国电子商务交易额为5000多亿元,淘宝网的在线商品数量超过1663万件、注册会员数突破1390万人。
与此同时,第十七次中国互联网络发展状况统计报告显示,我国互联网用户数突破1.1亿,有过购物经历的用户达到3000万人,其中有一半人数已经习惯网上购物。
网上交易平台系统是类似于现实世界当中的商店,差别是利用电子商务的各种手段,达成从买到卖的过程的虚拟商店,从而减少中间环节,消除运输成本和代理中间的差价,造就对普通消费,和加大市场流通带来巨大的发展空间。
尽可能的还消费者以利益,带动公司发展和企业腾飞。
引导国民经济稳定快速发展。
推动国内生产总值。
网上交易平台系统是在为个人用户和企业用户提供人性化的全方位服务,努力为用户创造亲切、轻松和愉悦的购物环境;不断丰富产品结构,最大化地满足消费者日趋多样的购物需求。
并凭借更具竞争力的价格和逐渐完善的物流配送体系等各项优势,赢得市场占有率多年稳居行业首位的骄人成绩,也是时代发展的趋势。
3、项目目标营造一个方便、快捷、丰富、诚信的网络交易环境,得到用户的认可,并提供长时间的系统维护服务和依托成熟的网络技术,达到简化交易流程,节约时间及成本的目的。
4、项目用户网络消费者及网络销售商5、项目开发者蓝梦集团信息科技有限责任公司。
1.1.2执行计划1、应用系统项目所涉及的主要技术JA V A、JSP、JavaScript、HTML、XML、UML、SQL等。
2、项目完成最晚时间XXXX年XX月XX日3、项目进度4、参考资料(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 著,刘伟琴刘洪涛译5、项目功能本应用系统主要分为BtoB(商家对商家)、BtoC(商家对顾客直销)和CtoC(客户和客户)等主要的子系统。
J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》系统总控前端控制器Servlet及工具类Servlet的实现
J2EE 课程设计项目《蓝梦集团客户关系管理系统(CRM)系统》系统总控前端控制器Servlet及工具类Servlet的功能实现1.1.1验证码图像的Servlet组件1、添加一个显示验证码图像的Servlet组件(1)类名称为ShowVerifyCodeImage,包名称为com.px1987.webcrm.action(2)设置URL-Pattern为:/showVerifyCodeImage.servlet(3)编程该ShowVerifyCodeImage组件类(4)部署该ShowVerifyCodeImage组件类<servlet><servlet-name>ShowVerifyCodeImage</servlet-name><servlet-class>com.px1987.webcrm.action.ShowVerifyCodeImage</servlet-class> </servlet><servlet-mapping><servlet-name>ShowVerifyCodeImage</servlet-name><url-pattern>/showVerifyCodeImage.servlet</url-pattern></servlet-mapping>2、在需要应用并产生验证码的页面中应用它(1)加入下面的img标签<img src="${pageContext.request.contextPath}/showVerifyCodeImage.servlet" border="0"alt="该图像为认证码图片" id="verifyCodeImage" name="verifyCodeImage" />或者:<img border="0" src="<c:url value='/showVerifyCodeImage.servlet />" alt="该图像为认证码图片"id="verifyCodeImage" name="verifyCodeImage" />(2)执行该页面时,将能够看到下面的效果1.1.2系统总控前端控制器Servlet组件1、添加响应各个超链接的页面跳转的Servlet组件(1)类名称为SystemDispatcherServlet,包名称为com.px1987.webcrm.control(2)设置URL-Pattern为:*.action(3)编程该SystemDispatcherServlet组件类(4)部署该SystemDispatcherServlet组件类<servlet><servlet-name>SystemDispatcherServlet</servlet-name><servlet-class>com.px1987.webcrm.control.SystemDispatcherServlet</servlet-class></servlet><servlet-mapping><servlet-name>SystemDispatcherServlet</servlet-name><url-pattern>*.action</url-pattern></servlet-mapping>2、在web.xml文件中为该SystemDispatcherServlet组件类提供转发的目标页面配置定义(1)ServletContext作用域的初始化参数forwardShowErrorInfoTargetPage<context-param><description>显示系统全局业务逻辑功能错误信息的页面</description><param-name>forwardWebAppShowErrorInfoTargetPage</param-name><param-value>/errorDeal/showWebAppError.jsp</param-value></context-param><context-param><description>显示CRM系统业务逻辑功能错误信息的页面</description><param-name>showCRMSystemErrorInfoTargetPage</param-name><param-value>/saleManage/errorDeal/showWebAppError.jsp</param-value></context-param>(2)SystemDispatcherServlet组件类的初始化参数forwardLoginSuccessTargetPage<servlet><servlet-name>SystemDispatcherServlet</servlet-name><servlet-class>com.px1987.webcrm.control.SystemDispatcherServlet</servlet-class> <!-- 下面为所有模块中公用的初始化参数--><init-param><param-name>toCRMSystemSuccessTargetPage</param-name><param-value>/saleManage/rightDefaultContent.jsp</param-value> </init-param><!-- 下面为与工作人员登录有关的初始化参数--><init-param><param-name>forwardLoginSuccessTargetPage</param-name><param-value>/saleManage/index.jsp</param-value></init-param><init-param><param-name>forwardToTargetIndexPage</param-name><param-value>/employeeLogin.jsp</param-value></init-param><!-- 下面为与个人客户信息管理有关的初始化参数--><init-param><param-name>toShowQueryPersonCustomerResultTargetPage</param-name><param-value>/saleManage/customerManage/customerQueryResult.jsp</param-value> </init-param><init-param><param-name>toShowPersonalCustomerSummerResultTargetPage</param-name><param-value>/saleManage/customerManage/summerPersonalCustomerInfoResult.jsp</para m-value></init-param><init-param><param-name>toShowUpdateCustomerInfoTargetPage</param-name> <param-value>/saleManage/customerManage/updateCustomerInfo.jsp</param-value> </init-param><!-- 下面为与企业客户信息管理有关的初始化参数--><init-param><param-name>toShowQueryContactPersonResultTargetPage</param-name> <param-value>/saleManage/customerManage/customerQueryResult.jsp</param-value></init-param><init-param><param-name>toShowQueryEnterpriseCustomerResultTargetPage</param-name><param-value>/saleManage/customerManage/enterpriseCustomerQueryResult.jsp</param-v alue></init-param><init-param><param-name>toShowEnterpriseCustomerSummerResultTargetPage</param-name><param-value>/saleManage/customerManage/summerEnterpriseCustomerInfoResult.jsp</pa ram-value></init-param><init-param><param-name>toShowUpdateEnterpriseCustomerInfoTargetPage</param-name><param-value>/saleManage/customerManage/updateEnterpriseCustomerInfo.jsp</param-val ue></init-param><!-- 下面为与产品信息管理有关的初始化参数--><init-param><param-name>toShowProductionQueryResultTargetPage</param-name><param-value>/saleManage/productionManage/productionQueryResult.jsp</param-value> </init-param><init-param><param-name>toShowProductionSummerResultTargetPage</param-name><param-value>/saleManage/productionManage/summerProductionInfoResult.jsp</param-val ue></init-param><init-param><param-name>toShowUpdateProductionInfoTargetPage</param-name><param-value>/saleManage/productionManage/updateProductionInfo.jsp</param-value> </init-param><!-- 下面为与订单信息管理有关的初始化参数--><init-param><param-name>toShowOrderInfoQueryResultTargetPage</param-name><param-value>/saleManage/orderManage/orderQueryResult.jsp</param-value></init-param><init-param><param-name>toShowOrderSummerResultTargetPage</param-name> <param-value>/saleManage/orderManage/summerOrderInfoResult.jsp</param-value> </init-param><init-param><param-name>toShowQueryOrderProductionResultTargetPage</param-name><param-value>/saleManage/orderManage/orderProductionQueryResult.jsp</param-value> </init-param><init-param><param-name>toShowUpdateOrderInfoTargetPage</param-name><param-value>/saleManage/orderManage/updateOrderInfo.jsp</param-value></init-param><init-param><param-name>toShowUpdateOrderProductionInfoTargetPage</param-name><param-value>/saleManage/orderManage/updateOrderProductionInfo.jsp</param-value> </init-param><!-- 下面为与合同信息管理有关的初始化参数--><init-param><param-name>toShowContractSummerResultTargetPage</param-name><param-value>/saleManage/contractManage/summerContractInfoResult.jsp</param-value> </init-param><init-param><param-name>toShowContractQueryResultTargetPage</param-name><param-value>/saleManage/contractManage/contractQueryResult.jsp</param-value> </init-param><init-param><param-name>toShowUpdateContractInfoTargetPage</param-name><param-value>/saleManage/contractManage/updateContractInfo.jsp</param-value> </init-param></servlet>1.1.3系统中的ActionForm的Util工具类1、添加一个解析Http表单参数的ActionForm的Util工具类(1)类名称为AllActionFormUtil,包名称为com.px1987.webcrm.actionform(2)编程该类2、添加一个将ActionForm组件中的属性保存到对应的PO类的Util工具类(1)类名称为SaveActionFormToPOUtil,包名称为com.px1987.webcrm.actionform(2)编程该SaveActionFormToPOUtil类代码1.1.4系统中的Action类的抽象基类1、添加一个系统请求的Action类的抽象基类(1)类名称为BaseClassOfAllAction,包名称为com.px1987.webcrm.action(2)编程该抽象基类BaseClassOfAllAction2、添加一个Action工厂类(1)类名称为ActionInstanceFactory,包名称为com.px1987.webcrm.util(2)编程该Action工厂类Cannot get a connection, pool error Could not create a validated object, cause: null。
J2EE 课程设计项目——蓝梦集团客户关系管理系统(CRM)实现
J2EE 课程设计项目——蓝梦集团客户关系管理系统(CRM)实现1.1.1蓝梦集团客户关系管理系统(CRM)实现中所应该遵守的基本要求1、对数据访问层编程实现的基本要求(1)尽量在SQL语句中少用IN操作符虽然用IN操作符写拼接出的SQL语句清晰易懂,但由于性能低下——主要是由于用IN 的SQL语句至少多了一个转换过程。
因此尽量在系统开发中不应用该操作符,必要时可以用EXISTS方案代替。
(2)对NOT IN操作也不推荐使用,可以用NOT EXISTS或外连接方案代替,因为前者不能够使用表中的索引。
(3)由于不等于操作符是永远不会用到索引的,因此对它处理只会产生全表扫描。
可以用相同功能的操作运算符代替。
(4)由于UNION在进行表链接后会筛选掉重复的记录,在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果,因此在数据量相当庞大时,会很费时,因此可以用UNION ALL的形式代替UNION,节省大量排序筛选的时间。
(5)当存在索引的时候,尽量使用比较准确的大于小于操作符。
如:尽量使用A>=3而不用A>2,因为前者可以直接定位到等于3的记录,而后者要先定位到等于2的记录再进行比较筛选。
2、对系统中的业务服务层和数据访问层充分应用单元测试单元测试是在软件开发过程中要进行的低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
单元测试不仅仅是作为无错编码一种辅助手段在一次性的开发过程中使用,单元测试也必须还应该是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。
图4.1为项目中的数据库连接组件的单元测试的结果局部截图。
图4.1项目中的数据库连接组件的单元测试的结果局部截图单元测试是由程序员自己来完成,最终受益的也是程序员自己。
程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试用例——验证对应的功能代码的行为和系统所期望的保持一致。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
J2EE 课程设计实训项目——《蓝梦网上商城》——实现系统表示层中的各个JSP页面1.1.1实现系统表示层中的各个JSP页面1、在Macromedia Dreamweaver MX 2004中针对该Struts的WebApp新建一个Web站点该Web 站点所在的目录为我们磁盘中的某个目录。
2、在该Web站点所在的目录中添加或者新建我们的各个资源目录(1)images和webImages(2)flash(3)css(4)webResource(5)javascript(6)database3、在Macromedia Dreamweaver MX 2004中针对本Web系统新建一个页面模板文件(1)新建一个模板页面(2)将产生出一个空的页面(3)保存该模板页面为一个模板文件pageTemplate.dwt(4)输入模板文件的名称(5)将自动地产生出一个Template的目录,并在该目录中保存我们的模板文件4、设计该模板页面中的内容(1)对该模板页面进行页面设计------该过程由于比较多,在此省略(2)在该模板页面中定义可编辑区(3)输入可编辑区的名称为:pageContent(4)最后再次保存该模板页面文件。
5、依此相同的方法再新建一个模板页面pageTemplateTwo.dwt6、根据模板页面新建出本系统的各个表示层的页面文件(1)根据模板页面新建各个页面(2)选择该页面所依赖的模板页面,并点击“创建”按钮,将出现一个与模板页面一样的空的页面(3)根据应用的要求设计该页面的内容7、本系统的表示表示层的页面目录如下8、在模板页面中设计全局导航条,将各个超链接连接各个功能页面上9、对各个功能页面中的页面内容(包括表单)进行设计,并且进一步细化!10、系统首页面index.jsp页面的代码示例<%@ page contentType="text/html;charset=gb2312" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"<HEAD><title>蓝梦网上商城</title><html:base/><META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="images/style.css" type="text/css" rel="stylesheet"><SCRIPT language="javascript" type="text/javascript">if (top.location != self.location)top.location=self.location; //避免别人把网页放在框架中</SCRIPT></HEAD><FRAMESET border=0 frameSpacing=0 frameBorder=NO cols=*><FRAMESET border=0 name=fst frameSpacing=0 frameBorder=NO cols=140,9,*> <FRAME name=leftFrame src="images/leftMenu.htm" noResize><FRAME name=midFrame src="images/switch.htm" frameBorder=0 scrolling=no><FRAME name=mainFrame src="images/defaultContent.jsp"></FRAMESET><NOFRAMES><body><font color=red style=font-size:14px><b>你的浏览器不支持帧页面,请升级!</b></font></body></NOFRAMES></FRAMESET></HTML>11、用户进行系统登录的userLogin.jsp页面代码示例<%@ page contentType="text/html;charset=gb2312"errorPage="/dealError/showSystemError.jsp"%><%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %><%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %><%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><!-- InstanceBegin template="/Templates/pageTemplate.dwt" codeOutsideHTMLIsLocked="false" --><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><html:base/><SCRIPT language="javascript" type="text/javascript" src="../javascript/commonCode.js"></SCRIPT><!-- InstanceBeginEditable name="doctitle" --><script language="javascript" type="text/javascript" src="../javascript/commonCode.js"></script><title>蓝梦网上商城</title><!-- InstanceEndEditable --><!-- InstanceBeginEditable name="head" --><!-- InstanceEndEditable --><link href="../css/pageStyle.css" rel="stylesheet" type="text/css" /></head><body background="../webImages/contentbg.jpg" ><TABLE width="100%" border=0 align="center" cellPadding=0 cellSpacing=0 class="smalltxt"><TR><TD ><TABLE width="100%" border=0 align="center" cellPadding=0 cellSpacing=0> <TR ><TD width="77"><div onclick="history.back()"><div align="center" style="cursor:hand">《--后退</div></div></TD><TD width="77"><div onclick="history.forward()"><div align="center" style="cursor:hand">向前--》</div></div></TD><TD width="835" ><a href="../images/defaultContent.jsp">首页</a>|<a href="../userACounter/showCounterInfo.jsp">我的帐户</a> |<a href="../buyCartManage/showCartInfo.jsp"><IMG height=16 alt="Cart"src="../webImages/buycart.gif" width=19 border=0>购物车</a> |<a href="../shopGuide/showHelpInfo.htm">帮助中心</a> |<a href="../shopGuide/stepBystep.htm"> 新手上路</a>|<a href="../aboutThis/privateText.htm"> 隐私声明</a>|<a name="home" onclick="defaul_home();" href="#" >设为首页</a>|<a href="#" onclick="javascript:window.external.addFavorite('/','蓝梦网上商城');return false;" >收藏本站</a>|<a href="../aboutThis/aboutTheSite.htm"> 关于本站</a></TD></TR></TABLE></TD></TR><TR><TD ><FORM name="searchBrick"action="/webshop/searchGoodsURI.do?actionType=doSearchBrick" method="post"><TABLE width="100%" border=0 align=center cellPadding=0 cellSpacing=0><TR ><TD width=186> <span class="smalltxt">商品搜索</span><SELECT name="searchType"onchange="changeSearchKind(options[selectedIndex].value);" ><OPTION value="0" selected>所有类别</OPTION><OPTION value=1>图书</OPTION><OPTION value=2>计算机</OPTION><OPTION value=3>通讯设备</OPTION><OPTION value=4>服装</OPTION><OPTION value=5>全文搜索</OPTION><OPTION value=6>高级搜索</OPTION></SELECT></TD><TD width=189><INPUT id="searchWord" size="25" name="searchWord"value="请输入商品的名称"></TD><TD width="39" align=right><div align="left"><INPUT name="Go" type="image" alt="查找"src="../webImages/az-go-orange-trans.gif"></div></TD><TD width="575" ><DIV id="searchKindArea"></DIV></TD></TR></TABLE></FORM></TD></TR><tr ><td><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase=/pub/shockwave/cabs/flash/swflash.cab#version =6,0,29,0 width="100%" height="2"><param name="movie" value="../flash/lightLine.swf" /><param name="quality" value="high" /></object></td></tr></TABLE><!-- InstanceBeginEditable name="pageContent" --><html:form action="/userInfoManage.do?actionType=doLogin_GetPassWord" method="post" > <html:hidden property="menuID" value="2"/><table width="426" border="1" align="center" class="smalltxt"><tr><td colspan="2"><div align="center">选择操作方式:<html:radio property="login_GetPassWord_ActionType"onclick="userLogin_showUserLoginInput(this.value)" value="1">登陆系统</html:radio> <html:radio property="login_GetPassWord_ActionType"onclick="userLogin_showGetUserPassWordInput(this.value)" value="2">找回密码</html:radio></div></td></tr><tr><td colspan="2" align="center">输入右面的认证码:<html:text property="verifyCodeDigit" onblur="checkIfDigit(this.value);"/><img border="0" src="verifyCodeImage.jsp" alt="verifyCodeImage" /></td></tr><tr><td colspan="2" align="center">用户类型:<html:select property="type_User_Admin"><html:option value="1">前台用户</html:option><html:option value="2">后台管理员</html:option></html:select></td></tr><tr><td colspan="2" align="center">您的名称:<html:text property="userName" /></td></tr><tr style="display:inline" id="userLoginTableRow"><td colspan="2"><table width="100%" border="0"><tr><td><div align="center">您的密码:<html:password property="userPassWord" /></div></td></tr></table></tr><tr style="display:none" id="getUserPassWordTableRow"><td colspan="2"><table width="100%" border="0"><tr><td><div align="center">取回密码的问题:<html:text property="passWordAsk" /></div></td></tr><tr><td><div align="center">取回密码问题的答案:<html:password property="passWordAnswer" /></div></td></tr></table></td></tr><tr id="showErrorInfo" style="background-color:#FF9900;display:none"><td colspan="2" align="center" id="errorInfoPosition"></td></tr><tr><td colspan="2" align="center"><html:submit value="提交" property="submitButton" disabled="" onclick="this.value='正在提交请求,请稍候'"></html:submit> <html:reset value="取消" /></td></tr></html:form><!-- InstanceEndEditable --> </body><!-- InstanceEnd --></html>。