{{{ #!html
安裝 Jetty
}}} [[PageOutline]] = jetty 前言 = * 本篇 雖然說明了兩種安裝jetty 的方式,但是還是建議去jetty 官網下載 jetty的原始壓縮檔來安裝,因為包含了src才能看原始碼 * 若要jetty上手,還是請使用[wiki:Jetty-Demo jetty-demo] == jetty 特性 == * 易用性 1. 通過 XML 或者 API 來對 Jetty 進行配置; 2. 默認配置可以滿足大部分的需求; 3. 將 Jetty 嵌入到應用程序當中只需要非常少的代碼; * 可擴展性 1. 即使在有大量服務請求的情況下(如Ajax 的 Web 2.0),系統的性能也能保持在一個可以接受的狀態。 2. 利用 Continuation 機制來處理大量的用戶請求以及時間比較長的連接。 * 易嵌入性 * Jetty 設計之初就是作為一個優秀的組件來設計的,這也就意味著 Jetty 可以非常容易的嵌入到應用程序當中而不需要程序為了使用 Jetty 做修改。從某種程度上,你也可以把 Jetty 理解為一個嵌入式的Web服務器。 = apt-get 之 jetty = == 安裝jetty == * [http://docs.codehaus.org/display/JETTY/Debian+Packages 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 {{{ #!text }}} * 啟動 {{{ $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 加入 {{{ #!sh $(tomcat.lib.home)/jasper-compiler-jdt.jar ! available org.eclipse.jdt.core.JDTCompilerAdapter }}} * 預設port在8280 * ps2: jetty的預設網頁裡的[http://localhost:8280/tut/index.html tutorial] 還不錯 == 問題解決 == * 用 apt-get install jetty 所安裝的jetty無法開啟jsp的網頁 * 將會出現錯誤訊息 {{{ #!text HTTP ERROR: 500 No Java compiler available RequestURI=/sample/hello.jsp }}} * 解決方法: {{{ sudo apt-get install libecj-java }}} 並在/etc/jetty/start.config 加入 {{{ #!sh $(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的不同 {{{ #!diff 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 = * [http://www.webtide.com/eclipse/ eclipse plugin ] * [http://www.webtide.com/eclipse/features/org.mortbay.jetty.serveradaptor_1.0.4.jar 1.0.4下載] * 新增 Jetty Web Container 環境(Server)(似乎eclipse 3.2版才有效) [[Image(http://sites.google.com/site/javacodelibrary/_/rsrc/1240252400400/java-net/jetty/Jetty_Eclipse.png?height=366&width=420)]] {{{ #!text 8080 30000 5000 5000 / F:/Data/WebApp config/JettyWeb.xml }}} == 補充 == * 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 || == 更多資料 == * [http://docs.codehaus.org/display/JETTY/Jetty+Documentation jetty 官方文件] * [http://www.matrix.org.cn/resource/article/2006-08-14/Jetty_44588.html jetty 中文介紹] * [http://www.ibm.com/developerworks/cn/web/wa-lo-jetty/index.html 入門 ]