日期:2014-05-20  浏览次数:20655 次

SAE Java相关问题小结

Sae中使用的servlet容器是jetty7.4.x

我想在web.xml中配置一个自己编写的servlet,实现web启动时的初始化工作,但是总是出现各种问题,下面总结了一下在sae中使用java的一些注意事项:

1、在eclipse中开发java web项目时,我总喜欢直接把需要的jar包复制到WEB-INF/lib下,但在开发sae项目时,最好把需要的jar包放到usr library里,然后将usr library添加到工程的build path中,这样不会把jar包打到war文件中。其实sae在jvm中实际加载的jar包并不是war中包含的jar包,所以在war中包含jar包也是浪费上传时间,还会造成不必要的麻烦(我发现如把servlet-api-2.5.jar打到war中上传后,web就没法正常启动)

2、本地的jar包最好与sae所支持的jar包版本一致或接近,不然的话你用的很happy的东西可能在sae上根本不支持。sae上支持的jar包参见:http://sae.sina.com.cn/?m=devcenter&catId=310,有些jar包在这里面没有列出来,比如servlet-api-2.5.jar,由于jetty7.4.x中用的时2.5的,自然也就应该在本地用这个版本的jar包

3、jre版本,在本地开发时,要注意jre的版本。sae中支持的时1.6,而且不是最新的1.6,如果sae的jvm日志中报Unsupported major.minor version 51.0类似的错,很可能是本地的jre版本过高了,在eclipse中,在web工程的属性->java compiler选项中设置目标jre版本,最好是1.5的(最新的1.6,sae也不支持),重新打war包上传、重启jvm即可

4、sae的jvm日志貌似有时候更新的比较迟缓,所以不要完全信赖这个日志。此外,在java中用System.out打印出的消息在jvm日志的notice类型中可以看到。

5、实测,sae中jvm启动大约需要20-30秒,一个jvm如果2-3小时没有被访问就会被回收,全部jvm被回收之后,有访问时系统会再次启动jvm,但会有大约1分钟的延迟(越大的应用可能延迟越大)。