Version 28 (modified by waue, 15 years ago) (diff) |
---|
安裝 Jetty
jetty 前言
- 本篇 雖然說明了兩種安裝jetty 的方式,但是還是建議去jetty 官網下載 jetty的原始壓縮檔來安裝,因為包含了src才能看原始碼
- 若要jetty上手,還是請使用jetty-demo
jetty 特性
- 易用性
- 通過 XML 或者 API 來對 Jetty 進行配置;
- 默認配置可以滿足大部分的需求;
- 將 Jetty 嵌入到應用程序當中只需要非常少的代碼;
- 可擴展性
- 即使在有大量服務請求的情況下(如Ajax 的 Web 2.0),系統的性能也能保持在一個可以接受的狀態。
- 利用 Continuation 機制來處理大量的用戶請求以及時間比較長的連接。
- 易嵌入性
- Jetty 設計之初就是作為一個優秀的組件來設計的,這也就意味著 Jetty 可以非常容易的嵌入到應用程序當中而不需要程序為了使用 Jetty 做修改。從某種程度上,你也可以把 Jetty 理解為一個嵌入式的Web服務器。
apt-get 之 jetty
安裝jetty
- debian安裝方法
- 在ubuntu用apt-get 安裝得到 jetty 5.1.14版 (2007/8/9) 與 hadoop 0.18.3 的lib 內放的jar檔版本相同
$ sudo apt-get install jetty jetty-extra libecj-java
- ubuntu 安裝後的目錄與debian有些不同
/usr/share/jetty/ | jetty home | |
cgi-bin/ | 0 | |
ext/ | 0 | |
lib/ | jar檔 | |
webapps/ | root下有預設網站 | |
/usr/share/doc/jetty/ | 文件目錄 | |
/var/log/jetty/ | log | |
/usr/share/java/ | jetty-5.0.0.jar | 主程式 |
/etc/jetty/ | 設定檔 | |
/etc/default/ | jetty | 0 |
/etc/init.d/ | jetty | 驅動檔 |
啟動 jetty
- 設定 jetty -> /etc/jetty/jetty.xml
<Set name="Port"><SystemProperty name="jetty.port" default="8280"/></Set>
- 啟動
$sudo /etc/init.d/jetty start
- 瀏覽 http://localhost:8280/
- ps : 不知設定檔如何找出port :
- 先用 ps aux | jetty 找出jetty的pid
- 在用pid 來探索 netstat -anlp | grep $pid ,可查出port號如
tcp6 0 0 :::8280 :::* LISTEN 30597/java
- 在/etc/jetty/start.config 加入
$(tomcat.lib.home)/jasper-compiler-jdt.jar ! available org.eclipse.jdt.core.JDTCompilerAdapter
- 預設port在8280
- ps2: jetty的預設網頁裡的tutorial 還不錯
問題解決
- 用 apt-get install jetty 所安裝的jetty無法開啟jsp的網頁
- 將會出現錯誤訊息
HTTP ERROR: 500 No Java compiler available RequestURI=/sample/hello.jsp
- 將會出現錯誤訊息
- 解決方法:
sudo apt-get install libecj-java
並在/etc/jetty/start.config 加入
$(tomcat.lib.home)/jasper-compiler-jdt.jar ! available org.eclipse.jdt.core.JDTCompilerAdapter
補充分析
- apt-get 安裝的 jetty ,在無安裝libecj-java以及加入jasper-compiler-jdt.jar 前,無法使用jsp,但 tarball的jetty 在同樣的前提下卻可以,而tarball 的lib , ext 的目錄下也沒有jasper-compiler-jdt.jar ,因此分析一下 start.config的不同
jetty-src:start.config > apt-get:start.config 25,28c25,27 < # available classname # true if class on classpath < # property name # true of set < # java OPERATOR version # java version compared to literal < # nargs OPERATOR number # number of command line args compared to literal --- > # available classname > # java OPERATOR version > # nargs OPERATOR number 39,40c38 < org.mortbay.log.LogFactory.noDiscovery=true ! property org.mortbay.log.LogFactory.noDiscovery < javax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder java > 1.4 --- > org.apache.commons.logging.LogFactory=org.mortbay.log.Factory AND ! property org.apache.commons.logging.LogFactory ! property org.apache.commons.logging.Log 43,47c41,50 < jetty.home=. ! exists $(jetty.home)/lib/org.mortbay.jetty.jar < jetty.home=.. ! exists $(jetty.home)/lib/org.mortbay.jetty.jar < jetty.home=/home/jetty ! exists $(jetty.home)/lib/org.mortbay.jetty.jar < jetty.home=/C:/jetty ! exists $(jetty.home)/lib/org.mortbay.jetty.jar < jetty.home=. ! exists $(jetty.home)/lib/org.mortbay.jetty.jar --- > jetty.home=/usr/share/jetty > > # Debian jars home > java.lib.home=/usr/share/java always > tomcat.lib.home=/usr/share/tomcat5.5/common/lib/ always > > # Do not validate xml files by default. > # Disabled because servlet-2.3.jar references an XSD which is not longer > # hostet by IBM. This should generally make the startup faster. > property=org.mortbay.xml.XmlParser.NotValidating=true 50,54c53 < org.mortbay.jetty.Server.class < # override class with old property name < $(start.class).class < # override class with preferred property name < $(main.class).class --- > org.mortbay.jetty.Server.class 57,58c56,57 < $(jetty.home)/etc/admin.xml nargs == 0 < $(jetty.home)/etc/jetty.xml nargs == 0 --- > #/etc/admin.xml nargs == 0 > /etc/jetty/jetty.xml nargs == 0 61,65c60,66 < $(jetty.home)/lib/org.mortbay.jetty.jar java >= 1.4 < $(jetty.home)/lib/javax.servlet.jar always < < # Add JMX jars < $(jetty.home)/lib/org.mortbay.jmx.jar java >= 1.4 --- > # Always use the >1.2 version because version matching does not work with kaffe > $(jetty.home)/lib/org.mortbay.jetty.jar > #$(jetty.home)/lib/org.mortbay.jetty.jar java >= 1.4 > #$(jetty.home)/extra/lib/org.mortbay.jetty-jdk1.2.jar java < 1.4 AND java >= 1.2 > $(jetty.home)/lib/org.mortbay.jmx.jar > $(java.lib.home)/servlet-api-2.4.jar > $(java.lib.home)/jsp-api-2.0.jar 67,68c68,69 < # Always use xercesImpl from ext if it is present < $(jetty.home)/ext/xercesImpl.jar ! available org.apache.xerces.jaxp.DocumentBuilderImpl --- > # Always use xercesImpl from debian if it is present > $(java.lib.home)/xercesImpl.jar ! available org.apache.xerces.jaxp.DocumentBuilderImpl.class 71,72c72,73 < $(jetty.home)/ext/xmlParserAPIs-2.5.jar ! available org.w3c.dom.DOMError < $(jetty.home)/ext/xml-apis.jar ! available org.w3c.dom.Document --- > $(java.lib.home)/xmlParserAPIs.jar ! available org.w3c.dom.DOMError > $(java.lib.home)/xml-apis.jar ! available org.w3c.dom.Document 75,85c76,82 < $(jetty.home)/ext/ant.jar ! available org.apache.tools.ant.Main < $(jetty.home)/ext/jasper-runtime.jar ! available org.apache.jasper.Constants < $(jetty.home)/ext/jasper-compiler.jar ! available org.apache.jasper.JspCompilationContext < $(jetty.home)/ext/jnet.jar ! available javax.net.SocketFactory < $(jetty.home)/ext/jsse.jar ! available javax.net.ssl.SSLServerSocket < $(jetty.home)/ext/jcert.jar ! available javax.security.cert.X509Certificate < # Add anything in ext we have not yet considered. < $(jetty.home)/ext/* < < # Try some standard locations for anything missing. < /usr/share/java/ant.jar ! available org.apache.tools.ant.Main --- > $(java.lib.home)/commons-logging.jar ! available org.apache.commons.logging.LogFactory > $(java.lib.home)/commons-el.jar ! available org.apache.commons.el.ExpressionEvaluatorImpl > $(java.lib.home)/jmxri.jar ! available javax.management.MBeanServer > $(tomcat.lib.home)/jasper-compiler-jdt.jar ! available org.eclipse.jdt.core.JDTCompilerAdapter > $(tomcat.lib.home)/jasper-runtime.jar ! available org.apache.jasper.Constants > $(tomcat.lib.home)/jasper-compiler.jar ! available org.apache.jasper.JspCompilationContext > $(java.lib.home)/ant-1.6.jar ! available org.apache.tools.ant.BuildException 89,90c86,87 < # Add a resources directory if it is there < $(jetty.home)/resources/ --- > # Add anything in ext we have not yet considered. > $(jetty.home)/ext/*
src 之 jetty
安裝
- 此處下載 http://dist.codehaus.org/jetty/
- 解壓縮即可
啟動
cd $jetty_home java -jar start.jar etc/jetty.xml
用jetty 的 eclipse plugin
- eclipse plugin
- 新增 Jetty Web Container 環境(Server)(似乎eclipse 3.2版才有效)
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> <Configure id="Server" class="org.mortbay.jetty.Server"> <Call name="addConnector"> <Arg> <New class="org.mortbay.jetty.nio.SelectChannelConnector"> <Set name="port">8080</Set> <Set name="maxIdleTime">30000</Set> <Set name="lowResourcesConnections">5000</Set> <Set name="lowResourcesMaxIdleTime">5000</Set> </New> </Arg> </Call> <Set name="handler"> <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.mortbay.jetty.Handler"> <Item> <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/> </Item> <Item> <New class="org.mortbay.jetty.webapp.WebAppContext"> <Set name="contextPath">/</Set> <Set name="resourceBase">F:/Data/WebApp</Set> <Set name="overrideDescriptor">config/JettyWeb.xml</Set> </New> </Item> </Array> </Set> </New> </Set> </Configure>
補充
- hadoop的web server 用jetty 所搭配的 資料夾與 port 對應
$hadoop_home/webapps/task/ 50060 $hadoop_home/webapps/dfs/ 50070 $hadoop_home/webapps/datanode/ 50010 $hadoop_home/webapps/job/ 50030 $hadoop_home/webapps/task/ 50060 $hadoop_home/webapps/dfs/ 50070