资源预览内容
第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
第9页 / 共53页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
IBM Software Group 2006 IBM CorporationJ2EE应用开发问题总结及最佳实践IBM Software Group 2006 IBM Corporation内容 J2EEJ2EE应用开发和移植中遇到的问题总结应用开发和移植中遇到的问题总结J2EE应用上线后遇到的问题总结J2EE应用开发部署最佳实践一些例子分析2IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-数据库部分 问题一:使用Oracle数据库,大于4k的附件上传有问题, 会报java.sql.SQLException: Connection reset by peer: socket write error错误 解答:附件上传过程是先上传到应用服务器,再以二进制 形式保存到BLOB字段。上传组件采用SmartUpload,上传 过程没有问题。问题出在对BLOB字段的操作上,在获取 到附件的流对象后,用PreparedStatement的 ps.setBinaryStream(),然后再ps.executeUpdate()。这种 方式对小于4k的附件没有问题,大于4k就会报错。解决办 法是 在插入BLOB字段值时,要先用SELECT BLOBCOL FROM TABLENAME FOR UPDATE查询和锁定该字 段,然后再做更新。 3IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-数据库部分 问题二:对Oracle BLOB字段的处理问题 解答:在Weblogic中,只能支持weblogic自带的对Oracle BLOB处理的类,而在WebSphere中,只能支持Oracle自 带的处理BLOB的类,因此在程序中根据条件分支判断应 用服务器的类型来决定用哪个类处理BLOB。 4IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-数据库部分 问题三:流程定义文件加载问题,加载流程定义文件的过 程就是解析并将文件中的流程描述信息提交到数据库表。 在一个连接事务中,如果多次调用PreparedStatement的 addBatch()、executeBatch()方法做批量数据更新,会报 oracle.jdbc.dbaccess.DBData.clearItem错误。 解答:应用服务器中数据源的 PreparedStatementCacheSize默认设置为10,需要改为0 不缓存或者改为100,就可以使用executeBatch()了 5IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题一:JSP自定义标签属性大小写 解答:在使用系统自定义的标签属性时,属性名必须严格 区分大小写,否则JSP编译不通过。6IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题二:URL编码问题,通过单击打印按钮请求一些报表 打印页面时编译出错,会抛出传入的参数不合法的异常 解答:由于URL编码格式引起的,如 jbtsxf_xfcl_bb.jsp?where=aab001 like %D,在URL编码 中以%开头后面跟两位16进制编码代表一些特殊字符,这 里的%D不对应任何特殊字符,所以出错。解决办法是将 URL串中的特殊字符用对应的URL编码代替,如把%用 %25代替。 具体可以参考以下网址:http:/www- 1.ibm.com/support/docview.wss?uid=swg211656817IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题三:文件名的大小写 解答:通过include引入文件时也要区分文件路径的大小写 ,系统中绝大部分JSP的head和body开始部分都会引入系 统公用的两个文件,即:/htmlHead.jsp和/bodyStart.jsp, 但在不少地方被引用为/htmlhead.jsp和/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类的问题 解答:在JSP中已经import了class A,而class A中已经 import了Vector,因此JSP里面要应用Vector的时候就没有 再去import Vector,导致编译出错。 10IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题六:“ value=“ 解答:jsp: param里面的name属性不能使用jsp表达式赋值 ,参考jsp1.2 spec name是不能使用表达式的。修改name 为定义好的字符串常量 11IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题七:某个页面readfile.jsp有时候能正常访问,有时候 出现http 404 解答:readfile.jsp中需要用到某个htc文件,但该htc文件的 路径有误导致IE在最后渲染时提示找不到文件,需要修改 htc路径。12IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题八:某个jsp页面使用引入HTML 页面,出现乱码 解答:引入的HTML页面也必须使用进行声明,由 于是静态引入方式,修改这些包含页面后,对原来的jsp 也应该进行重新编译才能获得效果。但是只适用于 WebSphere6。如果是采用动态引入方式的话,就不需要手动进行重新编译。 13IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题九:在一个jsp页面中包含下载内容,调用了 response.getOutputStream()方法时,抛出exception 解答:在jsp中已经隐含一个变量out,相当于调用了 response.getPrintWriter(),因此再次调用 response.getOutputStream()时会抛出输出流已经获得的 异常。可以修改代码,不采用jsp调用形式,改用servlet直 接使用流输出。 14IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题十:不要用关键字来定义变量 解答:在执行 之前,代码定义一个 变量String org; 其中org属于关键字,因此编译的错误! 15IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题十一:JSP中使用ShowModalDialog弹出一个新窗口 会造成session丢失 解答:改成用Window.open()16IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-JSP部分 问题十二:jsp:forward抛出异常: java.lang.IllegalStateException: jsp.error.attempt_to_clear_flushed_buffer 解答: “/“/“/ 在有jsp:forward语句的jsp中,不能有其他html的元素的输 出 17IBM Software Group 2006 IBM CorporationJ2EE应用开发和移植中遇到的问题总结-体系架构部分 问题:在实现异步消息侦听的功能时,采用一个非容器受 管的线程实现javax.jms.messageListener接口来完成,并 没有使用MDB,导致在WebSphere上出现异常错误,被迫 要改成同步侦听的方式,使性能下降。 解答:在J2EE规范中提倡采用MDB来完成异步消息侦听 的工作,而不接受自己用线程来实现的做法。这样做的好 处是因为MDB是受EJB容器管理的一个组件,开发和维护 简单,移植性好。18IBM Software Group 2006 IBM Corporation内容J2EE应用开发和移植中遇到的问题总结 J2EEJ2EE应用上线后遇到的问题总结应用上线后遇到的问题总结J2EE应用开发部署最佳实践一些例子分析19IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结-使用开源组件 问题一:采用SmartUpload组件实现文件上传功能, SmartUpload组件本身存在一定的缺陷,容易造成内存泄 漏。 解答:通过对heapdump文件进行分析,对系统出现的 OutOfMemory现象,是因为在SmartUpload中有一段代码 不是十分严密,会在某种情况下出现死循环,然后导致系 统内存溢出,不能正常提供服务。 解决的办法是对 SmartUpload的代码进行部分修改,使之不产生死循环。 具体的分析过程请参考附件一。20IBM Software Group 2006 IBM CorporationJ2EE应用上线后遇到的问题总结-优化对数据库的访问 问题二:某些jdbc语句过于庞大,导致该语句的执行时间 过长而锁住了jdbc连接等资源不被释放。 解答:建议检查sql语句的效率,把一个语句中执行的复杂 操作优化成效率高的sql语句来执行。select sqlb, currenthj, currentstate, 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, 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,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号