收藏 分享(赏)

基于JAVA的购物网站-毕业论文.doc

上传人:为人民服务 文档编号:2355930 上传时间:2018-09-12 格式:DOC 页数:74 大小:1.46MB
下载 相关 举报
基于JAVA的购物网站-毕业论文.doc_第1页
第1页 / 共74页
基于JAVA的购物网站-毕业论文.doc_第2页
第2页 / 共74页
基于JAVA的购物网站-毕业论文.doc_第3页
第3页 / 共74页
基于JAVA的购物网站-毕业论文.doc_第4页
第4页 / 共74页
基于JAVA的购物网站-毕业论文.doc_第5页
第5页 / 共74页
点击查看更多>>
资源描述

1、11 引言自从 B2C 购物出现在人们的视野中,电子商务就在全世界范围内受到了格外的关注,并且得到了快速的发展。从现实角度来看,目前购物网站的普遍用户是购买者难以自己想要购买的商品甚至用户在耗费很大的精力和时间后即使找到了自己想要的产品,最后却由于其他原因而放弃购买。很多报道指出,推销商们普遍对目前的网络行销感到失望,尽管如此,电子商务无疑是目前最好的在线商品展示的媒体和工具。然而,网上产品展示的目的不仅仅是展示产品,而更重要的是通过让客户更多地了解产品而提高产品的购买率。因此,购物网站目前所面临的最大挑战之一就是网站的设计,如何使得网页能够有效地展示自己的产品,同时方便用户的使用,使用户以愉

2、悦的心情选购称心如意的商品。本系统的目的和意义就是应上述挑战而尝试为用户提供一个操作简单方便的网上交易系统。利用本系统,用户可以自由地浏览商品,注册成为网站会员,选择商品加入自己的购物车,而后生成订单,实现网上购物。22 系统应用的关键技术2.1 EXTJS MVC 的介绍ExtJs 前台我分为了 model,store,view,controller 层 4 层架构,对于 model层 ,用于接收后台传入的 Pojo 封装成前台数据 Model 中,创建一个 model 需要define 的一个继承于 Ext.data.Model 的一个类,其中关键不可少的配置项是 fields,例如 fi

3、elds: name:“id“,type:“int“,srotable:true, name:“text“,type:“string“,srotable:true其中name代表字段名称,type为字段类型,类型只有string、float、int、boolean、date、 auto(默认值, 意味着无convert方法)6种对应后台pojo,形成一条数据,而stroe层则是数据集合,也就是model的集合。开发时我们经常是用代理的方式从后台获取一条json数据,形成stroe,如proxy:type:“ajax“,url:“./category/combo_category.do“,rea

4、der:type:“json“,root:“rows“,writer:type:“json“是用 ajax 的代理方式从后台获取一个数据集,stroe 还得指定你使用的 model 是那个,model 配置项就可以指定你要指定的 Model 类,用字符串的形式写上类名即可配置好 stroe.这时候搭建主面板视图,主面板是一个 border 布局,上方是 login 信息3以及系统名称,左边属性图,中部是数据表格以及一些表单。完成的 mvc 架构还需要controller 层,这时候我们要先建立一个 app.js,内容如下:Ext.onReady(function()Ext.QuickTips.

5、init();/开启提示功能Ext.Loader.setConfig(/动态加载js文件enabled : true);Ext.application(name : “core“,/名称appFolder : “./core“,/所在的目录launch:function()Ext.create(“Ext.container.Viewport“,layout : “fit“,border : 0,items : xtype : “mainviewlayout“);,controllers : “core.app.controller.MainController“););我们用一个 Viewpo

6、rt 搭建系统主界面,其中 items 中放入的 mainviewlayout 就是系统主视图的别名,通过这种方式可以直接加载 mianviewlayout 类到页面,Cotrollers 配置的则是我们的控制器层,控制器层的声明也相当的简单,创建一个继承与 Ext.app.controller 的类,写一个初始化方法中的 this.controller 方法中则是我们控制界面按钮效果的主要地方。我在搭建这套界面是写了一个公用的加载其他控制器和页面视图的方法:4this.addFunItem=function(funInfo)if(funInfo)var mainView=funInfo.ma

7、inView;var funPanel=mainView.down(funInfo.funViewXtype);if(!funPanel)self.application.getController(funInfo.funController).init();funPanel=Ext.create(funInfo.funViewName);mainView.add(funPanel);mainView.setActiveTab(funPanel);elsemainView.setActiveTab(funPanel); ,传入funInfo是一个js对象,用来加载不同views,models,

8、stores,实现点击左侧树形图,加载不同的数据表格表单树形等不同的数据展示效果.2.2 数据表格的形成ExtJS中的数据表格中的每一条数据对应的都是Model,所有记录则是一个数据集合,所以数据表格中我们肯定要配置的有stroe对象,为了形成数据表格中可以形成复选框多选的效果我们需要加入的配置项有selModel:selType:“checkboxmodel“,multiSelect:true,使用的是复选形式的选择模式,数据表格必不可少有colums,也就是列模式,规范我们接收store数据形成表格的展现形式如:columns:text:“商品名称“,dataIndex:“name“,wi

9、dth:100, ,text表示的每列展示的名字,dataIndex则是需要展示的字段,一般我们在生成一个数据表格的时候我们都会在表格头上加几个按钮,用来管理数据表格的增删改,这个5功能实现只要用tbr里面放几个按钮,分别给上他们响应的rel属性,方便我们在控制器中查找,实现控制功能,常见的数据表格还会有分页展示,以及搜索框,bbar:xtype:pagingtoolbar,store:core.product.store.ProductStore,dock:bottom,displayInfo:truebbar中放入的就是一个分页的组件,他也需要一个数据集合stroe,dock表示地定位的位

10、置,而搜索框我们一般用一个触发器组件来形成,做一个前台的过滤效果即可。如“-“,按名称查询:,xtype: triggerfield, triggerCls: Ext.baseCSSPrefix + form-search-trigger,listeners:“change“:function(_this,_new,_old,_opt) var _store = _this.ownerCt.ownerCt.getStore();_store.clearFilter(false);_store.filter(“name“,_new); ,onTriggerClick: function() va

11、r _store = this.ownerCt.ownerCt.getStore();_store.clearFilter(false);_store.filter(“name“,this.getValue();,这样简单的搜索功能我们就可以实现了。2.3 树的形成定义一个类继承于Ext.tree.Panel.本系统的主界面的树形使用的是本地树,不6同过后台生成,直接前台固定数据,生成的固定的树结构,树同样需要数据就有store的配置以及树的items配置主要配置的就是树的各个节点,本系统每一个小菜单就是一颗树,通过前面定义的加入新的视图和控制器的方法来加载不同的页面都需要传入树的节点信息。2

12、.4 数据库的连接本系统数据库的连接使用的MyBatis框架的数据连接,用配置文件配置数据库连接属性,本次我没有使用外部属性文件,而是直接使用配置的固定参数,先配置一个数据源 dataSource,让他直接指向类org.springframework.jdbc.datasource.DriverManagerDataSource,配置参数driverClassName的value为com.mysql.jdbc.Driver,url为jdbc:mysqlLlocalhost:3306/lzl?characterEcoding=utf-8useUnicode=true在配置数据库访问账号密码,这样

13、我们就和数据库连接上了。2.5 系统的运行环境本系统前端使用 mvc 模式的 ExtJS4.1 后台使用 springmvc,spring,mybatis 整合,使用的服务器是 tomcat7.0,在 eclipse 编译器下运行即可,操做系统Windows 7,在火狐浏览器下进行测试.2.6 springmvc 工作流程1. 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获;2. DispatcherServlet 对请求 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 HandlerMapping 获得

14、该 Handler 配置的所有相关的对象(包括Handler 对象以及 Handler 对象对应的拦截器),最后以 HandlerExecutionChain 对象的形式返回;3. DispatcherServlet 根据获得的 Handler,选择一个合适的 HandlerAdapter。(附注:如果成功获得 HandlerAdapter 后,此时将开始执行拦截器的 preHandler(.)方法)4. 提取 Request 中的模型数据,填充 Handler 入参,开始执行7Handler(Controller)。 在填充 Handler 的入参过程中,根据你的配置,Spring 将帮你做

15、一些额外的工作:HttpMessageConveter: 将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息数据转换:对请求消息进行数据转换。如 String 转换成 Integer、Double 等数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult 或 Error 中5. Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;6. 根据返回的 ModelAndView,选择一个适合的 Vi

16、ewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给 DispatcherServlet ;7. ViewResolver 结合 Model 和 View,来渲染视图8. 将渲染结果返回给客户端。2.7 spring 依赖注入,控制反转IoC,即控制反转。他使程序组件或类之间尽量形成一种松耦合结构,开发者在使用类的实例之前,需要先创建对象的实例。但是 IoC 将创建实例的任务交给 IoC容器,这样开发应用代码时只需要直接使用类的实例,这就是 IoC。通常用一个好莱坞原则(请不要打电话给我,我会打电话给你。)来比喻这种控制反转的关系。依赖注入有 3 种

17、类型注入,spring 支持 2 种,setter 注入和构造器注入,在项目中我使用的是注解方式的注入,在配置文件中配置了 com.lzl 包下的类自动注入到容器中,在我们需要用到这些类的时候,我们只需声明该类,然后使用一个autowired 注入想要使用的类,其中控制器我们使用的 Controller 注解标识为控制器,业务逻辑层我们使用的 service 注解。这样 spring 容器就能管理好我们的类。2.8 spring AOP83 系统需求分析和总体设计3.1 系统功能需求在本系统中用户管理、购物车管理、订单管理、产品展示,商品管理,广告管理六个模块。分为前台展示项目和后台管理项目。

18、(1)购物车管理:实现添加商品、取消一个商品、数量修改、清空购物车功能。(2)订单管理:实现提交订单、删除订单、查询订单、订单审核功能。(3)前台展示:实现产品列表、产品明细功能。(4)用户管理:实现用户注册、用户信息修改、用户删除、用户查询功能。(5)商品管理: 实现对商品的添加,对商品信息的修改,对商品的删除。以及按类别查询商品,按名称查询商品功能。(6) 广告管理: 对主页面广告部分的管理,实现广告的动态化,页面广告信息的更新。3.2 系统角色及其功能分析3.2.1 系统中有 3 个角色:(1)注册用户(2)管理员9(3)游客3.2.2 系统角色的功能(1)普通用户网站的普通浏览者(即游

19、客),可以浏览商品和添加本地购物车。(2)注册用户普通浏览者只要注册为网站用户后,登录成功后有以下功能:登录,登出,向购物车中添加商品,查看个人信息,生成并提交订单。添加或修改个人明细资料。(3)管理员登录成功后,进入后台项目,对前台展示的动态管理,以及用户商品等管理,对订单的审核。3.3 总体设计思想概述本系统是基于 B/S 架构下的多层结构应用系统。B/S(Browser/Server)结构即浏览器和服务器结构。它是随着 Internet 技术的兴起,对 C/S 结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过 WWW 浏览器来实现,极少部分事务逻辑在前端(Browser)实

20、现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层 3-tier 结构。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。推荐的分层式结构一般分为三层,从下至上分别为:数据访问(dao)层、业务逻辑层、表示层总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的 API,而下层组件则不依赖于上层组件。例如:表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。并且每个层对对上

21、层公开 API,但具体的实现细节对外透明。当某一层发生变化,只要 API 不变,不会影响其他层的实现。在本系统中,使用开源的 mysql 数据库,持久层用到 spring 所集成的 mybatis技术,业务逻辑层用普通 javabean 实现,表述层运用基于 springmvc 的 MVC 设计模10式(springmvc 用来做 C 层,spring 实现 V 层与 C 层的解耦以及 C 层与 M 层的解耦)。3.4 数据库设计 图 3-1 数据库 E-R113.4.2 数据库表设计下面列出了设计过程中所用到的数据库表及其结构:表 3-1 lzl_quser 前台用户表列名 类型 长度 允许

22、空值 描述id int 11 不允许 主键username varchar 255 不允许 用户名password varchar 255 不允许 密码email varchar 255 允许 邮箱地址qq varchar 255 允许 qq 号码phone varchar 255 允许 电话号码sex varchar 255 允许 性别xl varchar 255 允许 学历ah varchar 255 允许 爱好jj varchar 255 允许 简介表 3-2 lzl_user 管理用户表列名 类型 长度 允许空值 描述id varchar 11 不允许 主键12username var

23、char 255 不允许 用户名password varchar 255 不允许 密码sex int 11 允许 性别phone varchar 155 允许 电话号码qq varchar 255 允许 qqaddr varchar 255 允许 地址email varchar 255 允许 邮箱地址表 3-3 lzl_product 商品表列名 类型 长度 允许空值 描述id int 11 不允许 主键name varchar 255 允许 商品名desc varchar 255 允许 描述norma_Price double 11 允许 社会价格member_Price double 11

24、 允许 本店价格pdate timestamp 0 允许 上货日期category_id int 11 允许 所属类型photo varchar 255 不允许 图片地址表 3-4 lzl_cartItem 购物车表列名 类型 长度 允许空值 描述id int 11 不允许 主键product_id int 11 不允许 商品 idproduct_name varchar 255 允许 商品名称13count int 11 允许 商品数量price double 11 允许 商品单价quser_id int 11 不允许 用户 idstate int 11 允许 当前状态imagepath v

25、archar 255 允许 商品图片3.5 系统的类设计3.5.1 DAO 类设计通过这个 mybatis 获取对应的 DAO,然后使用 DAO 进行数据库操作,每个 dao 对应一个 Mapper 配置文件,进行 Sql 的配置,在本系统中,dao 的一般使用都使用了BaseProvice 类,根据约定实体用param(“entity”)标识,分页参数用param(“pageNum”)和param(“pageSize”)标识,这样就能友好的被读取,按照约定还有实体中的其他对象属性要用ObjectAlt 注解标志,集合用ArrayAlt 标志,这样的标识都可以方便我们更好的识别其属性到底是个什

26、么类型,其次做条件查询时,是用 entity 标识的实体中有不为空的属性且不为空字符串时就会被 and 连接,保存也是实体中不为空的属性都会进行保存,主键必须为空,数据库进行主键的自动增长3.5.2 JacksonUtil 类设计14本类中实现了一个 mapToJson 方法,参数为一个 Object 的对象。返回值为一个 String 类型的 json 对象,本类可以将对象或者集合传化为 JSON 格式的字符串,用的是 JackSon Jar 包。3.5.3 ObjectAlt 注解类设计用Target(ElementType.FIELD)标识表示可以使用在属性上,在使用Retention(

27、RetentionPolicy.RUNTIME) 在运行时检测,最后方法中声明一个String value(),本类用来标识实体类中的对象属性。3.6 系统的用例图Customerer浏览商品注册登录购物车管理订单操作修改信息添加修改删除15图 3-2 总体用例分析 1 Admin商品管理广告管理角色管理用户管理图 3-3 总体用例分析 2如图 3-3,用户管理、购物车管理、订单管理、产品展示,广告管理,商品管理 6 个模块构成了本 b2c 购物网站系统。User 是指系统用户,包括注册用户和匿名用户两种,匿名用户只可以浏览商品,匿名用户通过用户管理模块注册后就可以使用购物车和下订单。图 3-

28、4 用户管理用例Admin用户登录录展示用户信息修改添加新用户16如图 3-4,用户管理模块主要包括:用户登陆、用户注册、用户信息修改、用户删除、用户信息查询五个功能组成。图 3-5 购物车管理用例如图 3-5,购物车管理模块主要包括:添加商品、取消一个商品、数量修改、清空购物车四个功能组成。图 3-6 订单管理用例如图 3-6,订单管理模块主要包括:订单提交、删除订单、订单明细三个功能组成。4.系统结构设计用户 购物车管理商品数量修改取消一个商品清空购物车管理员 订单管理订单查询订单审核修改订单17图 4-1 系统前台功能设计图 4-2 系统后台功能设计18图 4-3 系统总体功能设计图 4

29、-4 个别功能设计5 系统的详细设计5.1 BaseProvice 类19这个类重要是复用型的后台动态 SQL 语句的生成,在 dao 层使用selectkey 注解指定 type 为 BaseProvice.class,method 为指定的方法,5.1.1 isString 方法该方法返回值为一个 String ,参数为 Field field,Map map,String sql 三个,通过 field.getType().toString().contains(“String“),判断出这个属性为 string 属性,然后在判断这个属性不为空的字符,这时候我就进行了模糊查询 and 连

30、接方式的拼接,用传入的 sql 参数的 concat 方法拼接“and”+StringUtilStringtoCoulm(field.getName(),在拼接 like Concat (%,#entity,加上 field 的 getName 方法拼接属性名称上去,StringUtil.StringtoCoulm 方法是将属性格式化为字段的方法,如 mebmerPrice 就会格式化成 mebmer_price,最后返回 sql 即可。5.1.2 isObject 方法该方法返回值为一个 String ,参数为 Field field,Map map,String sql 三个,通过 fie

31、ld 的 getAnnotation(ObjectAlt.class)方法不为空的话我们就通过 field.get(map.get(entity),得到一个 Object 的对象,通过Object 对象的 getClss().getDeclaredFields(),得到属性的数组,循环遍历属性数组,循环中先设置私有属性可访问,然后通过 fields1j.get(obj),得到这个属性,判断这个属性如果是 id 的话在进行拼接 sql=sql.concat(“ AND“+StringUtil.StringtoCoulm(fields1j.getName()+“ = # entity.“+fiel

32、d.getName()+“.“+fields1j.getName()+“);就可以将外键属性的id 进行拼接进入,最后返回 sql 即可。 5.1.3 查找单个对象首先我们在 BaseProvice 类下建立一个名为 findOne 返回值为 String 值参数为一个map 的方法,其次通过 map.get(“entity“).getClass()得到一个 map 中param(“entity”)注解标识为实体的 Class 对象,然后我们声明一个 String 类型的字符串,初始化为”select * from ”,通过 concat 方法用刚刚得到的 Class 对象的 getSimpl

33、eName()方法得到类名,约定好 lzl_+类名就为数据库表名,这时候就得到了 Select * from 表名 ,最后我们在通过 concat 方法拼接 where id=#entity.id,返回字符串 sql。5.1.4 通过条件查找对象集合先声明一个名为 findList 返回值为 String 参数为 Mapmap 的方法,通过 map.get(“entity”)得到param(“entity”)注解标识为实体的 Class 对象,声明一个 String 类型的字符串,初始化为 select * from,通过 concat 方法拼接“lzl_“+clazz.getSimpleNa

34、me()+“ WHERE 1=1“,得到的 sql 为 select * from 表名 where 1=1,这时候我们调用 Class 对象的 getDeclaredFields()方法得到属性的数组 fields,对属性数组进行遍历,在循环开头我们需要设置可以访问私有属性,这句代码就是设置访问私有属性,fieldsi.setAccessinble(true),然后进行判断20这个属性在实体中是否为空 fieldsi.get(map.get(“entity“)!=null,不为空的时候我们对属性的类型进行判断,这时候我们就要用得 isString,isInteger ,isObject 方法

35、,最后返回 sql。5.1.5 通过条件查找对象集合带分页这个方法中我们只需要调用上放的 findList 方法,最后我们将 sqlConcat 方法拼接 limit #pageNum,#pageSize,最后返回 sql。5.1.6 带条件的查询数据总数这个方法我们也是先调用 findList 方法得到所有的记录,然后通过 sql的 replace 方法将*替换为 count(*),返回 sql 即可。5.1.7 增加一条记录的方法声明一个名为 save 返回值为 String 参数为 map 的方法,首先我们通过map.get(entity).getClass()得到对象的 Class 对

36、象,声明二个 String 字符串,一个为 sql 初始化为 insert into,sql1 初始化为 values (;给 sql 字符串拼接上表名,通过 sql.concat(“lzl_“+clazz.getSimpleName()+“ ( “),用 class 对象的 getDeclaredFields()得到所有的属性,遍历属性数组,设置可以访问私有属性,通过 fieldsi.getAnnotation(ObjectAlt.class)!=null 时,对 sql 进行sql=sql.concat(StringUtil.StringtoCoulm(fieldsi.getName()+

37、“_id ,“);对sql1 进行 sql1=sql1.concat(“ #entity.“+fieldsi.getName()+“.id,“);然后continue 出去,在判断 if(fieldsi.getAnnotation(ArrayAlt.class)!=null),在continue 出去,在判断该属性是否是 id 属性,是的话sql=sql.concat(StringUtil.StringtoCoulm(fieldsi.getName()+“,“); sql1=sql1.concat(“ # entity.“+fieldsi.getName()+“,“);最后将 sql 的最后一

38、个,替换为 )sql.substring(0, sql.lastIndexOf(“,“).concat(“) “);sql1 的最后一个,替换为 )sql1=sql1.substring(0, sql1.lastIndexOf(“,“).concat(“)“);最后返回 sql.concat(sql1)就得到了增加语句5.1.8 根据 id 修改的方法5.1.9 根据对象修改的方法声明一个名为 update 返回值为 String 参数为 map 的方法,声明 2 个字符串分别为 sql 和 where 初始化为 “update” 和“where id=#entity.id”,通过map.ge

39、t(entity).getClass()得到 class 对象声明为 clazz,给 sql 拼接表名并加上 set 字符串,通过 clazz.getDeclareFields()得到所有的属性,设置可以访问私有属性,判断是否为 id 属性是的话不拼接,在判断是否是对象,通过 fieldsi.getAnnotation(ObjectAlt.class)!=null 判断是对象,是对象的话 给 sql 拼接sql=sql.concat(StringUtil.StringtoCoulm(fieldsi.getName()+“_id = 21#entity.“+fieldsi.getName()+“

40、.id“);在 continue 出去,在通过 fieldsi.get( map.get(“entity“)!=null 判断当前属性值不为空,在拼接以下语句sql=sql.concat(StringUtil.StringtoCoulm(fieldsi.getName()+“= # entity.“+fieldsi.getName()+“,“);最后去除掉字符串的最后一个字符sql=sql.substring(0,sql.length()-1);返回 sql.concat(where)即可5.1.9 根据 id 删除的方法声明一个名为 remove 返回值为 String 参数为 map ,先

41、声明一个 sql 的字符串,初始化为 delete from,通过 map.get(“entity“).getClass()得到 Class 对象,然后拼接 lzl_“+clazz.getSimpleName() where id=#id,最后返回 sql 即可5.2 主要模块的设计说明与界面5.2.1 用户管理模块用户管理模块主要包括用户注册,登录,退出、删除、修改 22图 5-1 未记住密码以及未自动登录状态 图 5-2 记住密码状态图 5-3 自动登录的状态23图 5-4 用户管理页面图 5-5 用户增加 1图 5-6 用户增加 224图 5-7 用户增加 3图 5-8 用户信息修改图

42、5-9 搜索过滤5.2.2 前台系统展示模块25图 5-10 游客用户展示页面图 5-11 登录页面26图 5-12 登录成功后图 5-13 购物车5.3 系统的测试测试是软件开发的重要组成部分,每一个开发人员都应该养成良好的生活习惯的测试,通过不断地测试和维护,完成提高系统它是。显着性检验如下:(1)测试并不仅仅是为了找到错误,通过分析发生的错误发生的原因和趋,可以帮助项目经理找到当前软件开发过程中的缺陷,以便及时改进;(2)分析可以帮助测试人员提高效率和测试的有效针对性;(3)错误被发现,也是有价值的,完整的测试是评估软件质量的方法。(4)测试可以使系统更加完善,减少不必要的时间来再看一遍

43、同一个地方测试一般有两种方法:如果你已经知道产品应该具有的功能,可以通过测试来验证每一个功能都可以正常使用;如果知道在工作过程内的产品,可以进行测试,以检查27是否该产品在按照说明书的正常运转。有 2 个测试方法,一个黑箱测试,一个叫白箱测试。对于这个系统,我采取第一种方法,黑匣子。对完成的模块,测试以查看功能模块有没有达到所需的。模块测试和集成测试后,系统实现了所有的功能规范,达到了预期的要求。 6 结束语网站开发是一项复杂而艰巨的任务,需要广泛的知识。通过设计的网上交易系统,让我接触到的基于 Web 的知识 Java Web 开发语言的许多方面,包括支持 MVC 架构的 Springmvc

44、 框架、HTML 语言,CSS 层叠样式表,客户端开发语言 JavaScript 中,MVC 分层架构中,开源的 Tomcat 服务器,MySQL 数据库,服务器端开发语言 JSP,等等,这些语言(或技术)扩大了我的知识,我在做自己的基本特征,应用方向的理解和实际应用的过程一般理解如何使用它们将被整合,以发展一个漂亮的界面和强大的 Web 站点。通过这个动手了系统的设计,我是系统开发的全过程,从我熟悉的 B / S 结构的 Web 应用软件的设计思想和整个过程的发展更深刻的认识。首先,系统需要分析,分析系统来实现什么功能,系统应分成几个模块来设计系统的特定的功能应是如何28实现的;经过分析,认

45、为它涉及到计算机专业知识,优良的技术问题,大问题变成小问题,然后逐个解决。毕业开始,因为我们没有在软件架构设计经验,所以在规范的业务流程和软件工程的发展作出了非常错误的,所以后来在组装过程变得非常困难。设计收获:1掌握了网站开发的基本流程,设计整个网站的功能模块图;2掌握了如何搭建和配置一个 Tomcat 服务器;3掌握了使用 JSP 编程,实现对信息的显示、修改、删除和添加等;遇到的问题:1JSP 中文乱码问题的解决对于 JSP 中文乱码问题的处理,常用的方法有两种:一种方法是在 JSP 页面上设置页面的“contentType”属性。这种方法就是在页面开始时,设置页面的“contentTy

46、pe”属性,例如:另一种方法是输出中文信息时使用“ISO 8859-1”编码。这种方法是在输出中文信息之前,对中文信息进行一次“ISO 8859-1”编码。2Java.lang.NullPointerException 异常一般是对一个为 NULL 值的变量进行操作引起的。为了避免这种异常,最好在对变量操作之前检查看它是否为 NULL参考文献1胡书敏.Servlet 与 JSP 核心编程2杨卫兵,王伟.JAVA Web 编程详解 .东南大学出版社3张伟.JAVA 程序设计详解.东南大学出版社4刘京华.Java Web 整合开发.清华大学出版社5 贺松平基于 MVC 模式的 B/S 架构的研究及

47、应用武汉:华中科技大学.2006 年 6 萨师煊. 王珊.数据库系统概论. 高等教育出版社,2002 年 2 月29致谢本次毕业设计的最终完成离不开很多人的大力协助。衷心的感谢上海达内科技有限公司在我实习期间交给我这个项目任务,使我有了设计课题,还感谢在实习期间给我帮助的项目经理以及公司同事。真诚的感谢本次毕业设计的指导老师-宋玲教授,给了我自由选题的机会,在我的论文审稿阶段指出了很多方面的不足,并一一30给出修改意见,对我进行悉心指导,对我的毕业论文最终完成给予了极大的支持和帮助。最后,再一次感谢所有帮助过我的人们!XX 大 学毕业设计(论文)题 目 : 基 于 Java 技 术 的 网 上 交 易 系 统的 开 发学 院: 专 业: 班 级: 学 号: xxx 学生姓名: xx 指导老师: xx

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报