很惭愧,很多次都在《大事记》里面说要坚持写博客的,但项目做完后不是忘了写,就是懒得写,最终在项目里学到的一点东西都淡忘了。如果不能把这些零碎的知识记录下来的话,以后 必定还会做同样的工作,这样不仅浪费时间,更重要的是影响心情!好了,废话不多说,开始写!

首先,这是一个wap工程。RFP说只能从手机上浏览,后来发现要用wml写。说实话,和html相比,wml就是个垃圾。不知道当初谁做的规定,硬是要新开辟一种标记语言,直接让手机兼容html不就行了。可能是手机的显示效果不如pc,于是就在html基础上简化了很多,只留下了最基本的功能。协议这东西还是太抽象了,不能理解啊。。

花了2天的时间搭界面,一共有4个页面。这就是体力活了,下面说一下wml使用时要注意的几点吧:

1.wml不支持session,从一个页面跳转到另一个页面时session会丢失,常用的解决方法是重写url,即调用方法

response.encodeURL("/wap/replyPage.jsp");

如此就可以继续使用session了!

2.wml提交表单的方式和html有很大不同:

<anchor>send 
<do type="accept">
<go href="<%=response.encodeURL(session.getAttribute("url")+"?action=reply")%>" method="post">
<postfield name="recipientNumber" value="$recipientNumber"/>
<postfield name="text" value="$text"/>
<postfield name="contacter" value="${sessionScope.senderNumber}"/>
</go>
</do>
</anchor>

关键的标签是<postfield>,name属性是request.getParameter("")要用到的,value用的是EL表达式,跟在$后面的是表单项的名字,这是提交的内容,注意前面还有<do><go>标签。<go>标签指明了表单提交的地址,<do>标签则是固定用法,记住就行。

3.EL表达式:

要注意的是{}里面的内容是从request/session/response中取出的参数,前面可以加sessionScope等前缀。其他的正常。

4.jstl标签

最常用的3个标签<c:choose><c:if><c:out>

<c:choose>

<c:when test="">cp</c:when>

.

.

.

<c:otherwise>pc</c:otherwise>

</c:choose>

以上面的为例,test里面是判断的内容,一般是EL表达式,如果是true,则打印出cp,否则,打印pc。

<c:if test=""></c:if>的用法与此相似。

<c:out value="">,其实没什么用,在页面中直接写要输出的内容就行。

5.<card id="" title=""></card>

同一页面不同卡片之间可以互相跳转,方法是<go href="#id"/>,id是card的id号。title是同html的title,即标题。

6.正则表达式:

先把http的正则表达式贴出来:https?://[-//w.]+(://d+)?(/([//w/_.]*)?)?。qq聊天里面所有的http链接都可以直接点击就是通过正则表达式来匹配的。

贴一段代码出来作为参考:

Pattern pattern = Pattern.compile("https?://[-//w.]+(://d+)?(/([//w/_.]*)?)?");
      Matcher matcher = pattern.matcher(content);

while(matcher.find()) {
          String url = matcher.group();
          urls.add(url);
      }

matcher.find()返回boolean,即是否有匹配的字符串,而且每次向后找下一个匹配字串。matcher.group()输出匹配的字串(是保护匹配字串的字串)。

7.subString(startindex,endindex)

取startindex处的字符,但不取endindex处的字符

页面的问题说完了,再来说java代码吧,要注意的地方有这么几个:

1.如何解析.xml文件并读出里面的内容?

这里先贴出一段代码,以后直接修改文件路径吧:

DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();
  DocumentBuilder dombuilder=domfac.newDocumentBuilder();

InputStream is = this.getClass().getResourceAsStream("/wap_client_block/blockedIPs.xml");
  Document doc=dombuilder.parse(is);
  NodeList nodeList=doc.getElementsByTagName("ip");
  for (int index = 0; index < nodeList.getLength(); index++){
   Element element = (Element) nodeList.item(index);
   String blockedIP = element.getAttribute("value");
   if(ip.equals(blockedIP))return false;
  }

其中涉及到一个文件路径问题,在项目中尽量使用相对路径,不要使用绝对路径,否则不利于项目的移植。Tomcat的默认路径是在WEB-INF/classes下的。

2.如何解析.properties文件?

也贴出一段代码吧,用的时候直接改路径,囧。。

Properties props = new Properties();  
  InputStream in = this.getClass().getResourceAsStream("/relay/relay.properties");  
  props.load(in);   
  in.close();  
  Long x =Long.parseLong(props.getProperty("relay"));

3.再说一说即时聊天系统的ajax实现方法吧。

关键实现点有二:

One.发送信息的时候,会设置一个监听器,

XMLHttpRequest.onreadystatechange=processResponse;

意思是当发送成功是,执行处理响应函数,一般是向页面中插入响应信息的函数

Two.设置一个定时器,每隔xx秒向服务器发送Null请求,目的是检查是否有新的信息。

要注意的知识点就这么多吧,主要的时间还是花在项目本身代码的理解上面,下面说一下:

1.  String tempChecked=phoneNumberHandler.checkPhoneNumber(temp);
  String recipientNumber=PhoneNumberChecker.addPlusSignToPhoneNumber(tempChecked);

这两个方法一般是配合着用。前者是完善带countycode的number,后者是为number加+或者去掉00,注意:number的标准是+8613456789012,存到数据库里面都是标准的,所以存入之前必须进行完善。

2.getCountryCode(number)这个方法的参数必须是带code的,它就是对code进行遍历,看有没有startwith()的。

3.然后就是发短信,这个纠结了好久,就是调用sendInternal()方法,但是因为sender的特殊性,sendInternalAspect()里面关于sender的属性的代码段必须绕过去。

4.NullPointerException

这个就是对一个null进行操作的Exception。比如,当sender==null是,操作sender.getId()就会抛这个异常。

重提交总结:

1.先是code类型的问题,那个问题高啸问过,回答是String,但我想偷懒,又因为他代码里都是Long型,只有RFP里面说是String,于是觉得是zozoc那边没道理,就没改,并在Release Note里面进行了说明。但还是被打回来了,结论是:能改的尽量改,小亏可以吃,大亏可以争。

2.控件不显示的问题,这是winwap的bug,winwap和symbian对wml的显示效果不同,第一次jira的时候没看懂他的问题。后来zozoc发了截图给我,我才发现symbian不支持<do/>标签,导致链接不显示。

<go href="<%=response.encodeURL(session.getAttribute("url")+"?action=reply")%>" method="post">
<postfield name="recipientNumber" value="$recipientNumber"/>
<postfield name="text" value="$text"/>
<postfield name="contacter" value="${sessionScope.senderNumber}"/>
</go>

像这样,直接指定href,不需要用<do/>标签。

最后提交了,communication了,但是被auto-accept了,没有被光明正大的accept,有点遗憾,希望他能看到communication。

结论一个,UI的问题最好发截图,图比文字强百倍!

就这么多吧,欢迎光临fuqingtian的博客~~~~

第二个项目做完了,总结一下~~相关推荐

  1. 艾伟也谈项目管理,项目做完了,总结一下

    在连续封闭N个月以及再后来的N个月的加班后,项目终于以延期N个月的结果结束了.不管曾经发生过什么,不管项目是否延期,重要的是项目结束了,所有的项目成员都可以松一口气了.曾经和同事开玩笑说:在我经过过的 ...

  2. 辞职时老板说:“等项目做完了,给你加薪”项目做完他却被劝退了

    01 职场上,在一家公司工作有一定时间后,看不到晋升空间.工资达不到预期要求等因素,大多数人会产生辞职的念头. 单位技术部工程师张工是一名java程序员,今年三月底跟老板提了辞职申请.老板说公司正是用 ...

  3. git 怎么为开源项目做贡献,怎么有效管理贡献者的提交

    ,当作为项目贡献者时,我们该怎么做才能方便维护者采纳更新:或者作为项目维护者时,又该怎样有效管理大量贡献者的提交. 5.1  分布式工作流程 同传统的集中式版本控制系统(CVCS)不同,开发者之间的协 ...

  4. 以Dubbo为例,聊聊如何为开源项目做贡献

    作者:kiritomoe 来源:Kirito的技术分享 Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一 ...

  5. 写给用我的“新闻推荐项目”做毕设的同学们

    故事的背景是这样滴 14年的时候,我还在读研究生,那时候机器学习还算不上是一个重要的计算机学科,如果能顺嘴说一说TF-IDF.Collaborative Filtering这种算法(虽然现在听起来很n ...

  6. 团队作业第二次—项目选题报告(追光的人)

    所属课程 软件工程1916 作业要求 团队作业第二次-项目选题报告 团队名称 追光的人 作业目标 组员提出选题,大家挑选出可行性最高的进行分析,制作选题报告和选题PPT 目录 队员贡献分比例 选题报告 ...

  7. 团队作业第二次—项目选题报告

    作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:团队作业第二次-项目选题报告 团队名称: 那周余嘉熊掌将得队 作业目标:确定和分析选题,绘制评审表 团队信息: 队员学号 队员姓名 博客 ...

  8. 尚硅谷 java基础第二个项目之客户关系管理系统

    尚硅谷 java基础第二个项目之客户关系管理系统. 做了一些完善,增加性别,电话,邮箱有效性验证.其中电话和邮箱验证直接"饮用"了网友的果汁. 在此感谢各位原著大佬们的分享. 具体 ...

  9. 你还在描等高线地形图?我已经用这款软件做完了地形分析

    每当拿到地形起伏较大的设计场地都很苦恼!CAD底图没有等高线.又要做地形分析,怎么办? 项目要求时间又紧,这周又得加班熬夜啦! 不抱怨了!小编开始打开电脑.点开了最熟悉的那个红得发黑的图标.慢慢的启动 ...

最新文章

  1. 亿万人抢10亿红包的数据监控,如何实现业务零资损?
  2. 飞桨PaddlePaddle深度学习实战
  3. mysql商品管理系统总结_Mysql管理总结
  4. Shiro中的Remember me设置
  5. 域名解析—MX和cname记录冲突
  6. oracle的用户自定义异常
  7. NIO网络编程应用实例——群聊系统
  8. 武汉大学计算机学院毕业合影,武大校长对毕业合影有求必应
  9. 122. 买卖股票的最佳时机 II golang
  10. 如何在没有tomcat情况下直接连接JMX监控JVM
  11. 未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试...
  12. tabbar角标 小程序_【沃行课堂】恭喜你遇到“坑”,小程序踩坑指南
  13. 利用递归实现简单的树结构菜单
  14. 精益创业:创业2年被京东收购、今夜酒店特价创始人任鑫的反省
  15. c语言中四种简单的数组排序
  16. pycharm ssh interpreter 搭建
  17. 虚幻4皮肤材质_虚幻引擎4.5版本预览说明
  18. VTK中oberver 和 command 的信息机制详解
  19. 重装系统后电脑耳机插前面没有声音输出怎么办?
  20. 二叉树的中序遍历和后序遍历算法

热门文章

  1. 数据透视表的使用总结
  2. 明日之后多贝雪山服务器在安卓系统叫什么,明日之后多贝雪山介绍_多贝雪山地图攻略_3DM手游...
  3. input子系统与tp驱动
  4. 教你如何把视频转成序列图片的实用技巧
  5. 一些常见的机器学习模型
  6. 在微软(Microsoft)工作是怎样一番体验?
  7. 银河麒麟安装后,网速过慢,经常断网,网卡:RTL8111/8168/8411
  8. 安装pointgray灰度相机,mindvison,pointgray偏振相机的ubuntu驱动
  9. 前端实时识别条形码 quagga.js
  10. WWJ 地形相关链接