PS:此Web应用已经上传到本人的资源下了,可以下载整个包。
冒险商人ver1.0开发文档
--《冒险岛Online》物价记录系统
一、需求分析
1.1 需求概述
经常玩冒险岛的玩家肯定是会涉及到自由市场的买卖。有些新手在里面各种被骗,好东西在手却以很烂的价格出售,自己还不知道;另外一些人就算很少的东西,也可以几天之内迅速发家致富。这就是自由市场的魅力。由于不知道市场行情,很多人卖东西都是看了好几家店,然后做出了一个相对自己满意的价格。但是往往很多物品,有些人就没有卖,找起来就更难找,这不但浪费时间,也浪费精力。于是,一款记录冒险岛物价的系统在这样的要求下应运而生。
1.2 系统搭建
框架:Strut2.3.7 + ExtJs4.0.7
数据库:Mysql5.2
语言:J2EE
会J2EE开发的应该能很容易搭建本系统。总目录下的MapleStoryTrade就是放入Tomcat7下webapps里面的。然后访问的话就http://127.0.0.1:8080/MapleStoryTrade/。这样就行。
这个目录下的db是数据库建表语句。
Extjs是Extjs框架最小的一个部分,可以运行。
Resource是用来存放物品图片还有网页的其他图片的。
总目录下的截图是这个项目运行的实际截图。当然数据不多,这每个区的行情都不一样,只有自己用自己记录了。
总目录下的MapleTrader是后台java程序的Eclipse项目文件夹,带有源代码。就在src目录下。
1.3 系统模块分析
本系统前台使用Web方式录入数据,以及查询数据。后台使用Mysql数据库记录数据。
1.4 前台功能模块设计
本系统前台功能模块主要有如下几个(ver1.0):
A.商品分类查询功能
B.商品录入功能
二、详细设计
2.1 功能模块设计
根据需求分析设计本系统共分为3个功能模块:
2.1.1 商品价格录入功能
a.价格分类录入(装备、卷轴、道具)。
b.具体录入还要填入相应物品信息。
(b1)对于数据库里未存在的物品信息,则添加到数据库。
(b2)对于数据库里已经存在的物品信息,则更新数据库。
c.支持图片导入(导入图片地址)。
2.1.2 商品价格检索功能
a.支持按物品名称和类型检索物品价格的低级检索功能。
b.支持分类、条件等高级检索物品价格的高级检索功能。(v1.0未实现)
2.1.3 商品价格的删除及修改功能(v1.0未实现)
a.支持在检索结果处进行价格修改。
b.支持在检索结果处进行条目删除。
2.2 数据库表设计
本系统使用的数据表用于处理冒险岛商品数据,由于冒险岛商品种类繁多,数量很大,需要对商品数据进行分类。这里将商品分为3类:装备、道具、卷轴。
装备数据表:EQUIPMENT
装备数据表EQUIPMENT | |||||||||
ID (ID) | 名称 (NAME) | 等级 (LEVEL) | 所属大类 (CLASS) | 所属小类 (SUBCLASS) | 职业 (PRO) | 图片链接 (IMAGE) | 最低价格(MIN)
| 最高价格(MAX)
| 单位 (UNIT) |
自动生成 | 128位字符 | 4位整数 | 32位字符 | 32位字符 | 32位字符 | 1024位字符 | 32位整数 | 32位整数 | 16位字符 |
道具数据表:ITEM
道具数据表ITEM | ||||||
ID (ID) | 名称 (NAME) | 分类 (CLASS) | 图片链接 (IMAGE) | 最低价格 (MIN) | 最高价格 (MAX) | 单位 (UNIT) |
自动生成 | 128位字符 | 32位字符 | 1024位字符 | 32位整数 | 32位整数 | 16位字符 |
卷轴数据表:REEL
卷轴数据表REEL | ||||||||
ID (ID) | 名称 (NAME) | 所属大类 (CLASS) | 所属小类 (SUBCLASS) | 成功概率 (PERCENTAGE) | 图片链接 (IMAGE) | 最低价格 (MIN) | 最高价格 (MAX) | 单位 (UNIT) |
自动生成 | 128位字符 | 32位字符 | 32位字符 | 16位字符 | 1024位字符 | 32位整数 | 32位整数 | 16位字符 |
三、界面构成
本系统ver1.0目前由于功能比较容易,所以实现的具体来说就2个jsp页面。这些都可以在随压缩文件的目录里截图看到,这里也放上几张作为说明。
由于页面关系,这里就不一一放入文档了。
四、后台设计问题
4.1 Java包结构
如图4,这里可以看到我一共建立了3个包,分别是lhb.action(用来放action),lhb.pojo(用来放pojo),lhb.util(用来放工具类)。这里简要介绍一下每一个类的用途。
AddEquipData.java 用来处理装备录入的Action
AddItemData.java 用来处理道具录入的Action
AddReelData.java 用来处理卷轴录入的Action
Existence.java 用来检测是否服务器存在有同名的物品
Search.java 用来查找的Action
Equipment.java 装备pojo类
Item.java 道具pojo类
Reel.java 卷轴pojo类
DBManager.java 数据库操作类
MTUtil.java 静态工具方法类
TypeManager.java 类型管理类,用于处理一些静态变量
当然本工程还导入了Struts2.3.7、mysql、tomcat7的必要lib(图5)。
4.2 Action设计
本工程的Action设计完全依照Struts2的设计流程,当然目前v1.0版本没有使用tomcat的数据库连接池。那些以后再说。V1.0所实现的功能在前面已经标出。目前大体就是处理3种响应的Action。
Existence。这个Action主要处理前台的一个ajax响应。就是在物品录入的时候的“check”按钮的响应。这个Action的功能就是检测数据库里是否有同种类型,同样名称的数据存在。如果存在,则返回一个String类型的true,不存在就返回false。很简单。
Add*Data。这种类型的Action用来处理向数据库插入数据。
由于用到了文件上传,所以前台在提交数据的时候,会提交一个File类型的文件来。然后Struts2会自动加入2个属性,一个是文件的名称。一个是文件类型。这就让开发更加方便。返回数据是success和resultMsg。这里Struts2通过配置以后会将这些信息自动转换为json数据,方便和前台的传递。
Search。这个Action主要是处理低级查找的。前台会传递一个name和searchType来到这个Action。这里通过判断传入的searchType的值来判断想要搜索的物品类型。从而调用不同的数据库处理方法。前台是通过具体的搜索项,发送ajax请求。来获得store。再更新表格的。
4.3 Struts.xml配置
Struts.xml的配置和普通的Struts2差不太多。具体要说一下需要注意的配置项:
Package如下:
<!-- 指定上传路径 -->
<constant name="struts.multipart.saveDir" value="E:\\Java\\apache-tomcat-7.0.33\\webapps\\MapleStoryTrade\\resource\\maple_temp"></constant>
<!-- JSON数据Action -->
<package name="jsonInfo" extends="json-default">
<action name="Search" class="lhb.action.Search">
<result type="json"/>
</action>
<action name="Existence" class="lhb.action.Existence">
<result type="json"/>
</action>
<action name="AddEquipData" class="lhb.action.AddEquipData">
<interceptor-ref name="fileUploadStack"></interceptor-ref>
<result type="json">
<param name="contentType">text/html</param>
<param name="includeProperties">success,resultMsg</param>
</result>
</action>
<action name="AddItemData" class="lhb.action.AddItemData">
<interceptor-ref name="fileUploadStack"></interceptor-ref>
<result type="json">
<param name="contentType">text/html</param>
<param name="includeProperties">success,resultMsg</param>
</result>
</action>
<action name="AddReelData" class="lhb.action.AddReelData">
<interceptor-ref name="fileUploadStack"></interceptor-ref>
<result type="json">
<param name="contentType">text/html</param>
<param name="includeProperties">success,resultMsg</param>
</result>
</action>
</package>
这里是一定要返回json-default类型的,因为前台的处理是extjs来做。都是json才行。这么配置需要引入Struts的一个插件包。就是那个struts2-json-plugin。
第二个需要注意的是返回一定要<result type="json"/>,这样json类型的。
第三个需要注意的问题是<paramname="contentType">text/html</param>,这个返回的是一个text,如果不设置,会返回一个文件,类似下载文件一样,不过没有后缀名。可以保存为txt看一下,是一个json的文档。
第四个需要注意的问题是<paramname="includeProperties">success,resultMsg</param>,这里设置的是返回的json包括的数据。Struts2会自动调用Action里的getter方法来获得这2个值。这2个值在AJAX传递的时候尤其重要。
第五个需要注意的问题是<interceptor-refname="fileUploadStack"></interceptor-ref>这个一定要加上才可以传文件。
第六个问题是指定的上传路径,这里是一个写死的绝对路径。可以根据需要更改。这个路径的作用就是上传文件的临时目录。文件通过前台传过来以后,会生成一个tmp类型的文件。就是放这个文件用的。在Action中有对于这个文件的处理,说的简单就是读入这个tmp文件,然后通过获取的文件名,重新在指定的位置生成相应其他类型的文件。
五、前台设计问题
前台使用Extjs来搭建框架界面,由于比较简单的功能。所以就使用了2个页面。一个欢迎页面,一个index向导页面。当然,后期可以再根据需要扩展。
使用Extjs需要注意的就是api的用法。可以通过查阅官网的api获得一些帮助,里面有很清楚的示例代码。另外,网络上的一些代码也可以。不过网络上有很多低版本的Extjs开发心得。并不适用于Extjs4.比如说Extjs有一个json对象的构建器。在Ext.JSON.decode这里,而老版本的就在Ext.util.JSON.decode这。这个是通过ajax访问后台所必须的东西。否则后台返回的就是一个json对象,如果不用这个解析器要读那个对象还比较麻烦。
七、结语
用了几天时间,开发了这个比较袖珍的系统。当然以此系统为原型,其实可以开发出其他更多的系统。这些系统不外乎是对于数据的操作:增删改查。而通过Java可以轻松做到。配合上前台的Extjs框架,也能有不错的用户体验效果。
当然,本系统后续开发的内容还很多,比如高级搜索,比如物品内容的修改,删除等等。感兴趣的请关注作者的QQ:406528519。作者会继续做后续开发的。欢迎感兴趣的朋友一起探讨。
PS:本程序包已经上传到本人的资源下了,可以去下载。