图片压缩功能在JBoss AS7出错问题
近日在为平台(http://www.zyiqibook.com)做些小的整改,途中基本很顺利,但就在后面出现了些纠结的问题,而这问题我之前遇到过,因为一时没有想起来,又浪费了不少时间。现在正式把这问题记录下来,作为技术积累,往后就可以很好的处理类似的问题。
网 站的开发是在Eclipse中进行的,为了开发测试方便,安装了Jetty作为服务器,可以边开发边调式项目。我为平台添加一个相册艺廊模块,包含图片上 传、压缩、分页等功能,因为之前在同学朋友版块开发过班级相册功能,我有类似的经历,就把那个班级相册移植过来了(班级相册只在圈子里可见,相册艺廊则所 有人员可见)。需要说明的是后台图片压缩用到了com sun image codec jpeg JPEGCodec这个类,Eclipse中研发的比较顺利,调式也都通过,于是我需要把新功能更新到生产环境。
项目更新,需要把项目打 包,从本地上传到远程服务器,因为项目比较大,上传需要一定时间,为确保一次性更新,不出错,我把打包好的项目部署在本地的JBoss上面做最后一次测 试。系统正常跑起来后,不幸的是相册艺廊模块却出现bug了,图片上传失败。这种情况挺不好对付的,开发时正常,部署后却出错,现在想想,当时自己定位这 个问题的能力不是很好,导致拖了一段时间。要相信代码没有问题,是项目运行环境的问题,开发时用Jetty,现在用的是JBoss,那就得从服务器下手。 因为项目中我对异常做了封装,优化用户体验,界面提示的只是相片上传失败,控制台也没有打印错误信息(之前改了服务器配置导致的)。当时我返回开发环境再 走一遍检查代码,图片上传功能正常;后来才想到换一个Jboss部署看看,换了之后上传相片,Jboss控制台就显示了很明显的错误信息:Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec
这个问题我不是之前遇到过吗,项目刚上线,整的图片上传就是这问题,呵呵。这个是因为JBoss服务器而导致的,好像是后台对图片进行压缩的类JPEGCodec已经过时了,具体的就不清楚了,需要对JBoss配置文件做一些修改,问题即可解决。
在 新版Jboss as中,修改\modules\sun\jdk\main目录下的module.xml,在<paths>标签末尾加上<path name="com/sun/image/codec/jpeg"/>就可以了,至此,图片上传、压缩功能在Jboss环境中就正常了。
附 录:还有一个问题,页面、Struts我都配置了UTF-8编码,可是图片上传时,假如遇到中文文件名的图片,还是上传失败,是乱码导致的问题(英文命名 的图片上传没有问题)。中文命名的图片问题还被一个同学在使用系统时提出过,之前一直没有时间去想,所以就没去解决。在图片压缩上传问题解决后,给了我灵 感,所以也解决了中文文件名相片上传的问题。服务器Jboss的编码也需要配置声明,只有页面、服务器、系统都编码统一,才不会出现乱码。Jboss as修改编码的方式如下:
修改\standalone\configuration下面的standalone.xml文件,在<extensions>标签后添加以下配置即可,如:
<extensions>
......
</extensions>
<system-properties>
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>