本文共 5919 字,大约阅读时间需要 19 分钟。
服务器端文档
Contents
这是一份采集系统服务器端实现的详细文档,文档中主要涉及一下几个模块:
1. 配置文件的加载
2. 用户静态信息扫描
3. 静态信息加载
4. 用户权限验证
5. 请求分发
6. 前端数据使用情况
7. 数据库的插入方法
8. 数据库数据来源
采集系统的配置文件为配置路径下的upagather.xml文件。加载配置文件使用框架内部的加载方式。配置文件的结构如下:
<ConfigFile>
<Item>
<Name></Name>
<Param>
<ParamName></ParamName>
<ParamValue></ParamValue>
</Param>
</Item>
</ConfigFile>
具体的加载过程可以参见com.unionpay.upa.configure.ConfigManager类。
整个文件中只有一个ConfigFile节点,每个ConfigFile节点中含有多个Item节点。每个Item节点中包含一个Name节点和多个Param节点。Param节点至少包含两个节点,即ParamName和ParamValue,也可以包含第三个节点ParamDesc。ParamName节点是参数的名称,ParamValue为参数的值。在系统启动的时候需要Item节点的Name值和ParamName来取得相应的参数值。具体取到参数值的方法如下:
ConfigureManager.getInstantce().getPropertyAsInt(“ThreadPool”,”poolnumber”);
upagather.xml文件中的参数在系统启动时全部被加载到com.unionpay.upa.gatherMgr.bll.GatherConstants类中。
下面内容介绍一下当前系统中所有参数的作用,使用Item的Name域来分类。
1) ThreadPool
n poolnumber 线程池的个数
n threadperpool 每个线程池中的线程数
n isordered 插入数据库是是否按照一定的顺序插入,目前使用的是false
2) batch
n batchsize 批处理的规模,现在这个参数没有使用
3) ScriptParams
n 这个Item中定义了前段传来变量的名称,使用情况会在下文予以说明,具体参数的含义参见《客户端解决草案》
4) PicturePath
n path 请求图片所在的相对路径
5) Seperators
n 系统中用到的一些分隔符和一些常用符号
6) SourceType
n 页面来源选项中相对应的类型
n 以DB开头的表示类型存储到数据库是对应的编号
7) Scheduler
n Jobgroup 定时器对应的工作分组
n Jobname 定时器任务的名称
n Trigger 触发器的名称
n Interval 定时器触发的时间间隔,以毫秒为单位
n Expirelength 用户信息过期的时长,以毫秒为单位
8) Otherdata
n 该Item中配置了一些插入数据库时必需而前段又没有传来一些数据
n Status tbl_upa_log_link_visit表中的rec_st域
n Actionrecst tbl_upa_log_action表中的rec_st域
n Actionstatisticsst tbl_upa_log_action表中的statistics_st域
n Nulldate 时间的空值,这个值在现有系统中没有用到,可以删除
9) BrowserType
n 这个Item定义了国内现有占有率比较高几大浏览器的对应的采集编号
10) OsID
n 0 表示访问者使用windows操作系统
n 1 mac操作系统
n 2 linux操作系统,不再细分linux的种类
n 3 其他
使用参数是,直接调用GatherConstants加上相应的参数名称即可。
在配置文件中添加新的参数的具体步骤
1. 添加到配置文件中
创建一个Item,也可使用现有的Item。如下图:
图1:插入新的Item参数
需要注意的是,这里所有的值都是大小写敏感的。
2. 参数的获取
采集系统服务器的参数全部在类con.unionpay.upa.gatherMgr.bll.GatherConstants中定义。入下图:
图2:参数的获取方法
函数的第一个参数是Item的Name域,第二个参数是ParamName域。可以看到,这里插入的是一个字符串,在获取的时候使用的是getPropertyAsString函数。如果是一个数值,可以使用相应的函数,具体这些函数的定义可以在com.unionpay.upa.configure.ConfigManager类中找到。
3. 参数的使用
在使用参数时,值需要用类名加上相应的参数名即可。如下图:
图3:参数的使用
这一块使用了squitz定时器,但是模块内部比较简单。
每隔一定的时间,就将用户信息池里的所有用户信息扫描一遍,将过期的用户删除掉。
时间间隔和过期时间长度在配置文件中都由定义。
该模块在GatherServlet的setupSchedule函数中初始化。扫描参数的定义在upagather.xml文件的Scheduler模块中,具体定时器的参数含义见第二部分第7小节。
任务的具体执行类为com.unionpay.upa.gatherMgr.dal.UserScanner类。具体步骤可以参照类中的execute方法。
数据库中有三张表的内容需要在系统启动的时候加载到内存中,并需要常驻内存:
1. TBL_UPA_LOG_ACTION
2. TBL_UPA_SITE
3. TBL_UPA_SITE_URL
静态信息在加载时,并没有可以配置的选项,以上三张表的内容会被加载到内存中。对内存中表的内容的操作全部在相应的[table_name]Mgr类中进行,这些类在com.unionpay.upa.gatherMgr.bll包中。
如果在数据库中动态更新了以上表的内容,可以登陆到WebContent/adminx/index.jsp页面来进行刷新,以重新加载这些表的数据。
用户请求合法性的验证,需要用户提供其用户名,这个参数会在js前端给出,后台提取。验证方法为:
1. 提取用户的domain对应的SiteDto对象,若该对象不存在则请求不合法
2. 比对SiteDto中的SiteKey域和提取到的用户名,若相同则合法,不相同则非法
不管请求是否合法,系统都会应答指定的图片信息。
Domain是由前端传来的upadm值取得,用户名是由前端传来的upau值取得。
为了不影响采集系统使用者的系统,无论请求是否合法,系统都会返回一张相同的1x1的icon图片。图片的路径定义在配置文件的PicturePath节点的path子节点下面。具体细节参见第一部分第4小节。
请求是被分发到各个线程池中的,分发过程是由前端传来的信息决定的。
取得请求的id和时间戳,合并成为一个字符串,取到新字符串的hash值,即可得到对应的线程池的编号。
这部分内容写在com.unionpay.upa.webbusi.webstruct.GatherServlet类中。具体参见getPoolNo方法。
线程池的个数和每个线程池中的线程数在配置文件的ThreadPool节点中定义。具体参数含义参照第二部分第1小节。
线程池的声明和定义放在com.unionpay.upa.gatherMgr.model.GatherCacheResources类中。
前端参数传递情况 | |||||
1 | 参数名称 | 表名 | 列名 | 其他使用情况 | |
2 | upah | - | |||
3 | upai | tbl_upa_log_visit | visitor_cookie_id | ||
4 | upats | tbl_upa_log_visit | |||
5 | upav | - | |||
6 | upawh | tbl_upa_log_visit | config_resolution | ||
7 | upacd | tbl_upa_log_visit | config_color_depth | ||
8 | upala | tbl_upa_log_visit | location_browser_lang | ||
9 | upacs | tbl_upa_log_visit | charset | ||
10 | upaij | - | |||
11 | upaswf | tbl_upa_log_visit | config_browser_falsh | ||
12 | upau | 用户身份验证 | |||
13 | upaa | ||||
14 | 哈希域 | - | |||
15 | id | - | |||
16 | 首次访问时间 | - | |||
17 | 上次访问时间 | - | |||
18 | 当前访问时间 | - | |||
19 | 访问次数 | tbl_upa_log_visit | visitor_returning | ||
20 | upad | ||||
21 | 哈希域 | - | |||
22 | 当前访问时间 | - | |||
23 | source | tbl_upa_log_visit | referer_type | ||
24 | surl | tbl_upa_log_visit | referer_url | ||
25 | parames | tbl_upa_log_visit | referer_keyword | ||
26 | upab | ||||
27 | 哈希域 | - | |||
28 | 当前访问时间 | - | |||
29 | 本次访问页面数 | tbl_log_link_visit | visit_total_actions | ||
30 | upacsu | 验证访问页面 | |||
31 | uparfu | - | |||
32 | upacsp | - | |||
33 | upadm | 用户身份验证 | |||
“-”表示未使用 |
表1:前端数据使用情况表
参数的含义、说明和编码方式详细参见《客户端解决草案》第二部分。
在采集系统中,服务器端由三处需要往数据库里面插入数据。
1) 新用户来访时,往TBL_UPA_LOG_VISIT和TBL_UPA_LOG_LINK_VISIT表中分别插入一条记录
2) 用户来访时,只向TBL_UPA_LOG_LINK_VISIT表中插入一条记录
3) 遇到新的TBL_UPA_LOG_ACTION时,向TBL_UPA_LOG_ACTION表中插入一条记录
前两次插入在com.unionpay.upa.gatherMgr.bll.GatherLinkMgr类中,第三个在com.unionpay.upa.gatherMgr.bll.LogActionMgr类中。其中第一个插入使用了事务管理。
数据库操作的sql语句写在相应[talbe_name]GATDAO类中,这些类都在com.unionpay.upa.gatherMgr.dal.baseimpl包中。
TBL_UPA_LOG_ACTION | |
log_action_id | 自增模块 |
site_url | header:reffer或前端传来的upacsu |
site_url_title | - |
site_url_type | - |
rec_st | 配置文件 |
statistics_st | 配置文件 |
rec_crt_ts | 服务器时间 |
rec_upd_ts | 和创建时间相同的服务器时间 |
comments | - |
表2:tbl_upa_log_action表数据来源表
TBL_UPA_LOG_LINK_VISIT | |
log_link_visit_id | 自增模块 |
log_action_id | 相应action的id |
log_visit_id | 相应log_visit的id |
visit_action_time | 访问服务器时间 |
visit_total_time | - |
site_url | 当前页面的参数,来自header:reffer |
rec_st | 配置文件 |
rec_crt_ts | 创建记录的服务器时间 |
rec_upd_ts | 更新时间,和创建时间相同 |
comments | - |
visit_total_actions | 前端cookieb,当前访问次数 |
表3:tbl_upa_log_link_visit表数据来源表
TBL_UPA_LOG_VISIT | |
log_visit_id | 自增模块 |
site_id | 相应的site的id |
visitor_returning | 前端cookiea,访问次数 |
visit_first_action_time | 访问的服务器时间 |
visit_last_action_time | 和访问时间相同的时间 |
visitor_cookie_id | 前端,upai+upats |
visit_action_time | 访问的服务器时间 |
leave_action_time | 和访问时间相同的时间 |
visit_total_time | - |
visit_entry_action_id | - |
visit_exit_action_id | - |
visit_total_actions | - |
referer_url | 前端cookied,surl |
referer_keyword | 前端cookied,parames |
referer_type | 前端cookied,source,具体编号见《客户端解决草案》 |
referer_name | - |
config_resolution | 前端upawh |
config_color_depth | 前端upacd |
config_os_id | Header:user-agent,编号见注解 |
config_browser_version | header:user-agent |
config_browser_name | header:user-agent,具体编号见文档《浏览器类型说明》 |
location_browser_lang | 前端upala |
config_plugin | 前端,下面予以说明 |
location_ip | 服务器获取 |
config_browser_flash | 前端upaswf |
charset | 前端upacs |
reserve1 | - |
reserve2 | - |
reserve3 | - |
rec_crt_ts | 访问的服务器时间 |
rec_upd_ts | 和访问时间相同的时间 |
表4:tbl_upa_log_visit表数据来源表
config_plugin域是由多个01字符组成,1表示存在或开启,0表示不存在或关闭。目前该域中只有两种插件统计结果:从左向右,第一个为java是否开启,来自前端upaij,第二个是flash是否支持,来自前端upaswf。
Windows 0
Mac 1
Linux 2
Other 3
转载地址:http://xdebi.baihongyu.com/