nexus在downwap继续开发 [Permalink ]
Wed Sep 29 11:41:48 CST 2004
Category [working on downwap. ]
因为业务需要,现在利用现有nexus基础,为downjoy.com做wap应用,应用名称为downwap。
Posted by: miles
Comments [1 ] |
借助xml数据岛的站点信息统计 续 [Permalink ]
Thu Sep 02 14:00:37 CST 2004
Category [working on downwap. ]
这次更新了这部分程序。效果又上一个台阶。
这次一个重要改进,是对于数据的缓存。因为这些查询时效性要求不高(几分钟更新一次完全没有问题),而且查询本身开销很大,所以做的时候就有考虑cache。cache的更新方案有两个:
每次数据表更新数据的同时更新cache
不关心实时数据情况,每隔固定时间段重新load cache
第一种方法因为cache时刻保证内容的同步性,而且cache实际上是脱机的,所以对于显示时效性要求高的应用,比如论坛的帖子列表比较合适。他的缺点是对于更新操作比较分散的应用代码的改动量较大,而且容易使得cache和数据库完全丧失数据一致性。
第二种方法的优点是数据一致性容易保证,而且对现有代码完全没有影响。缺点则是效率相对比较低,而且时效性和效率完全成反比关系,要保证时效性,就得频繁的查询数据库。
结合信息统计应用本身特点,以及开发的具体情况,权衡利弊以后我决定采用第二种方法。cache在context load时候建立,有一个timer保证以固定时间间隔reload cache。
效果如下,请注意中间的“查询”那个部分:
当前查询日期:
年
月
日
总用户数
wap用户数
wap总流量
wap下载量
html下载量
本月新用户数
本月用户增长率
一周以来新用户数
一周以来用户增长率
一周以来活动用户数
当月免费wap下载量
当日免费wap下载量
当月收费wap下载量
当日收费wap下载量
当月免费html下载量
当日免费html下载量
当月收费html下载量
当日收费html下载量
日流量查询
==>
日流量统计
?2004, downjoy.com
Posted by: miles
Comments [0 ] |
Posted by: miles
Comments [2 ] |
issues, 040601 [Permalink ]
Tue Jun 01 14:01:04 CST 2004
Category [working on downwap. ]
客户端兼容性问题。模拟器上测试没有任何问题,M320还是不行。问题有两个:
汉字编码。对于模拟器,对汉字的处理方法等同于html浏览器作普通html客户端时候的做法。就是说,显示和入库,都需要做一个编码转换。但是,M320却用不着。只能再测试看看了。。如果真的有这种差异,还是不容易处理阿。。
A: 通过检查客户端类型解决了。扩展性不好。期待更好的方法。
request保存值问题。现在做法,是在用户请求某些需要登录的操作(比如回复帖子)的时候,进行权限检查(此时的request URI可能是:/wml/fcs.jw?act=goreply&pid=12345)。如果未登录,就在servlet里面直接forward到用户管理的servlet(/wml/mcs.jw?act=gologin&from=/wml/fcs.jw?act=goreply&pid=12345),并且在里面进一步forward到login.jwml(这是login form,pagefield包括username,password,from,和act。其中act=loginmember),并且带上from参数。用户填好表单之后,仍然提交回用户管理servlet(mcs.jw)。在这个servlet中,根据act(loginmember)进行登录。当登录完成,再forward回来。整个流程本身没什么问题。同上,模拟器正常。但是,M320中,最后一次act却成了goreply(期待值是loginmember),导致叶面出错。怎么会这样呢?request里面的参数居然跨request存在?而且没有被覆盖?晕啊。。[流程参看下图]
A: 没法子。加了一个冗余的request.setAttribute()。似乎可以解决。
问题在于from参数本身可能带有查询字符串。比如:/nexus/wml/fcs.jw?act=reply&pid=123。一般的客户端,比如IE,处理时候没有问题,因为这个字串会encode。也就是说,允许form field内容有&。但是,对于m320就不同了。这里的&会把post数据截断。目前还没有好办法,晚上回去研究一下。
找到问题了。。。原来M320对于url的编码仅仅限于%(会变成%25),其他字符,比如&/都不会处理。。现在只能是手动的进行编码和解码了。没有办法。还好只是在UI层
Posted by: miles
Comments [0 ] |
开发环境 [补] [Permalink ]
Fri May 28 11:02:02 CST 2004
Category [working on downwap. ]
整个开发/测试/运行的环境。
tomcat4.0.x和4.1.x有显著不同!参考issues, 040520。
开发环境
项目
内容
Platform
Windows 2000 Server Edition
JDK(JRE)
1.4_02
Web Server
IIS 5.0
Jsp/Servlet Container
jakarta-tomcat-4.1.27-LE-jdk14
IDE
Borland JBuilder X Enterprise Trial
运行环境
项目
内容
Platform
Windows 2000 Server Edition
JDK(JRE)
1.4_02
Web Server
IIS 5.0
Jsp/Servlet Container
Tomcat 5.0.x
测试环境
项目
内容
Platform
Windows 2000 Serv/Prof Edition
Client
WinWap 3.1 PRO
Mitsubishi M320
Nokia Wap Toolkit
Phone.Com Simulator
IE 6
Posted by: miles
Comments [0 ] |
issues, 040526 [Permalink ]
Thu May 27 14:44:44 CST 2004
Category [working on downwap. ]
encoding。昨天发现手机支持的编码似乎很有限。有些模拟器(Nokia Wap Toolkit 6110/6150;phone.com)上,我现在采用的encoding,gbk,根本通过不了。我的M320,还有winwap倒是没有问题。
A: 改成gb2312,就好了
encoding。以前为了转换gb汉字到xml entity,用的是简单的字符串处理的方法。主要是觉得分析tag,然后替换里面的内容好麻烦。
A: 笨啊。。DOM是做什么的!当年还经常用来着。。 晕!
truncate。看到资料说,一个只能有1.4k内容。谁定的这么奇怪的规定 本来手机都有超时的嘛。。首页latest post list(20条标题而已阿)刚好超过。。。和上面一样,我的M320/winwap仍然没有问题。看来M320的wml支持好像比较新。这下麻烦了。。我怎么知道有没有超过?如果简单内容还好,比如帖子详细信息,我直接“[请登录论坛查看]”或者“show me more”就行了。但是,像这种标题列表动态的东西,就很难说几条会超过。。是不是需要做一个方法,去remove呢??
A: 帖子信息已经分页显示了。做法是在xsl里面处理。不过标题仍然是问题。我现在做法是留够余量。回复列表仍然没有处理。有时候游懒惰的想法,觉得wap毕竟是html版的补充,又不是为了取代他。也不用太过追求完美。
@#@#$!@#。M320提交帖子汉字出乱码;登录时候,如果密码大写就通不过(我已经ignore case了阿。winwap就可以通过的。)。
A: 是编码问题。从PC上模拟器里和手机上提交过来的文字编码不同。现在是判断了终端类型。扩展性不好,不过管用。
为什么wbmp这么差效果?不过看上去倒是挺有历史感,呵呵。。现在我是在网上直接gif=>wbmp。还是找个工具把。。据说ps7.0直接支持wbmp。可我的刚好是6.0。
A: 7.0的确支持。效果很好
模拟器里的7110,只能通过gateway方式上网。麻烦,还得打电话给移动。
A: 懒得搞了。多发动群众把。
Posted by: miles
Comments [1 ] |
class view [Permalink ]
Thu May 27 14:33:28 CST 2004
Category [working on downwap. ]
目前为止的class view:
Posted by: miles
Comments [0 ] |
issues, 040520 [Permalink ]
Thu May 27 14:32:44 CST 2004
Category [working on downwap. ]
ContentType。我需要让所有的/wml下面的servlet和jsp的contentType是text/vnd.wap.wml,可是,如果一个一个设置,多麻烦阿。所以呢,考虑到用一个filter,过滤所有/wml开头的请求,设置response的contentType。建立一个Filter,在他的doFilter里面response.setContentType("text/vnd.wap.wml"),可是呢,却对jsp不管用!
A: 检查work目录,观察jsp生成的java源码,发现在刚刚进入_jspService的时候,会自动加上:
response.setContentType("text/html;charset=ISO-8859-1");。所以filter在他之前设置的contentType就白瞎了。。既然不能更改设置contentType的顺序,那就让它失效!
所以在这里引入了一个WmlMimeServletResponseWrapper。他的作用主要在这几段:
private static final String CONTENT_TYPE = "text/vnd.wap.wml";
public WmlMimeServletResponseWrapper(HttpServletResponse response) {
super(response);
response.setContentType(CONTENT_TYPE);
}
public void setContentType(String type) {
super.setContentType(CONTENT_TYPE);
}
很简单,就不说了。不管传入什么type,我统统不理会,一律vnd.wap.wml。不过,这里有一个小问题。最初,我是把setContentType方法留空了。看上去也很合理,而且在tomcat4.0.6下面运行很正常。可是,到了tomcat4.1.27/5就不正常了。百思不得其解,把它改成了现在的样子,问题得以解决。究竟为什么呢?有空看看tomcat的源码吧。跟踪看看究竟发生了什么。
构造一个XSLT的transformer,是需要时间的。他的输入参数,是一个xsl文件资源。
A: 因为一般情况下,xsl文件不会频繁更新,所以这里可以考虑做成factory,维护一个static的transformer集合。
Posted by: miles
Comments [2 ] |
overlook. [补] [Permalink ]
Wed May 26 13:00:24 CST 2004
Category [working on downwap. ]
大方向上是确定的,框架就是标准的MVC。简单明了是第一阶段目标,refactoring将会贯穿始终。对于所有的数据访问类写unittest。就算不极限至少也争取快捷一点。
基本的数据访问字符处理什么的,就用自己几年前写的那个类库吧。毕竟用的时间比较长。虽然不够新潮,不过该有的都有。没有的就扩展加上。
前台。。开始时候有考虑struts,后来想想,对于wap的wml版,用struts有点过了。benefits似乎远远弥补不了drawbacks。干脆就分离wml版和html版的整个前台算了。wml版就力求简单,delicate的东西以后作html版时候再说。
后台呢?能复用当然最好了。将来还能提供soap调用什么的就更完美了,wahaha。。流口水中。。。。问题是——如何实现比较好呢?如何和前台接口呢?选择多多阿。用传统的DTO么?想着一堆堆的字段映射啦,表间关系啦,就头疼。我这么懒的人,做这种繁琐的事情,简直是~~ 同样是体力劳动,不如去拉架子车了。 一不留神想到了XSL。XSL是个好东西,只要提供原始XML数据,就可以转换成各种形式文档。wml,html,或者其他格式的xml。。为所欲为。而且以前没怎么用过,做起来积极性也高一点点。就他了。
这样不错。。后边就轻量级了。只要把数据封装成简单的xml,就算完成任务了。呵呵。。缺点?当然有。1。弱类型。2。数据库映射还得维护(这个实在不想搞 )。还有就是不能利用getter setter本身的便利(比如在struts中)。暂时想到这些。肯定还有不少。不过,“轻量级”/“扩展性”这两个优点的确诱人。做做看吧,见到的这方面实例不多,自己走一遍,好处还是不少的。
还有要考虑的。是直接返回客户端xml+xsl stylesheet,还是服务器上转换好,再返回client呢?哈!想什么呢,只能是后者阿!除了十几几十MB的browser,谁没事带个xsl解析器的啊。给手机一个xml让他找到xsl然后transform。。呵呵。至少在这个季度还是神化。我的手机能显示gif,我都谢谢他了。xslt看来是唯一的选择——没有选择其实也是种幸福哦。
总结一下:
快捷的开发过程
mvc框架
xml+xslt
目的是多种客户端 。
Posted by: miles
Comments [2 ] |
关于http://2yup.com/nexus/ [补] [Permalink ]
Tue May 25 11:16:00 CST 2004
Category [working on downwap. ]
一直以来,都想用java重写www.2yup.com。asp简单易用没错,但是随着程序的发展,隐患是越来越多。要实现一个功能,往往要兜很大的圈子。实在忍无可忍 了。
动机是有了,可是却没有作案时间。 还好,正有打算做一个wap版论坛。就把这个做切入点吧。做新东西,新鲜感还是有滴。。说动就动!每天没事就构思构思。
Comments [0 ] |