Jetty配置虛擬目錄,實現把web項目發布到自定義目錄,指定指定上下文訪問;jetty編碼修改;Jetty加入Linux service實現開機自啟動


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服務的問題


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM