设为首页 收藏本站
查看: 1265|回复: 0

[经验分享] Linux下 Jetty 安装及使用

[复制链接]

尚未签到

发表于 2016-2-26 08:47:28 | 显示全部楼层 |阅读模式
Jetty的首页地址是http://www.mortbay.org/jetty/,点击Downloads进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前(包含6.1)继续由Codehaus提供下载服务,在该页面的下方有如下信息:
 
  
版本JavaHTTPServletJSPStatusNotesJetty-8eclipse1.6-HTTP/1.1RFC26163.02.2DevelopmentStandardizedasyncJetty-7eclipse1.5-HTTP/1.1RFC26162.52.1Almoststableorg.eclipse.jettyJetty-6.11.4-1.6HTTP/1.1RFC26162.52.1 or2.0StableAsync SSL, AJP,cometd, testingJetty-61.4-1.5HTTP/1.1RFC26162.52.1 or2.0DeprecatedContinuations, IOC,NIO, dynamic buffers, smaller, faster, betterJetty-5.11.2-1.5HTTP/1.1RFC26162.42.0StableJ2EE 1.4 Compliancetested, optimizations, geronimo integration.Jetty-5.01.2-1.4HTTP/1.1RFC26162.42.0DeprecatedSchema,JettyPlusJetty-4.21.2-1.4HTTP/1.1RFC26162.3+1.2MatureJettyPlusJetty-4.11.2-1.4HTTP/1.1RFC26162.31.2DeprecatedJAXP1.1,AJP13(mod_jk)Jetty-4.01.2HTTP/1.1RFC26162.31.2Deprecated Jetty-3.11.2HTTP/1.1RFC20682.21.1AncientJMXJetty-3.01.2HTTP/1.1RFC20682.21.1Fossilized Jetty-2.41.1HTTP/1.0RFC19452.11.0Legendary Jetty-1.01.0HTTP/1.0RFC1945--Mythical 
 

  


 本书讨论的Jetty版本是6.1,也是目前使用最多的稳定版本,我们到http://dist.codehaus.org/jetty/jetty-6.1.22/下载6.1系列最新的6.1.22版本:


jetty-6.1.22-src.zip16-Nov-2009 23:045.7M
jetty-6.1.22.zip16-Nov-2009 23:1024M

   我们下载24M大小的jetty-6.1.22.zip文件,另外一个文件有5M是因为只包含了Jetty源码和实例源码,jetty-6.1.22.zip文件包包含了api文档,实例代码、jetty源码、发行Jar文件、各操作系统下的启动脚本和其他部分依赖包。也许你会有疑问,我之前介绍Jetty的时候说Jetty体积非常小,是的没错!Jetty核心文件的大小只有约700K!




2.2 安装
   要运行Jetty的首要条件当然是需要安装JDK了,建议使用j2se1.5以上的版本,关于JDK或者JRE的安装,为了环保这里就不再花费篇章介绍了,请参考其他网络资料。

   

   其实Jetty所谓的安装过程也就是将下载的文件解压到指定的目录,然后根据不同的操作系统来配置环境变量而已。



   以后讲解如何从maven源码编译等。
2.3 使用java命令启动
   只要在支持j2se的平台的操作系统下,jetty都可以运行。所以我们先介绍jetty提供的跨平台的服务启动方式。

2.3.1 快速启动
    打开控制台,定位到jetty的安装目录,执行命令:          
      
java -jarstart.jar etc/jetty.xml



提示:关于如何执行java的jar文件请查找其他资料。


   start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开。


参数内容可以有以下几种:

  • --help    查看帮助信息
  • --stop    停止服务,下节中会讲到
  • --version  查看当前jetty版本信息
  • 其他:作为Jetty服务配置文件



  我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:


java -jar start.jar etc/jetty.xmletc/jetty-plus.xml



  这条命令就指定了两个服务配置文件,etc/jetty.xml和etc/jetty-plus.xml。


   在后续的章节中术语“服务配置文件”就是指的这些文件。
   
   使用浏览器打开地址 http://localhost:8080/,你将会看到jetty的默认示例站点。



2.3.2 停止服务
   在刚才启动jetty的终端窗口里面按住ctrl-c键即可。



   不过你可以这样来启动



java-DSTOP.PORT=8009 -DSTOP.KEY=secret -jarstart.jar


    

   jetty启动后会在本地监听你指定的端口8009,并将在验证下次关闭命令的密码secret。现在再通过命令:


java-DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar--stop 



   就可以在本机的另外一个终端窗口来停止jetty服务。在linux系统中,你可以先将jetty进程转移到后台执行,然后再通过命令行来停止Jetty服务。


   哦,看了上面的介绍你或许以为jetty启动和关闭是如此麻烦,一点也不符合Jetty小巧玲珑的气质。其实Jetty为我们准备了各个操作系统中快捷的方式。不过记住不管何种方式最终都是通过start.jar来启动jetty服务的。


2.3.3 start.jar深入探讨
    初学者可以先跳过本节。本节讨论start.jar模块的作用和细节。start.jar让jetty各个不同的组件联合起来工作,使得jetty看上去像一个服务器软件,同时start.jar也不过是jetty的其中一个组件而已。了解start.jar工作原理后,我们就可以知道#jetty_home/lib下面那么多文件夹下面的jar文件是如何配被选择性地加入到classpath中去的。


    Jettystart 组件提供了跨平台的启动方式。 通过启动命令 java -DDEBUG=true -jar start.jar[jetty.xml ... ] 可以看到启动过程的debug日志信息。


    看看Jettystart 在启动过程中都做了哪些操作:

      


  • 自动设置正确的 jetty home目录
  • 根据JDK版本配置classpath,比如jdk1.5版本之前的版本只能使用jsp2.0规范所需的jar包
  • 根据设定的classpath,构建好一个类加载器。再根据设定的main class来调用指定mainclass的main方法
   由此可见start组件是相当独立的组件,甚至我们可以在自己的项目里面单独使用该组件控制程序的启动。



   start.config语法
    Jettystart是由一个名叫start.config的配置文件控制的,这个文件存在start.jar里面,路径是org/mortbay/start/start.config。熟悉这个配置文件的内容会对jetty作为服务器的启动过程有更好的了解。最重要的是我们知道jetty的classpath的设置和如何通过设置系统变量来把外部类路径增加到jetty中。


   start.config的格式是每一行一条指令,如果以#开头则为注解行。指令的后面是执行条件,如果条件不符合则忽略。

   指令有如下几种情况:


  • 以.path结尾: 如果.path前面的字符串存在且长度大于0,则将该类路径加入到系统类路径中
  • 包含 “=”  :  执行System.setProperty(property,value)调用,“=”左边为property,右边为value
  • 以.class结尾:如果".class"前面有值的话,就设定为Main class
  • 以.xml结尾: 如果指定的xml文件存在的话就作为jetty服务的启动配置文件之一
  • 以/*结尾:   指定目录下面的所以jar或者zip文件,被加入到classpath中
  • 以/**结尾: 指定递归该目录下面的所以jar或者zip文件,被加入到classpath中
  • 以/结尾:    指定的目录作为classpath的一部分
  • 其他:        作为一个文件加入到classpath中
   关于条件:

  • "<",">","<=",">=","==","!="是条件的比较操作符,从左到右执行
  • exists 检测紧跟着后面的文件是否存在
  • available 检测紧跟着后面的class是否存在
  • !表示非;always表示true
  • 变量nargs表示传递给start.jar的参数数量
  • 变量java表示java版本
   其他规则:

  • 的指令按行从上到下执行
  • 如果一个文件或者目录由于条件被否决,没有被加入到类路径中,那么即使后续指令中包含了该文件或者目录,那么同样不会被加入类路径中
  • 指令或者条件中, $(...)表示获取系统属性,即一次System.getProperty()调用。如$(jetty.class.path).path指令,当系统属性“jetty.class.path”没有设置,那么运行时实际指令的值位“.path”。如果设置系统属性“jetty.class.path”的值为"/usr/local/jarlib",那么运行时实际指令值为"/usr/local/jarlib.path"





start.config文件
$(jetty.class.path).path                    always
$(jetty.lib)/**                            exists$(jetty.lib)




# Try differentsettings of jetty.home until the jetty.jar isfound.
jetty.home=.                               ! exists$(jetty.home)/start.jar 
jetty.home=..                              ! exists$(jetty.home)/start.jar
jetty.home=/home/jetty                       ! exists$(jetty.home)/start.jar
jetty.home=/C:/jetty                        ! exists$(jetty.home)/start.jar
jetty.home=.                               ! exists$(jetty.home)/start.jar 


# The main class torun
org.mortbay.xml.XmlConfiguration.class
$(start.class).class


# The defaultconfiguration files
$(jetty.home)/etc/jetty.xml                  nargs == 0


# Set the jettyclasspath
$(jetty.home)/lib/*                        always


# Set the classpathfor the supporting cast            
$(jetty.home)/lib/jsp-2.1/*                  java >= 1.5  
$(jetty.home)/lib/jsp-2.0/*                  ! available org.apache.jasper.servlet.JspServlet            
$(jetty.home)/lib/management/*     
$(jetty.home)/lib/management/mx4j/*           java < 1.5         
$(jetty.home)/lib/naming/*                         
$(jetty.home)/lib/plus/*                        
$(jetty.home)/lib/xbean/*                        
$(jetty.home)/lib/wadi/*                        
$(jetty.home)/lib/grizzly/*                        
$(jetty.home)/lib/annotations/*               java >= 1.5                       


$(jetty.home)/lib/jre1.5/**                  java >=1.5


# Recursively addall jars and zips from the ext lib
$(jetty.home)/lib/ext/**                   always


# Try some standardlocations for anything missing.
/usr/share/java/ant.jar                      ! availableorg.apache.tools.ant.Main


# Add a resourcesdirectory if it is there
$(jetty.home)/resources/




   

2.4我们可以学到什么





2.5 Windows系统下启动和关闭控制
    
   jetty利用Win32Wrapper工具(http://wrapper.tanukisoftware.org)使得在window系统上可以以控制台或者Window服务的方式运行jetty程序,使用起来非常方便。
   

    在$jetty_home/bin目录下有如下几个相关文件:Jetty-Service.exe ,jetty-service.conf。双击Jetty-Service.exe文件,即可以控制台的方式来运行jetty了。jetty-service.conf 显然是配置文件了,一会详细介绍。


    (以后我们用 $jetty_home来表示Jetty的安装目录)

 
  注册Windows服务
      打开命令行,转到 $jetty_home/bin 目录,执行命令:

      

      E:\jetty-6.1.22\bin>Jetty-Service.exe--install jetty-service.conf
      wrapper  | Jetty6-Serviceinstalled.


  启动服务
      执行命令: Jetty-Service.exe --startjetty-service.conf 
  停止服务
       执行命令:Jetty-Service.exe --stopjetty-service.conf 
  注销服务
       执行命令:Jetty-Service.exe --removejetty-service.conf 


   

   你在成功注册Windows服务后,可以修改服务让其随系统自动启动。



jetty-service.conf 配置文件
wrapper.java.classpath.1=../lib/win32/*.jar            
wrapper.java.classpath.2=../lib/*.jar
wrapper.java.classpath.3=../start.jar
wrapper.java.library.path.1=../lib/win32/
#wrapper.java.additional.n可以设置jvm参数
wrapper.java.additional.1=-Djetty.home=../        #设置系统属性jetty.home,指定jetty根目录
wrapper.java.additional.2=-Djetty.logs=../logs      #设置系统属性jetty.logs
wrapper.java.initmemory=3                         #jvm初始内存大小
wrapper.java.maxmemory=64                      #jvm内存大小
wrapper.java.mainclass=org.mortbay.jetty.win32service.JettyServiceWrapperListener
#wrapper.app.parameter.n可以设置应用程序参数,及 -jar start.jar后面的参数
#例如 wrapper.app.parameter.1=../etc/jetty.xml../etc/jetty-ajp.xml
wrapper.app.parameter.1=../etc/jetty.xml
wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=../logs/jetty-service.log        #输出到System.out到内容将同时被记录在该文件
wrapper.logfile.format=LPTM
wrapper.logfile.loglevel=INFO
wrapper.logfile.maxsize=0                    #jetty-service.log文件的最大尺寸,0表示不限制
wrapper.logfile.maxfiles=0                    #当限制文件大小时,允许存在的最多文件个数
wrapper.syslog.loglevel=NONE
wrapper.ntservice.name=Jetty
wrapper.ntservice.displayname=Jetty6-Service
wrapper.ntservice.description=Jetty is an open-source,standards-based, full-featured web server implemented entirely injava
wrapper.ntservice.starttype=AUTO_START
wrapper.ntservice.interactive=false


#Win32Wrapper中定义一个触发器,当控制抛出OutOfMemoryError错误,则重启Jetty服务
wrapper.filter.trigger.1=java.lang.OutOfMemoryError  
wrapper.filter.action.1=RESTART


2.6Linux系统下启动和关闭控制
    在$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来关闭相应进程。

    在jetty.sh里面还可以定制变量来控制jetty,如指定JAVA_HOME目录、指定jvm最大内存、指定pid文件的位置等。

2.6.1 系统变量的设置
提示:在编辑变量的时候“=”两边千万不要有空格。


下面逐个介绍各变量的作用:



JAVA_HOME   
   指定Java安装目录。当你需要指定特定位置的jdk或者jetty搜索不到java安装目录时,需要设定该变量。

例如:   JAVA_HOME=/usr/local/java/jdk1.5.0_10/


JAVA
    执行java命令。默认值为 $JAVA_HOME/bin/java。一般不需要设置。



JAVA_OPTIONS
   JVM的可选参数。你可以利用这个选项配置内存大小、系统变量等等其他参数,这个变量非常有用。



例如:JAVA_OPTIONS="-Xmn128M -Xms256M-Xmx1024M 
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"


JETTY_RUN
   jetty.pid文件的存放目录。默认值为 /var/run, /usr/var/run 或 /tmp 三者之一。如果你需要在一台服务器上启动多个安装目录下的jetty,那么必须设定该变量以避免共享同一pid文件而造成冲突。建议设置为各个安装目录下面新建的run目录。



JETTY_PID
   pid文件的路径。默认值$JETTY_RUN/jetty.pid。一般不需要设置。



JETTY_ARGS
   传递jetty的参数。值 java -jar start.jar后面的部分。



JETTY_HOME
   jetty安装目录。虽然jetty尝试搜索jetty安装目录,但是我们还是建议设定该变量。

例如:
   JETTY_HOME=/usr/local/jetty-6.1.22


   在启动java时增加jvm 参数 “-Djetty.home=$JETTY_HOME”。所以在Linux环境下,start.jar的自动搜索jetty_home的动作会被取消。



JETTY_USER
   如设定该值,那么将以该用户的身份启动jetty



JETTY_PORT
   jetty服务器监听端口。如果设定该值,那么在启动java时增加jvm 参数“-Djetty.port=$JETTY_PORT” 。
   在jetty启动配置文件里,<Setname="Port"><SystemPropertyname="jetty.port"default="8080"/></Set>这个语句将会使用我们这里指定的端口值。


2.6.2 命令参数
   系统控制台中,跳转到 $jetty_home/bin目录下,输入“ ./jetty.shstart”,其中start为命令参数,现在介绍几个常用命令参数

   

start   
  启动jetty服务
  
stop   
  停止jetty服务
restart 
   重启jetty服务
  supervise
  
  挂起服务


check   


    显示当前jetty实例运行时所使用的变量参数,可以用来查看变量是否设置正确。
显示结果实例:
node-189 bin # ./jetty.shcheck
Checking arguments to Jetty:
JETTY_HOME     = /usr/local/jetty-6.1.15
JETTY_CONF     =
JETTY_RUN     =  /var/run
JETTY_PID     =  /var/run/jetty.pid
JETTY_PORT     =
JETTY_LOGS     =
CONFIGS       = /usr/local/jetty-6.1.15/etc/jetty-logging.xml/usr/local/jetty-6.1.15/etc/jetty.xml
JAVA_OPTIONS   =  -Djetty.home=/usr/local/jetty-6.1.15 -Djava.io.tmpdir=/tmp
JAVA          = /usr/local/java/jdk1.5.0_10/bin/java
CLASSPATH     = /usr/local/java/jdk1.5.0_10/lib:/usr/local/java/jdk1.5.0_10/jre/lib
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


Jetty running pid=24573




2.6.3 相关配置文件



/etc/jetty.conf
   如果该文件存在,那么该文件的内容会被解析用来设定jetty启动配置文件(configurations),规则如下:




  • 以“#”开头:该行内容作为注解
  • 指向一个文件的路径:如果该文件存在则作为jetty启动的一个启动配置文件
  • 指向一个目录的路径:如果该目录存在,则目录下的所有.xml的文件会被作为启动配置文件
  
  如果不存在该文件,jetty.sh将会使用默认值 :
  “ ${JETTY_HOME}/etc/jetty-logging.xml${JETTY_HOME}/etc/jetty.xml ”

/etc/default/jetty、/etc/default/jetty6 和 $HOME/.jettyrc
   若任何一个文件存在,那么jetty.sh文件执行时都会执行它。我们可以在这些文件中配置系统变量。
 
http://jimichan.javaeye.com/blog/601156


转自:http://blog.sina.com.cn/s/blog_4b81125f0100mikb.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-182890-1-1.html 上篇帖子: Linux和Jetty的一点小冲突 下篇帖子: 在Linux上部署jetty服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表