1. Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前(包含6.1)继续由Codehaus提供下载服务,在该页面的下方有如下信息:
  2. 版本 Java HTTP Servlet JSP Status Notes
  3. Jetty-8 eclipse 1.6- HTTP/1.1 RFC2616 3.0 2.2 Development Standardized async
  4. Jetty-7 eclipse 1.5- HTTP/1.1 RFC2616 2.5 2.1 Almost stable org.eclipse.jetty
  5. Jetty-6.1 1.4-1.6 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Stable Async SSL, AJP, cometd, testing
  6. 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
  7. Jetty-5.1 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Stable J2EE 1.4 Compliance tested, optimizations, geronimo integration.
  8. Jetty-5.0 1.2-1.4 HTTP/1.1 RFC2616 2.4 2.0 Deprecated Schema, JettyPlus
  9. Jetty-4.2 1.2-1.4 HTTP/1.1 RFC2616 2.3+ 1.2 Mature JettyPlus
  10. Jetty-4.1 1.2-1.4 HTTP/1.1 RFC2616 2.3 1.2 Deprecated JAXP1.1, AJP13(mod_jk)
  11. Jetty-4.0 1.2 HTTP/1.1 RFC2616 2.3 1.2 Deprecated
  12. Jetty-3.1 1.2 HTTP/1.1 RFC2068 2.2 1.1 Ancient JMX
  13. Jetty-3.0 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized
  14. Jetty-2.4 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary
  15. Jetty-1.0 1.0 HTTP/1.0 RFC1945 - - Mythical
  16. 本书讨论的Jetty版本是6.1,也是目前使用最多的稳定版本,我们到http://dist.codehaus.org/jetty/jetty-6.1.22/下载6.1系列最新的6.1.22版本:
  17. jetty-6.1.22-src.zip 16-Nov-2009 23:04 5.7M
  18. jetty-6.1.22.zip 16-Nov-2009 23:10 24M
  19. 我们下载24M大小的jetty-6.1.22.zip文件,另外一个文件有5M是因为只包含了Jetty源码和实例源码,jetty-6.1.22.zip文件包包含了 api文档,实例代码、jetty源码、发行Jar文件、各操作系统下的启动脚本和其他部分依赖包。也许你会有疑问,我之前介绍Jetty的时候说Jetty体积非常小,是的没错!Jetty核心文件的大小只有约700K!
  20. 2.2 安装
  21. 要运行Jetty的首要条件当然是需要安装JDK了,建议使用j2se 1.5以上的版本,关于JDK或者JRE的安装,为了环保这里就不再花费篇章介绍了,请参考其他网络资料。
  22. 其实Jetty所谓的安装过程也就是将下载的文件解压到指定的目录,然后根据不同的操作系统来配置环境变量而已。
  23. 以后讲解如何从maven源码编译等。
  24. 2.3 使用java命令启动
  25. 只要在支持j2se的平台的操作系统下,jetty都可以运行。所以我们先介绍jetty提供的跨平台的服务启动方式。
  26. 2.3.1 快速启动
  27. 打开控制台,定位到jetty的安装目录,执行命令:
  28. java -jar start.jar etc/jetty.xml
  29. 提示:关于如何执行java的jar文件请查找其他资料。
  30. start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开。
  31. 参数内容可以有以下几种:
  32. --help    查看帮助信息
  33. --stop    停止服务,下节中会讲到
  34. --version  查看当前jetty版本信息
  35. 其他:作为Jetty服务配置文件
  36. 我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:
  37. java -jar start.jar etc/jetty.xml etc/jetty-plus.xml
  38. 这条命令就指定了两个服务配置文件,etc/jetty.xml和etc/jetty-plus.xml。
  39. 在后续的章节中术语“服务配置文件”就是指的这些文件。
  40. 使用浏览器打开地址 http://localhost:8080/ ,你将会看到jetty的默认示例站点。
  41. 2.3.2 停止服务
  42. 在刚才启动jetty的终端窗口里面按住ctrl-c键即可。
  43. 不过你可以这样来启动
  44. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar
  45. jetty启动后会在本地监听你指定的端口8009,并将在验证下次关闭命令的密码secret。现在再通过命令:
  46. java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop
  47. 就可以在本机的另外一个终端窗口来停止jetty服务。在linux系统中,你可以先将jetty进程转移到后台执行,然后再通过命令行来停止Jetty服务。
  48. 哦,看了上面的介绍你或许以为jetty启动和关闭是如此麻烦,一点也不符合Jetty小巧玲珑的气质。其实Jetty为我们准备了各个操作系统中快捷的方式。不过记住不管何种方式最终都是通过start.jar来启动jetty服务的。
  49. 2.3.3 start.jar深入探讨
  50. 初学者可以先跳过本节。本节讨论start.jar模块的作用和细节。start.jar让jetty各个不同的组件联合起来工作,使得jetty看上去像一个服务器软件,同时start.jar也不过是jetty的其中一个组件而已。了解start.jar工作原理后,我们就可以知道#jetty_home/lib下面那么多文件夹下面的jar文件是如何配被选择性地加入到classpath中去的。
  51. Jetty start 组件提供了跨平台的启动方式。 通过启动命令 java -DDEBUG=true -jar start.jar [jetty.xml ... ] 可以看到启动过程的debug日志信息。
  52. 看看Jetty start 在启动过程中都做了哪些操作:
  53. 自动设置正确的 jetty home目录
  54. 根据JDK版本配置classpath,比如jdk1.5版本之前的版本只能使用jsp2.0规范所需的jar包
  55. 根据设定的classpath,构建好一个类加载器。再根据设定的main class来调用指定main class的main方法
  56. 由此可见start组件是相当独立的组件,甚至我们可以在自己的项目里面单独使用该组件控制程序的启动。
  57. start.config语法
  58. Jetty start是由一个名叫start.config的配置文件控制的,这个文件存在在start.jar里面,路径是org/mortbay/start/start.config。熟悉这个配置文件的内容会对jetty作为服务器的启动过程有更好的了解。最重要的是我们知道jetty的classpath的设置和如何通过设置系统变量来把外部类路径增加到jetty中。
  59. start.config的格式是每一行一条指令,如果以#开头则为注解行。指令的后面是执行条件,如果条件不符合则忽略。
  60. 指令有如下几种情况:
  61. 以.path结尾: 如果.path前面的字符串存在且长度大于0,则将该类路径加入到系统类路径中
  62. 包含 “=”  :   执行System.setProperty(property,value)调用,“=”左边为property,右边为value
  63. 以.class结尾:如果".class"前面有值的话,就设定为Main class
  64. 以.xml结尾:  如果指定的xml文件存在的话就作为jetty服务的启动配置文件之一
  65. 以/*结尾:    指定目录下面的所以jar或者zip文件,被加入到classpath中
  66. 以/**结尾:  指定递归该目录下面的所以jar或者zip文件,被加入到classpath中
  67. 以/结尾:     指定的目录作为classpath的一部分
  68. 其他:         作为一个文件加入到classpath中
  69. 关于条件:
  70. "<",">"," <=",">=","==","!=" 是条件的比较操作符,从左到右执行
  71. exists 检测紧跟着后面的文件是否存在
  72. available 检测紧跟着后面的class是否存在
  73. !表示非;always表示true
  74. 变量nargs表示传递给start.jar的参数数量
  75. 变量java表示java版本
  76. 其他规则:
  77. 所有的指令按行从上到下执行
  78. 如果一个文件或者目录由于条件被否决,没有被加入到类路径中,那么即使后续指令中包含了该文件或者目录,那么同样不会被加入到类路径中
  79. 指令或者条件中, $(...) 表示获取系统属性,即一次System.getProperty()调用。如$(jetty.class.path).path指令,当系统属性“jetty.class.path”没有设置,那么运行时实际指令的值位 “.path”。如果设置系统属性“jetty.class.path”的值为"/usr/local/jarlib",那么运行时实际指令值为 "/usr/local/jarlib.path"
  80. start.config文件
  81. $(jetty.class.path).path                         always
  82. $(jetty.lib)/**                                  exists $(jetty.lib)
  83. # Try different settings of jetty.home until the jetty.jar is found.
  84. jetty.home=.                                     ! exists $(jetty.home)/start.jar
  85. jetty.home=..                                    ! exists $(jetty.home)/start.jar
  86. jetty.home=/home/jetty                           ! exists $(jetty.home)/start.jar
  87. jetty.home=/C:/jetty                             ! exists $(jetty.home)/start.jar
  88. jetty.home=.                                     ! exists $(jetty.home)/start.jar
  89. # The main class to run
  90. org.mortbay.xml.XmlConfiguration.class
  91. $(start.class).class
  92. # The default configuration files
  93. $(jetty.home)/etc/jetty.xml                      nargs == 0
  94. # Set the jetty classpath
  95. $(jetty.home)/lib/*                              always
  96. # Set the classpath for the supporting cast
  97. $(jetty.home)/lib/jsp-2.1/*                      java >= 1.5
  98. $(jetty.home)/lib/jsp-2.0/*                      ! available org.apache.jasper.servlet.JspServlet
  99. $(jetty.home)/lib/management/*
  100. $(jetty.home)/lib/management/mx4j/*              java < 1.5
  101. $(jetty.home)/lib/naming/*
  102. $(jetty.home)/lib/plus/*
  103. $(jetty.home)/lib/xbean/*
  104. $(jetty.home)/lib/wadi/*
  105. $(jetty.home)/lib/grizzly/*
  106. $(jetty.home)/lib/annotations/*                  java >= 1.5
  107. $(jetty.home)/lib/jre1.5/**                      java >= 1.5
  108. # Recursively add all jars and zips from the ext lib
  109. $(jetty.home)/lib/ext/**                        always
  110. # Try some standard locations for anything missing.
  111. /usr/share/java/ant.jar                          ! available org.apache.tools.ant.Main
  112. # Add a resources directory if it is there
  113. $(jetty.home)/resources/
  114. 2.4我们可以学到什么
  115. 2.5 Windows系统下启动和关闭控制
  116. jetty利用Win32Wrapper工具(http://wrapper.tanukisoftware.org)使得在window系统上可以以控制台或者Window服务的方式运行jetty程序,使用起来非常方便。
  117. 在 $jetty_home/bin目录下有如下几个相关文件:Jetty-Service.exe , jetty-service.conf。双击Jetty-Service.exe 文件,即可以控制台的方式来运行jetty了。jetty-service.conf 显然是配置文件了,一会详细介绍。
  118. (以后我们用 $jetty_home来表示Jetty的安装目录)
  119. 注册Windows服务
  120. 打开命令行,转到 $jetty_home/bin 目录,执行命令:
  121. E:\jetty-6.1.22\bin>Jetty-Service.exe --install jetty-service.conf
  122. wrapper  | Jetty6-Service installed.
  123. 启动服务
  124. 执行命令: Jetty-Service.exe --start jetty-service.conf
  125. 停止服务
  126. 执行命令:Jetty-Service.exe --stop jetty-service.conf
  127. 注销服务
  128. 执行命令:Jetty-Service.exe --remove jetty-service.conf
  129. 你在成功注册Windows服务后,可以修改服务让其随系统自动启动。
  130. jetty-service.conf 配置文件
  131. wrapper.java.classpath.1=../lib/win32/*.jar
  132. wrapper.java.classpath.2=../lib/*.jar
  133. wrapper.java.classpath.3=../start.jar
  134. wrapper.java.library.path.1=../lib/win32/
  135. #wrapper.java.additional.n可以设置jvm参数
  136. wrapper.java.additional.1=-Djetty.home=../           #设置系统属性jetty.home,指定jetty根目录
  137. wrapper.java.additional.2=-Djetty.logs=../logs        #设置系统属性jetty.logs
  138. wrapper.java.initmemory=3                                 #jvm初始内存大小
  139. wrapper.java.maxmemory=64                              #jvm内存大小
  140. wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener
  141. #wrapper.app.parameter.n可以设置应用程序参数,及 -jar start.jar 后面的参数
  142. #例如 wrapper.app.parameter.1=../etc/jetty.xml ../etc/jetty-ajp.xml
  143. wrapper.app.parameter.1=../etc/jetty.xml
  144. wrapper.console.format=PM
  145. wrapper.console.loglevel=INFO
  146. wrapper.logfile=../logs/jetty-service.log          #输出到System.out到内容将同时被记录在该文件
  147. wrapper.logfile.format=LPTM
  148. wrapper.logfile.loglevel=INFO
  149. wrapper.logfile.maxsize=0                          #jetty-service.log文件的最大尺寸,0表示不限制
  150. wrapper.logfile.maxfiles=0                          #当限制文件大小时,允许存在的最多文件个数
  151. wrapper.syslog.loglevel=NONE
  152. wrapper.ntservice.name=Jetty
  153. wrapper.ntservice.displayname=Jetty6-Service
  154. wrapper.ntservice.description=Jetty is an open-source, standards-based, full-featured web server implemented entirely in java
  155. wrapper.ntservice.starttype=AUTO_START
  156. wrapper.ntservice.interactive=false
  157. #Win32Wrapper中定义一个触发器,当控制抛出OutOfMemoryError错误,则重启Jetty服务
  158. wrapper.filter.trigger.1=java.lang.OutOfMemoryError
  159. wrapper.filter.action.1=RESTART
  160. 2.6 Linux系统下启动和关闭控制
  161. 在$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来关闭相应进程。
  162. 在jetty.sh里面还可以定制变量来控制jetty,如指定JAVA_HOME目录、指定jvm最大内存、指定pid文件的位置等。
  163. 2.6.1 系统变量的设置
  164. 提示:在编辑变量的时候“=”两边千万不要有空格。
  165. 下面逐个介绍各变量的作用:
  166. JAVA_HOME
  167. 指定Java安装目录。当你需要指定特定位置的jdk或者jetty搜索不到java安装目录时,需要设定该变量。
  168. 例如:    JAVA_HOME=/usr/local/java/jdk1.5.0_10/
  169. JAVA
  170. 执行java命令。默认值为 $JAVA_HOME/bin/java。一般不需要设置。
  171. JAVA_OPTIONS
  172. JVM的可选参数。你可以利用这个选项配置内存大小、系统变量等等其他参数,这个变量非常有用。
  173. 例如:JAVA_OPTIONS="-Xmn128M -Xms256M -Xmx1024M
  174. -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"
  175. JETTY_RUN
  176. jetty.pid文件的存放目录。默认值为 /var/run, /usr/var/run  或 /tmp 三者之一。如果你需要在一台服务器上启动多个安装目录下的jetty,那么必须设定该变量以避免共享同一pid文件而造成冲突。建议设置为各个安装目录下面新建的run目录。
  177. JETTY_PID
  178. pid文件的路径。默认值 $JETTY_RUN/jetty.pid。一般不需要设置。
  179. JETTY_ARGS
  180. 传递给jetty的参数。值 java -jar start.jar 后面的部分。
  181. JETTY_HOME
  182. jetty安装目录。虽然jetty尝试搜索jetty安装目录,但是我们还是建议设定该变量。
  183. 例如:
  184. JETTY_HOME=/usr/local/jetty-6.1.22
  185. 在启动java时增加jvm 参数 “-Djetty.home=$JETTY_HOME” 。所以在Linux环境下,start.jar的自动搜索jetty_home的动作会被取消。
  186. JETTY_USER
  187. 如设定该值,那么将以该用户的身份启动jetty
  188. JETTY_PORT
  189. jetty服务器监听端口。如果设定该值,那么在启动java时增加jvm 参数 “-Djetty.port=$JETTY_PORT” 。
  190. 在jetty启动配置文件里,<Set name="Port"><SystemProperty name="jetty.port" default="8080"/></Set>这个语句将会使用我们这里指定的端口值。
  191. 2.6.2 命令参数
  192. 系统控制台中,跳转到 $jetty_home/bin目录下,输入“  ./jetty.sh start”,其中start为命令参数,现在介绍几个常用命令参数
  193. start
  194. 启动jetty服务
  195. stop
  196. 停止jetty服务
  197. restart
  198. 重启jetty服务
  199. supervise
  200. 挂起服务
  201. check
  202. 显示当前jetty实例运行时所使用的变量参数,可以用来查看变量是否设置正确。
  203. 显示结果实例:
  204. node-189 bin # ./jetty.sh check
  205. Checking arguments to Jetty:
  206. JETTY_HOME     =  /usr/local/jetty-6.1.15
  207. JETTY_CONF     =
  208. JETTY_RUN      =  /var/run
  209. JETTY_PID      =  /var/run/jetty.pid
  210. JETTY_PORT     =
  211. JETTY_LOGS     =
  212. CONFIGS        =  /usr/local/jetty-6.1.15/etc/jetty-logging.xml /usr/local/jetty-6.1.15/etc/jetty.xml
  213. JAVA_OPTIONS   =   -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp
  214. JAVA           =  /usr/local/java/jdk1.5.0_10/bin/java
  215. CLASSPATH      =  /usr/local/java/jdk1.5.0_10/lib:/usr/local/java/jdk1.5.0_10/jre/lib
  216. 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
  217. Jetty running pid=24573
  218. 2.6.3 相关配置文件
  219. /etc/jetty.conf
  220. 如果该文件存在,那么该文件的内容会被解析用来设定jetty 启动配置文件(configurations),规则如下:
  221. 以“#”开头:该行内容作为注解
  222. 指向一个文件的路径:如果该文件存在则作为jetty启动的一个启动配置文件
  223. 指向一个目录的路径:如果该目录存在,则目录下的所有.xml的文件会被作为启动配置文件
  224. 如果不存在该文件,jetty.sh将会使用默认值 :
  225. “ ${JETTY_HOME}/etc/jetty-logging.xml ${JETTY_HOME}/etc/jetty.xml ”
  226. /etc/default/jetty 、/etc/default/jetty6 和 $HOME/.jettyrc
  227. 若任何一个文件存在,那么jetty.sh文件执行时都会执行它。我们可以在这些文件中配置系统变量。

jetty服务器的安装和部署、新增到开机启动服务的更多相关文章

  1. CentOS8安装GNOME3桌面并设置开机启动图形界面

    本篇文章介绍如何在CentOS8 Linux操作系统中安装GNOME3桌面环境和GDM(GNOME Display Manager)现实环境管理器. 环境 CentOS8 Minimal 安装GNOM ...

  2. Window安装Redis并设置为开机启动

    一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...

  3. Golang 在 Linux CentOS 6.5 服务器上实现 博客后台程序开机启动

    在linux下想实现开机启动的方法很多,这里我采用了在/etc/rc.local里写shell指令的方式. 以下就以我的实际操作为例子讲述,很多地方需要看官自己调整信息哦! 1.在/etc/rc.lo ...

  4. 安装USB驱动时报错“无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动”

    今天在安装一个USB设备的时候报错“Windows已找到设备的驱动程序软件,但在试图安装它时遇到错误”. 这个错误的描述是“无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动”. 事实上,这个 ...

  5. ambari 安装HDP3.0.1后,启动服务的问题记录

    HDP的ambari集成安装工具真的是比ClouderaManager差上那么一点儿,不说安装的时候就麻烦,即使软件安装包已成功安装,也不意味着可以正常使用了,启动HDP集群过程中还会有不少的错误! ...

  6. 安装oracle 11g时,报启动服务出现错误,找不到OracleMTSRecoveryService的解决方法

    很多人在安装orcl数据库时,出现很多报错,我也不例外,因上次数据库出现问题,无法修复,只能从新安装,无奈的是,安装时报启动服务出现错误,找不到OracleMTSRecoveryService错MMP ...

  7. Ubuntu安装sysv-rc-conf配置开机启动服务

    ubuntu下chkconfig的替代方案: 第一步:在终端键入sudo apt-get install sysv-rc-conf安装sysv-rc-conf服务. 第二步:检查设置系统开机自启动服务 ...

  8. Jetty 8.1 安装 运行 部署

    链接地址:http://blog.csdn.net/lego2816/article/details/42650545 Java + MySQL 从Jfinal开始,第一步先走完整个流程,主要是发布部 ...

  9. Jetty实战之 安装 运行 部署

    本文地址:http://blog.csdn.net/kongxx/article/details/7218767 1. 首先从Jetty的官方网站http://wiki.eclipse.org/Jet ...

随机推荐

  1. [MFC] 从文件读取与向文件添加数据

    CString str,str2,str3;str2="dsf",str3="dsfds"; CStdioFile myFile, File; if(myFil ...

  2. javascript跨域通信(二):window.name实现的跨域数据传输

    首先了解一下window.name这个东西是什么. name 在浏览器环境中是一个全局/window对象的属性,当在 frame 中加载新页面时,name 的属性值依旧保持不变 并且name 属性仅对 ...

  3. atitit.为什么java体系开发效率这样低的原因and解决

    atitit.为什么java体系开发效率这样低的原因and解决 #---开发理念问题(影响度:很大的,2-3倍效率) mvc<>webform server control ajax< ...

  4. PowerDesigner建表

    SQL: --建表 --管理人员表 admin --drop table WPADMIN cascade constraints; /*================================ ...

  5. Dash

    作为一名死coder,每天最常见的动作就是查看各种API文档,你一定也有过同时打开N个窗口(HTML.PDF.CHM),不停的在编辑器与文档之间切换的感受吧?怎么说呢,其实我很讨厌这种枯燥无味的动作, ...

  6. bzoj 3517: 翻硬币

    3517: 翻硬币 Time Limit: 1 Sec  Memory Limit: 128 MB Description 有一个n行n列的棋盘,每个格子上都有一个硬币,且n为偶数.每个硬币要么是正面 ...

  7. C#与C++之间类型的对应

    Windows Data Type .NET Data Type BOOL, BOOLEAN Boolean or Int32 BSTR String BYTE Byte CHAR Char DOUB ...

  8. netstat(转载)

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  9. Awesome C/C++

    Awesome C/C++ A curated list of awesome C/C++ frameworks, libraries, resources, and shiny things. In ...

  10. 10个有关RESTful API良好设计的最佳实践

    Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GE ...