第二个项目做完了,总结一下~~
很惭愧,很多次都在《大事记》里面说要坚持写博客的,但项目做完后不是忘了写,就是懒得写,最终在项目里学到的一点东西都淡忘了。如果不能把这些零碎的知识记录下来的话,以后 必定还会做同样的工作,这样不仅浪费时间,更重要的是影响心情!好了,废话不多说,开始写!
首先,这是一个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的博客~~~~
第二个项目做完了,总结一下~~相关推荐
- 艾伟也谈项目管理,项目做完了,总结一下
在连续封闭N个月以及再后来的N个月的加班后,项目终于以延期N个月的结果结束了.不管曾经发生过什么,不管项目是否延期,重要的是项目结束了,所有的项目成员都可以松一口气了.曾经和同事开玩笑说:在我经过过的 ...
- 辞职时老板说:“等项目做完了,给你加薪”项目做完他却被劝退了
01 职场上,在一家公司工作有一定时间后,看不到晋升空间.工资达不到预期要求等因素,大多数人会产生辞职的念头. 单位技术部工程师张工是一名java程序员,今年三月底跟老板提了辞职申请.老板说公司正是用 ...
- git 怎么为开源项目做贡献,怎么有效管理贡献者的提交
,当作为项目贡献者时,我们该怎么做才能方便维护者采纳更新:或者作为项目维护者时,又该怎样有效管理大量贡献者的提交. 5.1 分布式工作流程 同传统的集中式版本控制系统(CVCS)不同,开发者之间的协 ...
- 以Dubbo为例,聊聊如何为开源项目做贡献
作者:kiritomoe 来源:Kirito的技术分享 Github 上有众多优秀的开源项目,大多数 IT 从业者将其当做了予取予求的工具库,遇到什么需求,先去 Github 搜一把,但有没有想过有一 ...
- 写给用我的“新闻推荐项目”做毕设的同学们
故事的背景是这样滴 14年的时候,我还在读研究生,那时候机器学习还算不上是一个重要的计算机学科,如果能顺嘴说一说TF-IDF.Collaborative Filtering这种算法(虽然现在听起来很n ...
- 团队作业第二次—项目选题报告(追光的人)
所属课程 软件工程1916 作业要求 团队作业第二次-项目选题报告 团队名称 追光的人 作业目标 组员提出选题,大家挑选出可行性最高的进行分析,制作选题报告和选题PPT 目录 队员贡献分比例 选题报告 ...
- 团队作业第二次—项目选题报告
作业格式 课程名称:软件工程1916|W(福州大学) 作业要求:团队作业第二次-项目选题报告 团队名称: 那周余嘉熊掌将得队 作业目标:确定和分析选题,绘制评审表 团队信息: 队员学号 队员姓名 博客 ...
- 尚硅谷 java基础第二个项目之客户关系管理系统
尚硅谷 java基础第二个项目之客户关系管理系统. 做了一些完善,增加性别,电话,邮箱有效性验证.其中电话和邮箱验证直接"饮用"了网友的果汁. 在此感谢各位原著大佬们的分享. 具体 ...
- 你还在描等高线地形图?我已经用这款软件做完了地形分析
每当拿到地形起伏较大的设计场地都很苦恼!CAD底图没有等高线.又要做地形分析,怎么办? 项目要求时间又紧,这周又得加班熬夜啦! 不抱怨了!小编开始打开电脑.点开了最熟悉的那个红得发黑的图标.慢慢的启动 ...
最新文章
- 亿万人抢10亿红包的数据监控,如何实现业务零资损?
- 飞桨PaddlePaddle深度学习实战
- mysql商品管理系统总结_Mysql管理总结
- Shiro中的Remember me设置
- 域名解析—MX和cname记录冲突
- oracle的用户自定义异常
- NIO网络编程应用实例——群聊系统
- 武汉大学计算机学院毕业合影,武大校长对毕业合影有求必应
- 122. 买卖股票的最佳时机 II golang
- 如何在没有tomcat情况下直接连接JMX监控JVM
- 未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试...
- tabbar角标 小程序_【沃行课堂】恭喜你遇到“坑”,小程序踩坑指南
- 利用递归实现简单的树结构菜单
- 精益创业:创业2年被京东收购、今夜酒店特价创始人任鑫的反省
- c语言中四种简单的数组排序
- pycharm ssh interpreter 搭建
- 虚幻4皮肤材质_虚幻引擎4.5版本预览说明
- VTK中oberver 和 command 的信息机制详解
- 重装系统后电脑耳机插前面没有声音输出怎么办?
- 二叉树的中序遍历和后序遍历算法
热门文章
- 数据透视表的使用总结
- 明日之后多贝雪山服务器在安卓系统叫什么,明日之后多贝雪山介绍_多贝雪山地图攻略_3DM手游...
- input子系统与tp驱动
- 教你如何把视频转成序列图片的实用技巧
- 一些常见的机器学习模型
- 在微软(Microsoft)工作是怎样一番体验?
- 银河麒麟安装后,网速过慢,经常断网,网卡:RTL8111/8168/8411
- 安装pointgray灰度相机,mindvison,pointgray偏振相机的ubuntu驱动
- 前端实时识别条形码 quagga.js
- WWJ 地形相关链接