java web开发中各种注意点总结(1)

原创
2012/02/01 12:07
阅读数 1.4K

        此篇只是我个人在java web开发中遇到的一些小点的经验总结,如果你也有自己的心得,欢迎也把它们告诉我,让我们一起在技术多多交流共同提高。

        1,三分之一乘以六,你会怎么写?1/3*6 还是 6*1/3?当然,我会选择后者,我不提你也许不会注意,但我提到这儿,想必你一看都知道原因。所以:在计算式编写时,要尽量把除法这种可能会产生精度问题的运算放到最后去做。

        2,开发时,model类和表一般都是对应的,那建立时,如果一个属性是数字,你会使用int还是Integer?我会选择后者,因为在获得表中数据时,用了int,但表中这个字段没有值,会出现什么情况我不清楚,也许各个DAO层的框架会有不同的处理,但int必有一值,你再get这个int,那get出的是你想要的么,你可以想想。但Integer就会有所不同,最起码你可以判null再处理。所以:建立model类时,尽量用封装类型。

        3,如果用的mysql,貌似SQL的sum函数可能返回空值,而count函数则最起码会有个0,所以你得注意了,如果统计数据总数的count语句,你可以在java的那个方法上写成返回long;但是如果是sum函数来做加法统计,你最好还是写成返回Long。

        4,现在的表中和model中,一般定义id时都已经定义的是Long了,所以,如果你用count返回记录条数,也最好写成Long或者long,用int的话,可能出现的问题,你懂的...

        5,程序嘛,肯定离不开字符串操作,所以如果要操作字符串,无论这个字符串来自前台用户输入,还是从后面数据库中取得的,那都请注意了:必须先判null,再判是否是空格串,如果要subSting,那就更要连长短都要判断,不要截到空出去了。

        6,如果要操作有小数点的数字(1.5,2.31)这样的,比如商品价格啥的,某类商品打折信息8折(0.8)啥的。如果数据库支持Bigdecimal,那么这个字段你最好用它,并且对应的model属性也用Bigdecimal,不要贪图float或者double的简单,这玩意儿不小心给你搞出精度问题,钱的问题,估计你要被批死;如果数据库不支持,那就用string字符串,java的model属性也用字符串,这样就有强迫后来者必须转换Bigdecimal来进行计算的意图,避免不必要的精度问题出现,1.0-0.9在double上等于几大家都知道的吧...

        7,java的StringBuffer和StringBuilder,大家都知道一个线程安全,一个非线程安全;一个慢点,一个快点。但是如果你想要提升性能,那么请记住:根据它们本身的快慢来选择哪个并不是加快速度的重点,重点是,new它们的使用,给它们预计一个可能的长度。

        8,spring大家几乎都用吧,struts也用吧,那么action层写一个BaseAction然后其他action来继承它,以达到对公共操作的处理是常有的事情。那么就要记住:BaseAction中set了的protected UserServer userServer ,子类action中就千万别画蛇添足的再去set这个东西了,如果再次注入,spring的IOC注入就会把你埋到坑里去。

        9,struts大家也都用吧,那么必定写了action,然后再写了响应前面调用的action方法。那么请注意:这个业务处理方法的命名,最好不要以set或者get开头。原因很简单,set、get会被struts认为是对action自身属性的操作方法,可咱是想写业务处理的方法,struts的理解和咱的本意不对路啊。这中间就可能产生一些莫名其妙的问题。action出问题,什么都没错时,请看看你得方法命名。

        10,既然web,一般都JSP,肯定得用标签,说下最常用的C标签吧。<c:if test=" ${a==0 }"></c:if>,你觉得这个写法对吗?C标签配合EL表达式,貌似没有任何问题。可是请注意原式其实是: test="空格${a==0空格}",第二个空格不影响什么,直接忽略;可第一个空格出现在这儿,问题就大了,test就会总会是false,而无论你a是否等于0。所以,请注意引号内贴着引号时,别弄出个空格。

        11,用<img src=""/>,要在页面上显示一个图片?请注意:如果暂时还没有图片链接,请写成src="#",莫只留一个双引号在这儿。原因是,貌似留了空的引号,那用户使用时,页面下载完后,浏览器解析页面时,会被引导去再次访问当前地址。那本来访问一次就行的事情,被影响的要访问2次,用户对网站的速度感受会怎样?服务器处理2次白费劲怎么说?

        12,永远不相信数据库中取出的数据的依赖性,完整性。打个比方,在C2C交易平台上,通常理解下一个商品,必有一个发布者,所以你可能会根据商品对象保存的发布者ID到用户表中去找用户,当然你认为这种情况下,用户user对象是肯定存在的。可我得说,千万别相信user肯定存在,如果你获取了user并要使用它,那么请先判null。今天的业务依赖不等于明天的业务依赖,也许明天官方想发布自己的商品,这个字段就可能没有保存用户ID,或者对应的这个用户因为违反用户协议已经被封号或删号处理。所以:从数据库中取出的任何东西,如果使用时有潜在的非null的使用前提,那么都请显式的写出来,先判null,一切只为了哪怕你离开了,业务也变了,你的程序依然不会抛空指针,依然不需要后来者维护的健壮运行。


        貌似暂时就想到这些,以后有新发现继续补充吧。

展开阅读全文
加载中
点击加入讨论🔥(2) 发布并加入讨论🔥
打赏
2 评论
5 收藏
2
分享
返回顶部
顶部