前兩天要將一個(gè)新項(xiàng)目部署到阿里云服務(wù)器上,過(guò)程中遇到好多困難,可惜當(dāng)時(shí)沒有做好記錄,沒有把具體遇上的異常記下來(lái)?,F(xiàn)在趁著還沒忘完過(guò)程,趕快先寫下來(lái),希望能節(jié)約以后我和遇到相同問(wèn)題的人的摸索時(shí)間。
由于遇上了多方面的問(wèn)題,不能針對(duì)某一專題進(jìn)行講解,所以我將整個(gè)流程講一遍,遇到的問(wèn)題都會(huì)一一講出。
我項(xiàng)目的開發(fā)環(huán)境以及開發(fā)工具如下:
jdk1.80111,tomcat8.5
struts2.5,hibernate5.10,sPRing4.23
現(xiàn)在難點(diǎn)在于公司的官網(wǎng)也部署到了這個(gè)服務(wù)器上,所以不能隨便更改阿里云上的開發(fā)環(huán)境,也不能隨便停止上面的項(xiàng)目。
所以我現(xiàn)在要做的是同一個(gè)tomcat設(shè)置多項(xiàng)目
阿里云服務(wù)器上的開發(fā)環(huán)境如下:
jdk1.6u43,tomcat7.072
我直接將項(xiàng)目放到webapps目錄下發(fā)現(xiàn)不行。
在網(wǎng)上查了查,tomcat的配置修改如下:
配置文件在tomcat的conf目錄的server.xml
1.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />的post由8080改為80,阿里云上的配置之前已經(jīng)改過(guò)了,所以我這一項(xiàng)不用再改。
2.(接下來(lái)網(wǎng)上說(shuō)
<Engine name="Catalina" defaultHost="localhost">這一項(xiàng)要改,但我親測(cè)這一項(xiàng)不用改) 的localhost改為域名如www.xxx.com(注意,帶www和不帶訪問(wèn)時(shí)的網(wǎng)址也是不一樣的)appBase改為項(xiàng)目所在地。我把項(xiàng)目A放到d:/下面,(注意,我開始直接放的時(shí)候查看日志發(fā)現(xiàn)報(bào)錯(cuò),必須將項(xiàng)目放在ROOT文件夾下面)
即項(xiàng)目目錄是:
d:/A/ROOT
web-inf
...
這樣的結(jié)構(gòu)。
別的不用改,這樣就配置好了。
重啟tomcat(步驟:tomcat bin目錄下先用shutdown.bat關(guān)閉tomcat,再用startup.bat啟動(dòng)),
tomcat窗口一閃而過(guò),查看日志發(fā)現(xiàn)報(bào)錯(cuò),信息是socket bind failed之類的信息錯(cuò)誤碼[730048]。這是由于端口占用導(dǎo)致的重啟失敗。在控制臺(tái)cmd使用netstat -ano,發(fā)現(xiàn)80端口確實(shí)被占用,不過(guò)pid為0.這讓我怎么kill。估計(jì)是之前tomcat shutdown時(shí)候沒關(guān)閉干凈。
等了一會(huì)兒,端口占用解除,重啟tomcat。
本以為見證奇跡的時(shí)刻到了。結(jié)果又報(bào)錯(cuò)了。
發(fā)現(xiàn)spring注入sessionFactory失敗。
順著日志向下查,發(fā)現(xiàn)由Unsupported major.minor version 52.0造成。這是由于我項(xiàng)目的jdk版本高,而環(huán)境的jdk版本低造成的。
我重新在我電腦上配置了與服務(wù)器上相同的環(huán)境,重新編譯。由于eclipse沒有換,默認(rèn)的編譯器還是1.8.這個(gè)需要修改,從eclipse項(xiàng)目的properties里面找到java compiler由1.8換為1.6.重新編譯。
您猜怎么著?又報(bào)錯(cuò)啦!
這次是Unsupported major.minor version 51.0.報(bào)錯(cuò)的是struts的庫(kù)。
我猜是struts2.5不支持jdk1.6。所以又下載了struts2.3,配置,完成后還報(bào)錯(cuò)。
這次是找不到org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
原來(lái)struts2.5和2.3在web.xml里面的配置的filter不一樣??匆幌掳夸浗Y(jié)構(gòu)。發(fā)現(xiàn)struts2.3的包目錄中間多了個(gè)ng。
另外struts.xml里還有一些配置需要改。
修改后運(yùn)行,又報(bào)錯(cuò)了。
這次是由于jdk1.6對(duì)于一些后面的新特性不支持。比如,我方法返回類型是int的但實(shí)際返回時(shí)serilaizable的類型在jdk1.6里不能強(qiáng)制轉(zhuǎn)換為int。將返回值強(qiáng)轉(zhuǎn)成Integer就可以了。
另一個(gè)就是jdk1.6里new ArrayList<>()這樣的<>里不能為空,添加上就好了。
重新運(yùn)行,這次可以了。
項(xiàng)目部署到服務(wù)器上,修改數(shù)據(jù)庫(kù)密碼等配置,重啟,運(yùn)行。
登錄阿里云,到管理控制臺(tái)頁(yè)面,找到域名這項(xiàng),將自己的域名解析到上面,通過(guò)審核后,項(xiàng)目就可以在外網(wǎng)訪問(wèn)了。
成功,Cheers!
(我把期間的一些重點(diǎn)用加重字體標(biāo)了一下,希望對(duì)大家閱讀有幫助)
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注