JFinal项目部署至SAE所遇问题总结

    新浪SAE,怎么评价这个云端服务呢?两个字:蛋疼!

    问题一:Mysql

  用JFinal进行项目开发的时候,我们一般是进行加载数据库配置文件,例如:

loadPropertyFile("a_little_config.txt");

    在这个txt文件中,我们一般会这样进行数据库配置的编写:

jdbcUrl = jdbc:mysql://xxx.xx.x.xxxx/database_name?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = username   //数据库用户名
password = password  //设置的密码
devMode = true

    如果是本地进行运行,那么那一串xxxxx就写成127.0.0.1:8080这样,username和password就是你本地数据库的用户名及密码,但是当你将项目打包成war文件上传至SAE,并且将你的sql文件也上传之后,那么jdbcUrl ,user和password全部会发生改变。原因很简单,SAE为你部署的项目分配了这个东东,并且还修改了一些名称,例如你的数据库文件名等。

    上传sql文件之后,SAE会给你项目的数据库分配一个端口号(例如:x.rdc.sae.sina.com.cn:3307,来代替那一串xxx.xx.xxxx),并且为你的数据库进行了重命名,而且为你准备好了SK和AK用来代替user和password。这样,只要知道了这些,那么数据库连接这边就应该没什么问题了。基本上就会是这样:

jdbcUrl = jdbc:mysql://X.XXX.sae.sina.com.cn:3307/app_name?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = abcd123efg //(乱写的)
password = km05kikiwl5j1i5rtskandjlja
devMode = true

    问题二:url访问冲突

    在Jfinal中,一般我们配置好路由,类似于这样:/XX/XXX,但是SAE却不是这种路由,它一般是这样子:/1/xxx什么之类的,看到这里,那么有人就会想了,我TM将前者的/XX改成/1不就行了嘛!朋友,如果你这样想,那你就太聪明了——铁定不行的!你把/XX改为/1,那还是相当于/XX,表面上看上去可以了,但是实际上是JFinalFilter.java这个文件出了一点冲突的问题。请在JFinalFilter找到这两行:

if (contextPathLength != 0)
	target = target.substring(contextPathLength);

进行注释就好了,那么一切就会正常起来。可能又有人会说,这个JFinalFilter是个class文件,怎么注释啊?是不是需要去jar中进行重新编译生成啊?其实并不需要,你只需要这样做:

直接在自己项目的src目录建立和 JFinalFilter 同样的 package, 把 JFinalFilter 复制出来修改就行了

    这样子,你觉得还有必要去动jar包吗?

    好了,就这样子吧。最后感谢 @管梨园 和他的博客。


你可能感兴趣的:(mysql,sae,jFinal)