IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    定制Jetty8方式启动web应用

    longhao (longtask@gmail.com)发表于 2011-11-28 09:20:38
    love 0

         1:Jetty的4种web应用部署方式(不包括嵌入启动):

    1:直接修改${JETTY_HOME}/etc/jetty.xml的配置来部署应用;

    2:把war包扔到${JETTY_HOME}/webapps目录中,自动被WebAppDeployer发现去部署;

    3:在${JETTY_HOME}/contents中增加一个配置文件(模仿test.xml的配置),由ContextDeployer自动发现去部署;

    4:定制部署启动配置文件;

        前面3中部署方式在Jetty7的部署方式中讲述的较为清楚。

         2:定制化启动Jetty:

        由于我们每个应用需要不同端口启动,这样在停止A应用的情况下,B应用不会受到影响。同时,我们希望在每台服务器上只有一份jetty,每个应用的配置文件应该是独立的。

    2.1:jetty容器配置文件

     

        在start.ini中配置了etc/jetty.xml , etc/jetty-webapps.xml (WebAppDeployer),etc/jetty-contexts.xml(ContextDeployer)三个文件,代表在默认情况下启动jetty,web应用3种部署都是支持的。WebAppDeployer则是会扫描${JETTY_HOME}/webapps目录,寻找war包并部署;ContextDeployer会扫描${JETTY_HOME}/contents目录,找到可以部署的context配置文件并部署。

        所以定制jetty之前,我们需要在start.ini中把这3行注释掉。

    2.2:web应用配置

     

        复制${JETTY_HOME}/etc/jetty.xml文件到bin目录下面,修改port和confidentialPort为自己应用的端口号。在<Array type="org.eclipse.jetty.server.Handler">中添加需要部署的war包得Item,如下注意(contextPath和war值):

         <Item>

                   <New class="org.eclipse.jetty.webapp.WebAppContext">

                        <Set name="contextPath">/aaa</Set>

                        <Set name="war">/opt/longtask/aaa/webapps/aaa.war</Set>

                        <Set name="defaultsDescriptor"><SystemProperty name="jetty.home" default="."/>/etc/webdefault.xml</Set>

                        <Set name="extractWAR">true</Set>

                        <Set name="copyWebDir">false</Set>

                        <Call name="addServlet">

                             <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>

                             <Arg>/</Arg>

                        </Call>

                   </New>

               </Item>

    2.3:启动应用(省略相关sh脚本)

     

    JETTY_CONFIG="${PWD}/jetty-${APP_NAME}.xml ${PWD}/jetty-logging.xml"

    JETTY_OPTS="-jar ${JETTY_HOME}/start.jar --pre=${JETTY_CONFIG}"

    java -server $JDK_OPTS $JETTY_OPTS >/dev/null 2>&1 & 

    2.4:OPTIONS的说明

     

    在jetty8中通过java -jar start.jar --version命令可以查看到默认启动的OPTIONS:

    Active Options: [Server, annotations, ext, jdbc, jmx, jsp, jta, plus, resources, websocket]

    如果要启动其他OPTIONS,需要自己添加。

     

         3:FAQ:

    3.1:无法启动,报端口错误:

     

    Caused by: java.net.BindException: Address already in use

            at sun.nio.ch.Net.bind(Native Method)

            at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126)

            at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)

            at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:172)

            at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:300)

            at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:250)

            at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)

            at org.eclipse.jetty.server.Server.doStart(Server.java:273)

            at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59)

            at org.eclipse.jetty.xml.XmlConfiguration$1.run(XmlConfiguration.java:1203)

            at java.security.AccessController.doPrivileged(Native Method)

            at org.eclipse.jetty.xml.XmlConfiguration.main(XmlConfiguration.java:1126)

    通过lsof -i:port来查看端口是否被占用,如果被占用,需要修改jetty配置文件中的port来启动

    3.2:在去掉start.ini中注释掉jetty.xml后,制定自己的jetty.xml后报错。

     

    问题:

    java.io.FileNotFoundException: Unable to find XML Config: etc/jetty.xml

            at org.eclipse.jetty.start.Main.resolveXmlConfig(Main.java:671)

            at org.eclipse.jetty.start.Main.resolveXmlConfigs(Main.java:888)

            at org.eclipse.jetty.start.Main.start(Main.java:508)

            at org.eclipse.jetty.start.Main.parseCommandLine(Main.java:265)

            at org.eclipse.jetty.start.Main.main(Main.java:79)

    需要在--pre中添加启动项,不是在-jar start.jar后面添加

    3.3:网上说war包需要解压缩,是错误的,jetty8不需要解压的。

     

         4:参考文档:

    • Serving Webapp A Only from Port A and Webapp B Only from Port B
    • Running Jetty-7.0.x
    • Jetty/Reference/jetty.xml syntax


沪ICP备19023445号-2号
友情链接