陈宝刚---享受生活,追逐梦想!
理想是心中的火焰,有追求的人才是幸福的人!
[html] view plaincopy
 
  1. Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前(包含6.1)继续由Codehaus提供下载服务,在该页面的下方有如下信息:   
  2.       
  3.    
  4.   
  5.    
  6.   
  7. 版本 Java HTTP Servlet JSP Status Notes   
  8. Jetty-8 eclipse 1.6- HTTP/1.1 RFC2616 3.0 2.2 Development Standardized async   
  9. Jetty-7 eclipse 1.5- HTTP/1.1 RFC2616 2.5 2.1 Almost stable org.eclipse.jetty   
  10. Jetty-6.1 1.4-1.6 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Stable Async SSL, AJP, cometd, testing   
  11. Jetty-6 1.4-1.5 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Deprecated Continuations, IOC, NIO, dynamic buffers, smaller, faster, better   
  12. Jetty-5.1 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Stable J2EE 1.4 Compliance tested, optimizations, geronimo integration.   
  13. Jetty-5.0 1.2-1.4 HTTP/1.1 RFC2616 2.4 2.0 Deprecated Schema, JettyPlus   
  14. Jetty-4.2 1.2-1.4 HTTP/1.1 RFC2616 2.3+ 1.2 Mature JettyPlus   
  15. Jetty-4.1 1.2-1.4 HTTP/1.1 RFC2616 2.3 1.2 Deprecated JAXP1.1, AJP13(mod_jk)   
  16. Jetty-4.0 1.2 HTTP/1.1 RFC2616 2.3 1.2 Deprecated     
  17. Jetty-3.1 1.2 HTTP/1.1 RFC2068 2.2 1.1 Ancient JMX   
  18. Jetty-3.0 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized     
  19. Jetty-2.4 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary     
  20. Jetty-1.0 1.0 HTTP/1.0 RFC1945 - - Mythical     
  21.   
  22.    
  23.   
  24.   
  25.   
  26.    
  27.   
  28.   
  29.   
  30.  本书讨论的Jetty版本是6.1,也是目前使用最多的稳定版本,我们到http://dist.codehaus.org/jetty/jetty-6.1.22/下载6.1系列最新的6.1.22版本:  
  31.   
  32.   
  33. jetty-6.1.22-src.zip 16-Nov-2009 23:04 5.7M  
  34. jetty-6.1.22.zip 16-Nov-2009 23:10 24M   
  35.   
  36.   
  37.     我们下载24M大小的jetty-6.1.22.zip文件,另外一个文件有5M是因为只包含了Jetty源码和实例源码,jetty-6.1.22.zip文件包包含了 api文档,实例代码、jetty源码、发行Jar文件、各操作系统下的启动脚本和其他部分依赖包。也许你会有疑问,我之前介绍Jetty的时候说Jetty体积非常小,是的没错!Jetty核心文件的大小只有约700K!  
  38.   
  39.   
  40.   
  41.   
  42. 2.2 安装  
  43.     要运行Jetty的首要条件当然是需要安装JDK了,建议使用j2se 1.5以上的版本,关于JDK或者JRE的安装,为了环保这里就不再花费篇章介绍了,请参考其他网络资料。  
  44.   
  45.       
  46.   
  47.     其实Jetty所谓的安装过程也就是将下载的文件解压到指定的目录,然后根据不同的操作系统来配置环境变量而已。  
  48.   
  49.   
  50.   
  51.    以后讲解如何从maven源码编译等。  
  52. 2.3 使用java命令启动  
  53.     只要在支持j2se的平台的操作系统下,jetty都可以运行。所以我们先介绍jetty提供的跨平台的服务启动方式。  
  54.   
  55. 2.3.1 快速启动  
  56.      打开控制台,定位到jetty的安装目录,执行命令:              
  57.            
  58. java -jar start.jar etc/jetty.xml   
  59.   
  60.   
  61.   
  62. 提示:关于如何执行java的jar文件请查找其他资料。  
  63.   
  64.   
  65.     start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开。  
  66.   
  67.   
  68. 参数内容可以有以下几种:  
  69. --help    查看帮助信息   
  70. --stop    停止服务,下节中会讲到   
  71. --version  查看当前jetty版本信息   
  72. 其他:作为Jetty服务配置文件   
  73.   
  74.   
  75.     我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:  
  76.   
  77.   
  78.   
  79. java -jar start.jar etc/jetty.xml etc/jetty-plus.xml   
  80.   
  81.   
  82.   
  83.    这条命令就指定了两个服务配置文件,etc/jetty.xml和etc/jetty-plus.xml。  
  84.   
  85.   
  86.     在后续的章节中术语“服务配置文件”就是指的这些文件。  
  87.      
  88.     使用浏览器打开地址 http://localhost:8080/ ,你将会看到jetty的默认示例站点。  
  89.   
  90.   
  91.   
  92. 2.3.2 停止服务  
  93.     在刚才启动jetty的终端窗口里面按住ctrl-c键即可。  
  94.   
  95.   
  96.   
  97.     不过你可以这样来启动  
  98.   
  99.   
  100.   
  101. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar  
  102.    
  103.   
  104.        
  105.   
  106.     jetty启动后会在本地监听你指定的端口8009,并将在验证下次关闭命令的密码secret。现在再通过命令:  
  107.   
  108.   
  109. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop    
  110.   
  111.   
  112.   
  113.     就可以在本机的另外一个终端窗口来停止jetty服务。在linux系统中,你可以先将jetty进程转移到后台执行,然后再通过命令行来停止Jetty服务。  
  114.   
  115.   
  116.     哦,看了上面的介绍你或许以为jetty启动和关闭是如此麻烦,一点也不符合Jetty小巧玲珑的气质。其实Jetty为我们准备了各个操作系统中快捷的方式。不过记住不管何种方式最终都是通过start.jar来启动jetty服务的。  
  117.   
  118.   
  119. 2.3.3 start.jar深入探讨  
  120.      初学者可以先跳过本节。本节讨论start.jar模块的作用和细节。start.jar让jetty各个不同的组件联合起来工作,使得jetty看上去像一个服务器软件,同时start.jar也不过是jetty的其中一个组件而已。了解start.jar工作原理后,我们就可以知道#jetty_home/lib下面那么多文件夹下面的jar文件是如何配被选择性地加入到classpath中去的。  
  121.   
  122.   
  123.     Jetty start 组件提供了跨平台的启动方式。 通过启动命令 java -DDEBUG=true -jar start.jar [jetty.xml ... ] 可以看到启动过程的debug日志信息。  
  124.   
  125.   
  126.     看看Jetty start 在启动过程中都做了哪些操作:  
  127.   
  128.           
  129.   
  130. 自动设置正确的 jetty home目录   
  131. 根据JDK版本配置classpath,比如jdk1.5版本之前的版本只能使用jsp2.0规范所需的jar包   
  132. 根据设定的classpath,构建好一个类加载器。再根据设定的main class来调用指定main class的main方法   
  133.     由此可见start组件是相当独立的组件,甚至我们可以在自己的项目里面单独使用该组件控制程序的启动。  
  134.   
  135.   
  136.   
  137.     start.config语法  
  138.     Jetty start是由一个名叫start.config的配置文件控制的,这个文件存在在start.jar里面,路径是org/mortbay/start/start.config。熟悉这个配置文件的内容会对jetty作为服务器的启动过程有更好的了解。最重要的是我们知道jetty的classpath的设置和如何通过设置系统变量来把外部类路径增加到jetty中。  
  139.   
  140.   
  141.     start.config的格式是每一行一条指令,如果以#开头则为注解行。指令的后面是执行条件,如果条件不符合则忽略。  
  142.   
  143.     指令有如下几种情况:  
  144.   
  145. 以.path结尾: 如果.path前面的字符串存在且长度大于0,则将该类路径加入到系统类路径中   
  146. 包含 “=”  :   执行System.setProperty(property,value)调用,“=”左边为property,右边为value   
  147. 以.class结尾:如果".class"前面有值的话,就设定为Main class   
  148. 以.xml结尾:  如果指定的xml文件存在的话就作为jetty服务的启动配置文件之一   
  149. 以/*结尾:    指定目录下面的所以jar或者zip文件,被加入到classpath中   
  150. 以/**结尾:  指定递归该目录下面的所以jar或者zip文件,被加入到classpath中   
  151. 以/结尾:     指定的目录作为classpath的一部分   
  152. 其他:         作为一个文件加入到classpath中   
  153.     关于条件:  
  154. "<",">"," <=",">=","==","!=" 是条件的比较操作符,从左到右执行   
  155. exists 检测紧跟着后面的文件是否存在   
  156. available 检测紧跟着后面的class是否存在   
  157. !表示非;always表示true   
  158. 变量nargs表示传递给start.jar的参数数量   
  159. 变量java表示java版本   
  160.     其他规则:  
  161. 所有的指令按行从上到下执行   
  162. 如果一个文件或者目录由于条件被否决,没有被加入到类路径中,那么即使后续指令中包含了该文件或者目录,那么同样不会被加入到类路径中   
  163. 指令或者条件中, $(...) 表示获取系统属性,即一次System.getProperty()调用。如$(jetty.class.path).path指令,当系统属性“jetty.class.path”没有设置,那么运行时实际指令的值位 “.path”。如果设置系统属性“jetty.class.path”的值为"/usr/local/jarlib",那么运行时实际指令值为 "/usr/local/jarlib.path"   
  164.   
  165.   
  166. start.config文件  
  167. $(jetty.class.path).path                         always  
  168. $(jetty.lib)/**                                  exists $(jetty.lib)  
  169.   
  170.   
  171.   
  172.   
  173. # Try different settings of jetty.home until the jetty.jar is found.  
  174. jetty.home=.                                     ! exists $(jetty.home)/start.jar   
  175. jetty.home=..                                    ! exists $(jetty.home)/start.jar  
  176. jetty.home=/home/jetty                           ! exists $(jetty.home)/start.jar  
  177. jetty.home=/C:/jetty                             ! exists $(jetty.home)/start.jar  
  178. jetty.home=.                                     ! exists $(jetty.home)/start.jar   
  179.   
  180.   
  181. # The main class to run  
  182. org.mortbay.xml.XmlConfiguration.class  
  183. $(start.class).class  
  184.   
  185.   
  186. # The default configuration files  
  187. $(jetty.home)/etc/jetty.xml                      nargs == 0  
  188.   
  189.   
  190. # Set the jetty classpath  
  191. $(jetty.home)/lib/*                              always  
  192.   
  193.   
  194. # Set the classpath for the supporting cast                 
  195. $(jetty.home)/lib/jsp-2.1/*                      java >= 1.5     
  196. $(jetty.home)/lib/jsp-2.0/*                      ! available org.apache.jasper.servlet.JspServlet                 
  197. $(jetty.home)/lib/management/*         
  198. $(jetty.home)/lib/management/mx4j/*              java 1.5             
  199. $(jetty.home)/lib/naming/*                                
  200. $(jetty.home)/lib/plus/*                               
  201. $(jetty.home)/lib/xbean/*                               
  202. $(jetty.home)/lib/wadi/*                               
  203. $(jetty.home)/lib/grizzly/*                               
  204. $(jetty.home)/lib/annotations/*                  java >= 1.5                              
  205.   
  206.   
  207. $(jetty.home)/lib/jre1.5/**                      java >= 1.5  
  208.   
  209.   
  210. # Recursively add all jars and zips from the ext lib  
  211. $(jetty.home)/lib/ext/**                        always  
  212.   
  213.   
  214. # Try some standard locations for anything missing.  
  215. /usr/share/java/ant.jar                          ! available org.apache.tools.ant.Main  
  216.   
  217.   
  218. # Add a resources directory if it is there  
  219. $(jetty.home)/resources/   
  220.   
  221.   
  222.   
  223.       
  224.   
  225. 2.4我们可以学到什么  
  226.   
  227.   
  228.   
  229.   
  230. 2.5 Windows系统下启动和关闭控制  
  231.       
  232.     jetty利用Win32Wrapper工具(http://wrapper.tanukisoftware.org)使得在window系统上可以以控制台或者Window服务的方式运行jetty程序,使用起来非常方便。  
  233.      
  234.   
  235.     在 $jetty_home/bin目录下有如下几个相关文件:Jetty-Service.exe , jetty-service.conf。双击Jetty-Service.exe 文件,即可以控制台的方式来运行jetty了。jetty-service.conf 显然是配置文件了,一会详细介绍。  
  236.   
  237.   
  238.      (以后我们用 $jetty_home来表示Jetty的安装目录)  
  239.   
  240.       
  241.   
  242.   注册Windows服务  
  243.         打开命令行,转到 $jetty_home/bin 目录,执行命令:  
  244.   
  245.           
  246.   
  247.         E:\jetty-6.1.22\bin>Jetty-Service.exe --install jetty-service.conf  
  248.         wrapper  | Jetty6-Service installed.  
  249.   
  250.   
  251.   启动服务  
  252.         执行命令: Jetty-Service.exe --start jetty-service.conf   
  253.   停止服务  
  254.          执行命令:Jetty-Service.exe --stop jetty-service.conf   
  255.   注销服务  
  256.          执行命令:Jetty-Service.exe --remove jetty-service.conf   
  257.   
  258.   
  259.       
  260.   
  261.     你在成功注册Windows服务后,可以修改服务让其随系统自动启动。  
  262.   
  263.   
  264.   
  265. jetty-service.conf 配置文件  
  266. wrapper.java.classpath.1=../lib/win32/*.jar                 
  267.   
  268. wrapper.java.classpath.2=../lib/*.jar  
  269. wrapper.java.classpath.3=../start.jar  
  270. wrapper.java.library.path.1=../lib/win32/  
  271. #wrapper.java.additional.n可以设置jvm参数  
  272. wrapper.java.additional.1=-Djetty.home=../           #设置系统属性jetty.home,指定jetty根目录  
  273. wrapper.java.additional.2=-Djetty.logs=../logs        #设置系统属性jetty.logs  
  274. wrapper.java.initmemory=3                                 #jvm初始内存大小  
  275. wrapper.java.maxmemory=64                              #jvm内存大小  
  276. wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener  
  277. #wrapper.app.parameter.n可以设置应用程序参数,及 -jar start.jar 后面的参数  
  278. #例如 wrapper.app.parameter.1=../etc/jetty.xml ../etc/jetty-ajp.xml  
  279. wrapper.app.parameter.1=../etc/jetty.xml  
  280. wrapper.console.format=PM  
  281. wrapper.console.loglevel=INFO  
  282. wrapper.logfile=../logs/jetty-service.log          #输出到System.out到内容将同时被记录在该文件  
  283. wrapper.logfile.format=LPTM  
  284. wrapper.logfile.loglevel=INFO  
  285. wrapper.logfile.maxsize=0                          #jetty-service.log文件的最大尺寸,0表示不限制  
  286. wrapper.logfile.maxfiles=0                          #当限制文件大小时,允许存在的最多文件个数  
  287. wrapper.syslog.loglevel=NONE  
  288. wrapper.ntservice.name=Jetty  
  289. wrapper.ntservice.displayname=Jetty6-Service  
  290. wrapper.ntservice.description=Jetty is an open-source, standards-based, full-featured web server implemented entirely in java  
  291. wrapper.ntservice.starttype=AUTO_START  
  292. wrapper.ntservice.interactive=false  
  293.   
  294.   
  295. #Win32Wrapper中定义一个触发器,当控制抛出OutOfMemoryError错误,则重启Jetty服务  
  296. wrapper.filter.trigger.1=java.lang.OutOfMemoryError    
  297. wrapper.filter.action.1=RESTART  
  298.   
  299.   
  300. 2.6 Linux系统下启动和关闭控制  
  301.      在$jetty_home/bin目录下,Jetty为我们提供了一个名为jetty.sh的shell脚本文件,在linux环境下我们用这命令 ./jetty.sh start 和 .jetty.sh stop 命令来启动和关闭jetty。jetty.sh在启动Jetty后,将jvm的系统进程ID保存在一个$JETTY_RUN/jetty.pid的文件里面,然后在收到stop命令后读取pid来关闭相应进程。  
  302.   
  303.      在jetty.sh里面还可以定制变量来控制jetty,如指定JAVA_HOME目录、指定jvm最大内存、指定pid文件的位置等。  
  304.   
  305. 2.6.1 系统变量的设置  
  306. 提示:在编辑变量的时候“=”两边千万不要有空格。  
  307.   
  308.   
  309. 下面逐个介绍各变量的作用:  
  310.   
  311.   
  312.   
  313. JAVA_HOME      
  314.     指定Java安装目录。当你需要指定特定位置的jdk或者jetty搜索不到java安装目录时,需要设定该变量。  
  315.   
  316. 例如:    JAVA_HOME=/usr/local/java/jdk1.5.0_10/  
  317.   
  318.   
  319. JAVA  
  320.      执行java命令。默认值为 $JAVA_HOME/bin/java。一般不需要设置。  
  321.   
  322.   
  323.   
  324. JAVA_OPTIONS  
  325.     JVM的可选参数。你可以利用这个选项配置内存大小、系统变量等等其他参数,这个变量非常有用。  
  326.   
  327.   
  328.   
  329. 例如:JAVA_OPTIONS="-Xmn128M -Xms256M -Xmx1024M   
  330. -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"  
  331.   
  332.   
  333. JETTY_RUN  
  334.     jetty.pid文件的存放目录。默认值为 /var/run, /usr/var/run  或 /tmp 三者之一。如果你需要在一台服务器上启动多个安装目录下的jetty,那么必须设定该变量以避免共享同一pid文件而造成冲突。建议设置为各个安装目录下面新建的run目录。  
  335.   
  336.   
  337.   
  338. JETTY_PID  
  339.     pid文件的路径。默认值 $JETTY_RUN/jetty.pid。一般不需要设置。  
  340.   
  341.   
  342.   
  343. JETTY_ARGS  
  344.     传递给jetty的参数。值 java -jar start.jar 后面的部分。  
  345.   
  346.   
  347.   
  348. JETTY_HOME  
  349.     jetty安装目录。虽然jetty尝试搜索jetty安装目录,但是我们还是建议设定该变量。  
  350.   
  351. 例如:  
  352.     JETTY_HOME=/usr/local/jetty-6.1.22  
  353.   
  354.   
  355.     在启动java时增加jvm 参数 “-Djetty.home=$JETTY_HOME” 。所以在Linux环境下,start.jar的自动搜索jetty_home的动作会被取消。  
  356.   
  357.   
  358.   
  359. JETTY_USER  
  360.     如设定该值,那么将以该用户的身份启动jetty  
  361.   
  362.   
  363.   
  364. JETTY_PORT  
  365.     jetty服务器监听端口。如果设定该值,那么在启动java时增加jvm 参数 “-Djetty.port=$JETTY_PORT” 。  
  366.     在jetty启动配置文件里,<Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>这个语句将会使用我们这里指定的端口值。  
  367.   
  368.   
  369. 2.6.2 命令参数  
  370.     系统控制台中,跳转到 $jetty_home/bin目录下,输入“  ./jetty.sh start”,其中start为命令参数,现在介绍几个常用命令参数  
  371.   
  372.       
  373.   
  374. start      
  375.     启动jetty服务  
  376.   
  377.    
  378.   
  379. stop      
  380.     停止jetty服务  
  381.   
  382. restart   
  383.     重启jetty服务  
  384. supervise      
  385.   
  386.    
  387.   
  388.     挂起服务  
  389.   
  390.   
  391.   
  392. check     
  393.   
  394.   
  395.      显示当前jetty实例运行时所使用的变量参数,可以用来查看变量是否设置正确。  
  396. 显示结果实例:  
  397. node-189 bin # ./jetty.sh check  
  398. Checking arguments to Jetty:  
  399. JETTY_HOME     =  /usr/local/jetty-6.1.15  
  400. JETTY_CONF     =  
  401. JETTY_RUN      =  /var/run  
  402. JETTY_PID      =  /var/run/jetty.pid  
  403. JETTY_PORT     =  
  404. JETTY_LOGS     =  
  405. CONFIGS        =  /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml  
  406. JAVA_OPTIONS   =   -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp  
  407. JAVA           =  /usr/local/java/jdk1.5.0_10/bin/java  
  408. CLASSPATH      =  /usr/local/java/jdk1.5.0_10/lib:/usr/local/java/jdk1.5.0_10/jre/lib  
  409. RUN_CMD        =  /usr/local/java/jdk1.5.0_10/bin/java  -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp -jar /usr/local/jetty-6.1.15/start.jar  /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml  
  410.   
  411.   
  412. Jetty running pid=24573  
  413.   
  414.   
  415.   
  416.   
  417. 2.6.3 相关配置文件  
  418.   
  419.   
  420. /etc/jetty.conf  
  421.     如果该文件存在,那么该文件的内容会被解析用来设定jetty 启动配置文件(configurations),规则如下:  
  422.   
  423.   
  424.   
  425. 以“#”开头:该行内容作为注解   
  426. 指向一个文件的路径:如果该文件存在则作为jetty启动的一个启动配置文件   
  427. 指向一个目录的路径:如果该目录存在,则目录下的所有.xml的文件会被作为启动配置文件   
  428.    
  429.   
  430.     如果不存在该文件,jetty.sh将会使用默认值 :  
  431.   
  432. “ ${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml ”  
  433.   
  434.   
  435.   
  436. /etc/default/jetty 、/etc/default/jetty6 和 $HOME/.jettyrc  
  437.     若任何一个文件存在,那么jetty.sh文件执行时都会执行它。我们可以在这些文件中配置系统变量。  
posted on 2015-02-21 13:34  追梦人RUBY  阅读(837)  评论(0编辑  收藏  举报