第二个项目做完了,总结一下~~
来源:互联网 发布:as400软件开发工程师 编辑:程序博客网 时间:2024/04/29 07:56
很惭愧,很多次都在《大事记》里面说要坚持写博客的,但项目做完后不是忘了写,就是懒得写,最终在项目里学到的一点东西都淡忘了。如果不能把这些零碎的知识记录下来的话,以后 必定还会做同样的工作,这样不仅浪费时间,更重要的是影响心情!好了,废话不多说,开始写!
首先,这是一个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的博客~~~~
- 第二个项目做完了,总结一下~~
- 项目做完了,总结一下
- 做完了PAT (Basic Level) Practise (中文)总结一下
- 学习项目做完了
- [29期] 做完第一个项目的总结 --------------
- 总结做完第一期项目
- 第二个项目开始了.发一下我的VIM配置,各种插件,各种补全
- MY第二个项目总结
- 搭了个SS 总结一下教程
- 做完了学院网站项目的开发。。
- 做完第一个JavaEE项目有感
- mark一下这个项目做完以后需要整理的东西
- 第二个项目总结以及后感
- 11月第二个项目总结
- 项目做完了。有了那么点小小的成就感了
- 一个画钟程序,终于做完了,作个记号
- 工作快2个月了,写一下总结
- SSH项目终于做完了,心里那个高兴呀!
- <<飞 鸟 集>>
- Oracle中SQLPLUS的常用指令收集与技
- reactos操作系统实现(100)
- 游戏服务器的架构设计
- 做成功的项目经理人
- 第二个项目做完了,总结一下~~
- MD5历史
- MySQL中NULL值相关技巧总结
- Linux 2.6.22.6移植到S3C2440之RTC
- MFC中使用Tab Control
- 各种单位换算
- src.rpm noarch.rpm i386.rpm i686.rpm的区别
- Oracle 10g 基础学习
- 消息队列