使用SAE是因为最早接触,没想到这么多坑。
java编译器版本问题
java版本要求是java6,太高的版本会报错。这个可以在eclipse里面设置编译器版本。
war包问题
war包必须和应用同名。servlet-api.jar, mysql.jar这些公用的jar文件不要上传,以免版本冲突。
contextPath问题
因为这个问题影响cookie和session所以比较重要。
通过二级域名访问后获取的getContextPath(),永远是/version/appname的固定值,与请求的URL无关。
getRequestURI()获取的结果不包含appname,所以URI不包含contextPath这个一般的web容器不一样。
cookie问题
cookie路径必须/appname开头,这是为了安全考虑,所以以后访问的url也要带上下文路径。
session问题
分布式session需要加
另外session是基于cookie实现的,如果有保存不了很可能也是路径问题。
mysql问题
mysql链接10s超时。我是自己DIY的线程池,所以使用前要检查连接是否超时就好了。使用其他线程池时一定要注意。
storage问题
storage问题,wrap的file系列接口,每次上传的文件都错误。可能时文件太大了,分多次写入流的缘故。先存储到临时文件,再用storage接口上传可以解决。
log问题
开始时我找不到系统log查看的地方。系统打印的日志在HTTP日志,notice和warning中。
memcache
memcache基于请求初始化
Font字体问题
Font的几个逻辑字体都找不到,后来没办法找了一个字体文件打包到war包里面了。
getServletContext问题
这个方法会报错,no such method,后来只能用ClassLoader来读取配置文件了。
代码更新问题
代码更新后需要手动重启jvm,要不然有时候静态变量没有更新。