J2EE应用开发问题总结及最佳实践.ppt
《J2EE应用开发问题总结及最佳实践.ppt》由会员分享,可在线阅读,更多相关《J2EE应用开发问题总结及最佳实践.ppt(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、IBM Software Group 2006 IBM CorporationJ2EE应用开发问题总结及最佳实践应用开发问题总结及最佳实践IBM Software Group 2006 IBM Corporation内容内容J2EEJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结J2EE应用上线后遇到的问题总结J2EE应用开发部署最佳实践一些例子分析2IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-数据库部分数据库部
2、分问题一:使用Oracle数据库,大于4k的附件上传有问题,会报:Connection reset by peer:socket write error错误解答:附件上传过程是先上传到应用服务器,再以二进制形式保存到BLOB字段。上传组件采用SmartUpload,上传过程没有问题。问题出在对BLOB字段的操作上,在获取到附件的流对象后,用PreparedStatement的ps.setBinaryStream(),然后再ps.executeUpdate()。这种方式对小于4k的附件没有问题,大于4k就会报错。解决办法是 在插入BLOB字段值时,要先用SELECT BLOBCOL FROM T
3、ABLENAME FOR UPDATE查询和锁定该字段,然后再做更新。3IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-数据库部分数据库部分问题二:对Oracle BLOB字段的处理问题 解答:在Weblogic中,只能支持weblogic自带的对Oracle BLOB处理的类,而在WebSphere中,只能支持Oracle自带的处理BLOB的类,因此在程序中根据条件分支判断应用服务器的类型来决定用哪个类处理BLOB。4IBM Software Group 2006 IBM Corporatio
4、nJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-数据库部分数据库部分问题三:流程定义文件加载问题,加载流程定义文件的过程就是解析并将文件中的流程描述信息提交到数据库表。在一个连接事务中,如果多次调用PreparedStatement的addBatch()、executeBatch()方法做批量数据更新,会报错误。解答:应用服务器中数据源的PreparedStatementCacheSize默认设置为10,需要改为0不缓存或者改为100,就可以使用executeBatch()了 5IBM Software Group 2006 IBM CorporationJ2EE应用开
5、发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题一:JSP自定义标签属性大小写解答:在使用系统自定义的标签属性时,属性名必须严格区分大小写,否则JSP编译不通过。6IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题二:URL编码问题,通过单击打印按钮请求一些报表打印页面时编译出错,会抛出传入的参数不合法的异常解答:由于URL编码格式引起的,如 jbtsxf_xfcl_bb.jsp?where=aab001 like%D,在URL编码中以%开头后面跟两位1
6、6进制编码代表一些特殊字符,这里的%D不对应任何特殊字符,所以出错。解决办法是将URL串中的特殊字符用对应的URL编码代替,如把%用%25代替。具体可以参考以下网址:7IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题三:文件名的大小写解答:通过include引入文件时也要区分文件路径的大小写,系统中绝大部分JSP的head和body开始部分都会引入系统公用的两个文件,即:/htmlHead.jsp和/bodyStart.jsp,但在不少地方被引用为/htmlhead.jsp和/
7、bodystart.jsp,这在WebSphere上会引起编译错误。8IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题四:JSP标准标签属性值误用问题解答:如,flush属性应该只有true和false两个有效值,如果flush取其它值,JSP编译也不通过。9IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题五:JSP中import Vector类的问题 解答:在
8、JSP中已经import了class A,而class A中已经import了Vector,因此JSP里面要应用Vector的时候就没有再去import Vector,导致编译出错。10IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题六:jsp:param name=value=解答:jsp:param里面的name属性不能使用jsp表达式赋值,参考jsp1.2 spec name是不能使用表达式的。修改name为定义好的字符串常量 11IBM Software Group 2
9、006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题七:某个页面readfile.jsp有时候能正常访问,有时候出现http 404解答:readfile.jsp中需要用到某个htc文件,但该htc文件的路径有误导致IE在最后渲染时提示找不到文件,需要修改htc路径。12IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题八:某个jsp页面使用引入HTML页面,出现乱码 解答:引入的HTML页面也必须使用进行
10、声明,由于是静态引入方式,修改这些包含页面后,对原来的jsp也应该进行重新编译才能获得效果。但是只适用于WebSphere6。如果是采用动态引入方式的话,就不需要手动进行重新编译。13IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题九:在一个jsp页面中包含下载内容,调用了response.getOutputStream()方法时,抛出exception 解答:在jsp中已经隐含一个变量out,相当于调用了response.getPrintWriter(),因此再次调用resp
11、onse.getOutputStream()时会抛出输出流已经获得的异常。可以修改代码,不采用jsp调用形式,改用servlet直接使用流输出。14IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题十:不要用关键字来定义变量 解答:在执行 之前,代码定义一个变量String org;其中org属于关键字,因此编译的错误!15IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分
12、部分问题十一:JSP中使用ShowModalDialog弹出一个新窗口会造成session丢失 解答:改成用Window.open()16IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-JSP部分部分问题十二:jsp:forward抛出异常::解答:jsparam name=BCCP64 value=/jsparam name=returnURL value=/jsparam name=BAE001 value=/在有jsp:forward语句的jsp中,不能有其他html的元素的输出 17IB
13、M Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结-体系架构部分体系架构部分问题:在实现异步消息侦听的功能时,采用一个非容器受管的线程实现接口来完成,并没有使用MDB,导致在WebSphere上出现异常错误,被迫要改成同步侦听的方式,使性能下降。解答:在J2EE规范中提倡采用MDB来完成异步消息侦听的工作,而不接受自己用线程来实现的做法。这样做的好处是因为MDB是受EJB容器管理的一个组件,开发和维护简单,移植性好。18IBM Software Group 2006 IBM Corporation内容内
14、容J2EE应用开发和移植中遇到的问题总结J2EEJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结应用上线后遇到的问题总结应用上线后遇到的问题总结J2EE应用开发部署最佳实践一些例子分析19IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结-使用开源组件使用开源组件问题一:采用SmartUpload组件实现文件上传功能,SmartUpload组件本身存在一定的缺陷,容易造成内存泄漏。解答:通过对heapdump文件进行分析,对系统出现的OutOfMemory现象,是因为在SmartUpload中有一段代码
15、不是十分严密,会在某种情况下出现死循环,然后导致系统内存溢出,不能正常提供服务。解决的办法是对SmartUpload的代码进行部分修改,使之不产生死循环。具体的分析过程请参考附件一。20IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结-优化对数据库的访问优化对数据库的访问问题二:某些jdbc语句过于庞大,导致该语句的执行时间过长而锁住了jdbc连接等资源不被释放。解答:建议检查sql语句的效率,把一个语句中执行的复杂操作优化成效率高的sql语句来执行。select sqlb,currenthj,current
16、state,sum(jjbs0),sum(jjbs1),sum(jjbs2),sum(tbbs1),tbdwbh from Todolist where sqlb=101 and(currenthj=001 or currenthj=006 or currenthj=011 or.)and(clr=st001 or clr is null)and(tbdwbh like 44%)group by sqlb,currenthj,currentstate,tbdwbh order by sqlb,currenthj,currentstate,tbdwbhselect sqlb,currenthj,
17、currentstate,sum(jjbs0),sum(jjbs1),sum(jjbs2),sum(tbbs1),tbdwbh from Todolist where sqlb=101 and(currenthj in(001,006,011,016,021,031I1,031I2,031I3,031J1,031J2,031J3,031K1,031K2,031K3,031M1,031M2,031M3,041,050,052,056,061,062,063,066,071,076,078,081,086,087,088,089,090,091,092,096,101,106,108,111)an
18、d(clr=st001 or clr is null)and(tbdwbh like 44%)group by sqlb,currenthj,currentstate,tbdwbh order by sqlb,currenthj,currentstate,tbdwbh21IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结问题三:防火墙策略的影响解答:假如应用服务器连接数据库的时候要通过防火墙的话,那么要仔细设置策略中的超时部分,不要与应用服务器连接数据库的超时设置相抵触。如果防火墙的超时设置要短于应用服务器的设
19、置,那么数据库连接就会被防火墙频繁的截断,从而引起性能的下降。22IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结-优化对数据库的访问优化对数据库的访问问题四:要珍惜jdbc连接资源解答:jdbc连接是非常宝贵的资源,当要用到的时候才去获取,而不要占住了一个连接却不使用它,也不要使用完了不释放它,这样会使应用程序的效率很低。总结来说,就是在初始化的时候对datasource作一次jndi lookup的动作,然后接下来当要使用jdbc连接的时候通过getConnection获取连接,在使用完毕后通过conn.
20、close()关闭,使之返回到连接池中被其他代码使用。23IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结-使用开源框架使用开源框架问题五:慎用各种开源的框架解答:目前各种开源的框架非常流行,例如hibernate,tapestry,struts,spring等等,这些框架使用起来也会简化开发的工作量,但是一定要注意这些框架下的合理参数配置,否则会引起系统级别的性能问题。例如在出入境的性能问题中,基本上都是因为这些框架下的参数没有正确的配置引起太多对象堆积在内存空间中不能被释放,造成内存泄漏。具体问题的分析办
21、法请参考附件二和附件三。24IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结问题六:关于WAS做集群的问题解答:应用程序的开发应该与应用服务器的拓扑结构相独立,而不应该成为部署的障碍。例如像广东省出入境如此庞大的系统,总共包括19台刀片服务器来运行应用服务器,如果能够建立起集群的环境,无论从部署、维护还有性能方面都能大大提高。25IBM Software Group 2006 IBM Corporation内容内容J2EE应用开发和移植中遇到的问题总结J2EE应用上线后遇到的问题总结J2EEJ2EE应用开发部
22、署最佳实践应用开发部署最佳实践应用开发部署最佳实践应用开发部署最佳实践一些例子分析26IBM Software Group 2006 IBM CorporationJ2EE应用开发部署最佳实践应用开发部署最佳实践-开发部分开发部分整体考虑4开发应遵循标准的软件工程方法论4开发应遵循J2EE规范4开发尽量使用成熟的框架以及开发模式4变量名、类名、对象名、包名应该遵循命名规范对象的构造4尽量避免在被经常调用的代码中创建对象4对于集合类(collection),应尽量初始化它的大小JVM会自动指定缺省大小如果超过,JVM会重新创建一个,释放掉原来的对象,加大JVM负担27IBM Software G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2EE 应用 开发 问题 总结 最佳 实践
限制150内