2019-12-31 17:28:38
一般只需要把Java站點文件夾或*.war文件拷貝到Web Server的webapps文件夾下,即可啟動運行該站點,但更多時候,我們並不想拷貝站點,而是希望Web在Server文件夾之外運行,這時就需要配置虛擬目錄了。不同的WebServer配置虛擬目錄的方式不太一樣,這里的配置方法僅針對Tomcat和Jetty.
1、Tomcat:找到並打開Tomcat目錄下的conf/server.xml文件,在Host小節中添加以下配置即可:
<Context path="/myvpath" debug="0" docBase="d:/myWebtest" reloadable="true"> </Context>
當然如果不想修改server.xml文件,也可以把虛擬目錄的配置作為單獨的文件添加到相應的目錄中,server.xml中缺省都會有localhost的配置,那么相應的也存在conf/Catalina/localhost文件夾,在此文件夾下添加一個xml文件,內容為以下即可:
1 <?xml version='1.0' encoding='utf-8'?> 2 <Context path="/myapp" docBase="D:/myWebtest" debug="1" reloadable="true" > 3 </Context>
path屬性配置的是虛擬目錄的名稱,docBase配置的是站點的真實路徑。
2、Jetty:Jetty的全局配置文件在etc/jetty.xml中,可以直接在此配置文件中設置虛擬目錄,但一般不建議這么做,推薦的做法是創建獨立的配置文件。在contexts目錄下創建新的xml文件,內容如下:
1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 3 <Configure class="org.mortbay.jetty.webapp.WebAppContext"> 4 <Set name="configurationClasses"> 5 <Array type="java.lang.String"> 6 <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item> 7 <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item> 8 <Item>org.mortbay.jetty.plus.webapp.Configuration</Item> 9 <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item> 10 <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item> 11 </Array> 12 </Set> 13 <Set name="contextPath">/forward</Set> 14 <Set name="baseResource"> 15 <New class="org.mortbay.resource.ResourceCollection"> 16 <Arg> 17 <Array type="java.lang.String"> 18 <Item>D:/jetty-6.1.26/mxci.forward</Item> 19 </Array> 20 </Arg> 21 </New> 22 </Set> 23 </Configure>
項目配置根據自己實際環境進行配置然后啟動jetty, 完成。
;3、Jetty默認編碼修改
Jetty6.1.21 eclipse插件,默認的編碼采用的utf8,非iso-8859-1(tomcat默認是iso-8859-1),從而會引出get請求參數亂碼問題。
jetty與tomcat不同,不是在xml配置文件中修改,可以在Jvm參數中加入:Dorg.mortbay.util.URI.charset=iso8859-1即可~
完成
4、Jetty加入Linux service實現開機自啟動
cp -rp /home/wyan/jetty-6.1.26/bin/jetty.sh /etc/rc.d/init.d/jetty
(或者直接做鏈接:ln –s /home/wyan/jetty-6.1.26/bin/jetty.sh /etc/rc.d/init.d/jetty)
chkconfig --add jetty
chkconfig jetty on
現在jetty已經被添加了進來。其中0~6分別表示6種Linux運行級別:
等級0表示:表示關機
等級1表示:單用戶模式
等級2表示:無網絡連接的多用戶命令行模式
等級3表示:有網絡連接的多用戶命令行模式
等級4表示:不可用
等級5表示:帶圖形界面的多用戶模式
等級6表示:重新啟動
接下來,需要在剛剛在etc/init.d下創建的jetty文件中增加JETTY_HOME的配置
注意添加到前面
完成配置后,還需要變更一下文件所屬用戶為普通用戶:
chown -R wyan:wyan jetty
現在我們在普通用戶下嘗試用剛剛創建的service模式啟動一下jetty服務:
service jetty start
但是當服務器重啟之后,加入service的jetty服務會被root用戶重啟,因此會在root文件夾下重新創建一個rssbus安裝路徑,為了避免這種情況,我們需要對jetty的user做限制。方法如下:
進入到etc/init.d/文件夾下編輯jetty文件,在文件中聲明如下兩行變量:
JETTY_USER=wyan
JETTY_START_LOG=$JETTY_HOME/logs/jetty-start.log
其中JETTY_USER為允許運行jetty服務的用戶名;
由於JETTY_START_LOG的默認路徑只有root用戶可以訪問,所以將記錄log的路徑重新定義為一個JETTY USER可以訪問到的路徑,此處選擇的是jetty的安裝路徑下的子文件夾。
完成如上修改后,重啟服務器,會發現被JETTY USER中指定的用戶啟動了
問題發現:經過以上配置后啟動出現了進程,但實際上jetty報錯了,報錯如下:
從日志看出request的日志路徑沒有指定,解決方式:
在/etc/rc.d/init.d/jetty文件JETTY_HOME行下邊加上一行:
JETTY_LOGS=$JETTY_HOME/logs
搞定,這樣配置后通過服務啟動的jetty才能正常訪問
上邊配置在部分機器上不會自動啟動jetty服務,就算是版本一樣rhel6.9兩台機器測試結果也不一樣(20200602)
最后調整jetty.sh啟動3行的位置得到解決,具體操作是把以下3行:
# chkconfig: 2345 16 83 # description: Jetty 6 webserver # processname: jetty
提前到文件的2,3,4行如下:
#!/bin/bash # chkconfig: 2345 16 83 # description: Jetty 6 webserver # processname: jetty # # Startup script for jetty under *nix systems (it works under NT/cygwin too).
這樣就可以解決某些環境下不執行自動啟動jetty服務的問題