怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

如何部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
    在学习cocos2dx手游开发的过程中,为了实现用户注册、用户登陆和世界排行榜这些模块,需要用到服务器来搭建平台。以前都是
在本地搭建服务器,在本科期间使用过IIS和Tomcat,感觉在本地搭建服务器还是蛮简单的,网上有丰富的资源参考。读研期间开始学
习基于cocos2dx引擎的手游开发,经常需要同学和朋友做一些测试,网络版的测试还是有许多不方便,就干脆尝试把服务器架设到云服
务器上。我选择的云服务器是新浪的SAE,搭建的框架是现在非常适合用来做app服务端的轻量级框架Spring+SpringMVC+MyBatis,
这个框架是我学习了shulinzh的一篇博文《SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)》来搭建的,正好该博主也是
我的学长,需要搭建SSM框架的同学可以参考,教程非常详细。本文介绍的部署到SAE的服务器框架原型使用的就是上面教程搭建的SSM
框架,并且详细介绍如何从本地搬到SAE云服务器以及如何解决在部署中遇到的一些问题。

1.SSM框架目录介绍

    首先我们先了解一下在本地搭建好的SSM框架,搭建的过程请参照上文中提到的教程。本人使用的是MyEclipse作为的IDE,服务器
环境是Tomcat6.0。工程目录如下图所示:

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    搭建好的本地SSM框架如上图所示,src/main/java目录下是框架的业务逻辑,包括一些数据库操作的函数和映射文件,框架
的控制层等。src/main/resources目录下保存的是框架的配置文件,包括连接数据库的属性文件,部署到SAE需要修改这个文件,
其本地数据库连接属性文件代码如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1/hnust_mysql
username=root
password=hnustmysql85236987
#定义初始连接数  
initialSize=0
#定义最大连接数  
maxActive=20
#定义最大空闲  
maxIdle=20
#定义最小空闲  
minIdle=1
#定义最长等待时间
maxWait=60000
    spring-MVC.xml配置文件用来创建一些Beans,比如开启注解功能,配置视图模式,配置文件上传等。spring-mybatis.xml配
置文件用来创建一些跟数据库打交道的Beans,这两个配置文件对SSM框架来说非常重要。Maven Dependencies是用来保存通过pom.xml
文件导入下载的所有Jar包,JRE System Librery我选择的是JDK1.6,部署到SAE时JDK的版本很重要,后面会讲到。webapp目录下
面有一个WEB-INF的文件夹,里面有一些编写好的JSP页面,index.jsp欢迎页面和web.xml应用配置文件。其中web.xml文件中配置了
框架的Spring MVC servelt和Mybatis的相关信息,以及编码过滤器和Spring监听器等等。

2.部署SAE云服务器

    SAE云服务器是我的一个学弟推荐的,他之前在SAE上部署过许多PHP的web应用,而且效果还不错,费用也是可以接受。以前只要
通过实名认证都会送云豆,现在改为免费额度了,就是每天免费一定的流量,但是只限于PHP,Java因为需要用到JVM,所以需要自己购
买云豆,但是费用很低,做测试一个月三十块左右就差不多了,还是可以接受的。

2.1部署JAVA应用到SAE须知事项

    因为SAE支持的运行环境是OpenJDK1.6和Jetty7.4,所以我们在本地调试应用时一定要注意JDK的版本,一定要JDK1.6,很多同
学没有注意这一点,在部署后会出现501的错误。至于Jetty7.4,搭建这个服务器框架网上有很多教程,也不一定本地调试时一定要用
Jetty7.4,笔者使用的Tomcat6.0一样能部署SAE,这个关系不大。官网有很多这方面的文档,强烈建议先仔细阅读文档再开始部署SAE。

2.2部署流程

    部署SSM框架到SAE如果不看教程还是会遇到各种各样的问题,笔者自己也鼓捣了几天时间才成功。大致的流程如下:

2.2.1 SAE创建应用和默认版本

    当你注册完SAE账户,充入一定的云豆后,就可以在个人首页创建一个新应用,笔者创建的应用名称叫做急速蜗牛,是一个竖版跑酷
型手游的名称,二级域名为orzsxcrunningman.sinaapp.com,其中orzsxcrunningman这个信息非常重要,它就代表了你创建的众多
应用当中的某一个应用,访问数据库和访问应用都需要用到,后面会详细介绍。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    创建完应用后,点击急速蜗牛进入应用管理,在界面左边点击代码管理,新建一个代码版本,当你只有一个版本时,这个版本就是
你的默认版本。默认版本是指使用二级域名访问时具体对应运行哪个版本的应用代码。当你有多个版本时,可以自行选择默认版本,如
下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

2.2.2 开启MySQL

    创建一个默认代码版本后,先不急着部署代码,我们先来开启SAE提供给我们的MySQL服务。点击界面左侧的服务管理下的MySQL服
务,开启共享型MySQL,如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    在打开的界面里选择管理MySQL,可能会要输入安全密码,验证成功后进入到了SAE提供给我们的phpMySQL管理后台,该后台提供
了一个图形化的界面来进行数据库操作。因为SSM框架需要用到一张表,在界面里点击SQL,在编辑区输入以下SQL语句来创建表user_t。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    点击执行后会在界面左边能看到新建好的表名,同时phpMySQL还提供了搜索、查询、导出和导入等操作,具体操作可以参考官网上
提供的文档,介绍的比较详细。到此我们已经开启了SAE的MySQL服务,并且新建了一张表。

2.2.3 修改数据库属性文件jdbc.properties

    因为我们部署到SAE的应用需要连接的是SAE提供给我们的MySQL,所以我们需要对SSM框架的jdbc.properties进行一下配置。这
里我们需要预先知道几点,连接数据库时的url是jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_加上你的应用名称,就是SAE
分配给你的二级域名当中的第一段字符串,所以笔者的url就等于jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_orzsxcrunningman
就可以了。还有连接数据库的用户名和密码需要在哪里获得,是在应用首页可以找到。用户名就是Access Key,密码就是Secret Key,
位置如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    所以我们先用#号注释掉本地的数据库连接,结合自己的Acess Key和Secret Key修改后的jdbc.properties代码如下:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://w.rdc.sae.sina.com.cn:3307/app_orzsxcrunningman
username=Access Key(请输入自己的Access Key)
password=Secret Key(请输入自己的Secret Key)
#driver=com.mysql.jdbc.Driver
#url=jdbc:mysql://127.0.0.1/hnust_mysql
#username=root
#password=hnustmysql85236987
#定义初始连接数  
initialSize=0
#定义最大连接数  
maxActive=20
#定义最大空闲  
maxIdle=20
#定义最小空闲  
minIdle=1
#定义最长等待时间
maxWait=60000
    需要注意的是,SAE支持Java应用连接外网的MySQL,但是不支持外网连接SAE的MySQL,所以修改jdbc.properties后本地应用
将无法连接数据库。

2.2.4 MyEclipse导出应用的.war包

    SAE的Java应用只能通过上传.war包来更新代码,而PHP应用可以通过svn或者在线来上传代码。笔者使用的SSM框架是Java应
用,所以只能通过导出.war包来在线上传代码。这一步骤有许多小细节,笔者当时部署代码时没有注意这一点,浪费了很多时间。我们
先右击工程名spring_helloworld——Export——MyEclipse JEE——WAR File就可以导出.war包了。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    导出的.war其实就是一个压缩文件,直接导出来的.war还不能直接上传到SAE,否则会报501错误。

2.2.5 修改.war包

    我们对导出的.war进行解压,可以看到解压后的文件目录如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    首先我们先去除一些通过Maven导入的Jar包,因为SAE会提供一些Jar包给我们,如果不去除这些冗余的Jar包,会在应用运行时
提示501错误,相信很多同学在部署时都会遇到这个错误,遇到这个错误后可以朝这个方向去找错。打开WEB-INF文件夹,在lib文件夹
中去除多余的Jar包。笔者试验了很多次,最后只留下了这些Jar包,可以不报501的错误了。但是到底SAE提供了多少Jar包给我们,官
网上也说的很少,一般是servelt_api.jar、xml.jar和一些基本的Jar包比如email等,也有人写过这方面的文章,大家可以去搜一下。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    然后我们还需要对WEB-INF——class——spring-MVC.xml文件里的一段代码进行删除,如果不删除这段代码,会提示404找不到页
面。其实这个错误感觉很奇怪,先贴代码。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    这是一段文件上传代码,如果不删除这段代码,会提示404找不到页面,可能是因为SAE暂时分配给我的代码空间只有100M,文件
上传也需要一定的空间,所以提示会找不到页面,如果有人知道为什么会报404错误,还请在下方留言,一起学习一下。

2.2.6重新打包.war

     在这一步笔者也耗费了很多时间,如果按照MyEclipse导出的.war包来看的话,目录如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    在一级目录直接进行压缩成rar格式,然后修改后缀变成war,最后再修改文件名称为SAE当中你新建的那个应用名,笔者是
orzsxcrunningman,直接上传到SAE的代码管理中,会看到一个目录的页面,如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程
怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    在这个状态下是无法正常访问应用的,我们需要进入spring_helloworld,在第二级目录选取所有的资源文件再压缩,再改后缀,
再改名,如下图所示。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    将正确处理后的war包再上传到SAE的代码管理当中,如果可以看到下面这个页面,就说明大功告成了。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

    可能读者糊涂了,这不是404错误吗,这是因为我们在SSM框架引入注解后,欢迎界面虽然在web.xml配置好了为index.jsp,但是
请求会被serlvet拦截,而又没有在controller当中编写跳转到欢迎界面代码,所以会提示找不到页面,但是我们输入以下的链接
http://1.orzsxcrunningman.sinaapp.com/user/showUser?id=1就能看到从数据库当中输出的第一个用户名,如果能看到就代
表部署成功了。

怎么部署SSM框架(Spring+SpringMVC+MyBatis)到SAE(新浪云服务器)图文教程

3. 总结

    其实部署最基本的SSM框架还是比较简单,但如果是第一次部署的话又没有教程参考还是比较费时的。同时我还发现SAE的JVM有时
还会不听话,明明正确的代码上传后运行的结果还是404或者501这些错误,我还是建议经常重启下JVM,也许重启下JVM就行了。还有要
学会看SAE的日志记录,日志记录分为request、error、warning、notice、resource和debug,在日志文件当中找线索。希望这篇
教程能对一些想要部署SSM到SAE的同学带来帮助。