1,spring管理的Bean都是单例的,即使Controller也如此(与Struts2 Action显著的不同点,需特别谨记)。如果要给一个受管的Bean定义属性,就一定要考虑到这个特性。Controller里最常犯的错误就是把page这样的传入类请求参数定义成Controller整个类的属性。这样做很可能因为没有注意到单例特性而使处理方法取得了一个错误的page值(上次请求传入的,这次请求没传入,但值还在里面)。注意:spring管理的Controller是单例的和Struts管理的Aciton是多例是不同的。
2,上个总结提到的(总结2:
http://my.oschina.net/sxgkwei/blog/50983),使用DateUtils来处理时间有关的操作,但注意:一般有2个这样的类:
a:org.apache.commons.lang.time.DateUtils
b:org.apache.http.impl.cookie.DateUtils
如果要格式化时间成字符串,或反向操作,千万别错误的使用了b,代码分享中有一个我自己写的DateUtil(http://www.oschina.net/code/snippet_176115_9640),用这个即可。而b,是总是用格林治(GMT)标准时间来转换的,而我国的是东8区,并不是见鬼的格林治,所以如果用它来转换,会在世界上差8小时,so...总结:在Date->String或反之操作时,一定要头脑清醒,注意到GMT与CST的不同。
3,乱码问题。spring json已经可以正常返回中文,可是一接收到中文却总是乱码。即返回正常,接收不正常,这是什么情况呢,明明已经使用了spring的CharacterEncodingFilter类过滤了吖。这是需要考虑你的web服务器,如tomcat,在server.xml中的标记内加入URIEncoding="UTF-8"也许就能解决。
4,
使用mybatis时,可能会有where查询条件语句内要直接嵌入在java中拼接好的查询条件的情况。这时
在标签内有多个可能条件时需要直接将SQL条件写在首位,如下:
${SQL}
AND ID=#{id}
...
这样写的好处是:
a,因为在首位,所以不需要AND关键字链接,继而传入“ ”字符串也不会出错,而不再首位时,你需要先在前面写好AND,别人传入“ ”时就会出错,而作为java中的不明情况的调用者,是完全有可能传给你“ ”字符串的。
b,不明情况的调用者自己拼接SQL时,可以在前面拼入AND,也可以不拼。不拼,因为在首位当然不会错;拼了,因为在标签内,这个标签有自动修剪首尾关键字的能耐,经过它的修剪自然也不会错。而如果不在首位,调用者是给最前面拼AND呢还是不拼呢?他是不是要跑来看你的XML文件中是不是提供了AND呢?
5,web.xml。一个filter需要filter-mapping来做url或servlet方面的过滤来调用filter类,此时需要特别注意filter-mapping中可以用和两种标签来过滤,而它们的意义是完全不同的,url-pattern自然是一般的url来匹配过滤;可servlet-name则是和已经定义的标签对应的。网上很多的spring ShallowEtagHeaderFilter相关的过滤器配置都使用的servlet-name,我用了之后达不到效果,找了半天才发现是一个标签的问题。果断改为url-pattern,同时对误人子弟的说句:shit!
6,用户输入的内容在页面显示:
标签,然后在显示时${fn:escapeXml(text)}。为什么呢?当然是防止用户输入HTML标签而影响了你这个页面的显示,如果用户写个javascript标签,然后在里面注入点其它地方的JS代码呢?嘿嘿