`

新手配置 Jetty + Eclipse (Hot code debugging)

 
阅读更多
在用Tomcat 开发Java Web project 时,在调试的时候,由于我们不断改动java 源文件,因而我们需要不断重新启动Tomcat 更新我们的项目,我们把很多时间浪费在了更新上,这样开发效率大大降低。

Jetty 完全支持Hot code debugging ,也就是说,我们在更改java源文件,更改html,jsp时不用再重新启动服务器了,这样节省了大量时间(注意web.xml 等其他配置文件的更新还是需要重新启动服务器的)。

好了现在开始教你如何配置Jetty 到Eclipse.

http://www.eclipse.org/jetty/downloads.php这个地址可以安装eclipse 对jetty支持所需要的东西,可以通过eclipse自动安装

一、安装插件
jetty 在eclipse的插件现在名字叫run jetty run (2012年6月7日)

地址:http://run-jetty-run.googlecode.com/svn/trunk/updatesite


安装方法就不说了。安完后,点击eclipse的run configuration,查看安装成功


二、jetty 配置(可省略直接跳到三)

要想让Jetty启动Web服务器,则要告诉Jetty一些参数,比如端口是多少,哪里才是Web的根目录等。
这个XML配置文件是通用的,对于一般的应用,要修改的个性部分很少,所以保存一份,然后其它的项目只要复制粘贴就行了。

和得到Jar包依赖一样,也有两种方式得到该配置文件。
第一种方法是直接在Jetty官网中下载,然后根据自己的实际情况改下就行了:http://docs.codehaus.org/display/JETTY/jetty.xml

第二种方式是复制以下内容,然后粘贴保存就行了:

[html] view plaincopy

    <?xml version="1.0"encoding="GBK"?> 
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTDConfigure//EN" "http://jetty.mortbay.org/configure.dtd"> 
    <Configure id="Server"class="org.mortbay.jetty.Server"> 
    <Set name="ThreadPool"> 
       <New class="org.mortbay.thread.BoundedThreadPool"> 
        <Set name="minThreads">10</Set> 
        <Set name="maxThreads">250</Set> 
        <Set name="lowThreads">25</Set> 
       </New> 
    </Set> 
     
    <Property name="org.mortbay.util.URI.charset"default="GBK"/> 
    <Call name="addConnector"> 
       <Arg> 
        <NewclassNewclass="org.mortbay.jetty.nio.SelectChannelConnector"> 
         <Set name="port"> 
         <SystemPropertynameSystemPropertyname="jetty.port" default="80" /><!--端口号 --> 
         </Set> 
         <SetnameSetname="maxIdleTime">30000</Set> 
         <Set name="Acceptors">2</Set> 
         <Set name="statsOn">false</Set> 
         <Set name="confidentialPort">8443</Set> 
         <SetnameSetname="lowResourcesConnections">5000</Set> 
         <SetnameSetname="lowResourcesMaxIdleTime">5000</Set> 
        </New> 
       </Arg> 
    </Call> 
    <Set name="sessionIdManager"> 
       <NewclassNewclass="org.mortbay.jetty.servlet.HashSessionIdManager"> 
        <Set name="workerName">node1</Set> 
       </New> 
    </Set> 
    <Set name="handler"> 
       <New id="Handlers"class="org.mortbay.jetty.handler.HandlerCollection"> 
        <Set name="handlers"> 
         <ArraytypeArraytype="org.mortbay.jetty.Handler"> 
          <Item> 
           <New id="Contexts"class="org.mortbay.jetty.handler.ContextHandlerCollection" /> 
          </Item> 
          <Item> 
           <New id="DefaultHandler"class="org.mortbay.jetty.handler.DefaultHandler" /> 
          </Item> 
          <Item> 
           <New id="RequestLog"class="org.mortbay.jetty.handler.RequestLogHandler" /> 
          </Item> 
         </Array> 
        </Set> 
       </New> 
    </Set> 
    <Set name="handler"> 
       <New id="Handlers"class="org.mortbay.jetty.handler.HandlerCollection"> 
        <Set name="handlers"> 
         <ArraytypeArraytype="org.mortbay.jetty.Handler"> 
          <Item> 
           <NewclassNewclass="org.mortbay.jetty.webapp.WebAppContext"> 
           <Set name="contextPath">/</Set><!-- ContextPath--> 
           <Set name="resourceBase">./WebRoot</Set><!-- Web应用根目录 --> 
            <CallnameCallname="addServlet"> 
            <Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg> 
             <Arg>/</Arg> 
            </Call> 
            <!-- 增加其它的Servlet --> 
           </New> 
          </Item> 
         </Array> 
        </Set> 
       </New> 
    </Set> 
    <Set name="UserRealms"> 
       <ArraytypeArraytype="org.mortbay.jetty.security.UserRealm"/> 
    </Set> 
    <Set name="stopAtShutdown">true</Set> 
    <Set name="sendServerVersion">true</Set> 
    <Set name="gracefulShutdown">1000</Set> 
    </Configure> 



该配置文件要修改的部分一般只有三处:端口号、上下文(ContextPath)和Web应用根目录。
三、启动jetty

目前发现的最好最快的直接在ECLIPSE中JETTY调试方式

适用于6.1.3以上,包括6.1.5的JETTY。

它主要是利用了JDK的代码自动更换性能(code hot replace),可以不用重启JETTY就调试、更换资源文件。注意:一定是DEBUG方式运行才有这项功能。

所以应该说这篇文章的方法更好:

在Run->Debug中,New一个Java Application的配置,填入:

org.mortbay.xml.XmlConfiguration

参数填入一个自己的JETTY配置文件:

完成的myjetty.xml配置文件,请将其中的相应目录修改成自己项目的目录:

[html] view plaincopy

    <?xml version="1.0"?> 
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"> 
     
    <!-- =============================================================== --> 
    <!-- Configure the Jetty Server                                      --> 
    <!--                                                                 --> 
    <!-- Documentation of this file format can be found at:              --> 
    <!-- http://docs.codehaus.org/display/JETTY/jetty.xml                --> 
    <!--                                                                 --> 
    <!-- =============================================================== --> 
     
     
    <Configure id="Server" class="org.mortbay.jetty.Server"> 
     
        <!-- =========================================================== --> 
        <!-- Server Thread Pool                                          --> 
        <!-- =========================================================== --> 
        <Set name="ThreadPool"> 
          <!-- Default bounded blocking threadpool 
          --> 
          <New class="org.mortbay.thread.BoundedThreadPool"> 
            <Set name="minThreads">10</Set> 
            <Set name="maxThreads">250</Set> 
            <Set name="lowThreads">25</Set> 
          </New> 
     
          <!-- Optional Java 5 bounded threadpool with job queue  
          <New class="org.mortbay.thread.concurrent.ThreadPool"> 
            <Set name="corePoolSize">250</Set> 
            <Set name="maximumPoolSize">250</Set> 
          </New> 
          --> 
        </Set> 
     
     
     
        <!-- =========================================================== --> 
        <!-- Set connectors                                              --> 
        <!-- =========================================================== --> 
        <!-- One of each type!                                           --> 
        <!-- =========================================================== --> 
     
        <!-- Use this connector for many frequently idle connections 
             and for threadless continuations. 
        -->     
        <Call name="addConnector"> 
          <Arg> 
              <New class="org.mortbay.jetty.nio.SelectChannelConnector"> 
                <Set name="port"><SystemProperty name="jetty.port" default="8080"/></Set> 
                <Set name="maxIdleTime">30000</Set> 
                <Set name="Acceptors">2</Set> 
                <Set name="statsOn">false</Set> 
                <Set name="confidentialPort">8443</Set> 
            <Set name="lowResourcesConnections">5000</Set> 
            <Set name="lowResourcesMaxIdleTime">5000</Set> 
              </New> 
          </Arg> 
        </Call> 
     
        <!-- Use this connector if NIO is not available. 
        <Call name="addConnector"> 
          <Arg> 
              <New class="org.mortbay.jetty.bio.SocketConnector"> 
                <Set name="port">8081</Set> 
                <Set name="maxIdleTime">50000</Set> 
                <Set name="lowResourceMaxIdleTime">1500</Set> 
              </New> 
          </Arg> 
        </Call> 
        --> 
     
        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
        <!-- To add a HTTPS SSL listener                                     --> 
        <!-- see jetty-ssl.xml to add an ssl connector. use                  --> 
        <!-- java -jar start.jar etc/jetty.xml etc/jetty-ssl.xml             --> 
        <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> 
         
        <!-- =========================================================== --> 
        <!-- Set up global session ID manager                            --> 
        <!-- =========================================================== --> 
        <!-- 
        <Set name="sessionIdManager"> 
          <New class="org.mortbay.jetty.servlet.HashSessionIdManager"> 
            <Set name="workerName">node1</Set> 
          </New> 
        </Set> 
        --> 
     
        <!-- =========================================================== --> 
        <!-- Set handler Collection Structure                            -->  
        <!-- =========================================================== --> 
        <Set name="handler"> 
          <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection"> 
            <Set name="handlers"> 
             <Array type="org.mortbay.jetty.Handler"> 
               <Item> 
                 <New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/> 
               </Item> 
               <Item> 
                 <New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/> 
               </Item> 
               <Item> 
                 <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/> 
               </Item> 
             </Array> 
            </Set> 
          </New> 
        </Set> 
         
    <Set name="handler">    
      <New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">    
        <Set name="handlers">    
          <Array type="org.mortbay.jetty.Handler">    
            <!--Item>    
              <New id="RequestLog" class="org.mortbay.jetty.handler.RequestLogHandler"/>    
            </Item-->    
            <Item>    
              <New class="org.mortbay.jetty.webapp.WebAppContext">    
                <Set name="contextPath">/ebnms</Set>    
                <Set name="resourceBase">E:/Prj2/ForMe/Src/flower/src/main/webapp</Set>    
                <Call name="addServlet">    
                  <Arg>org.mortbay.jetty.servlet.DefaultServlet</Arg>    
                  <Arg>/</Arg>    
                </Call>    
              </New>    
        </Item>    
          </Array>    
        </Set>    
      </New>    
    </Set>    
     
     
        <!-- =========================================================== --> 
        <!-- Configure Authentication Realms                             --> 
        <!-- Realms may be configured for the entire server here, or     --> 
        <!-- they can be configured for a specific web app in a context  --> 
        <!-- configuration (see $(jetty.home)/contexts/test.xml for an   --> 
        <!-- example).                                                   --> 
        <!-- =========================================================== --> 
        <Set name="UserRealms"> 
          <Array type="org.mortbay.jetty.security.UserRealm"> 
            <!-- 
            <Item> 
              <New class="org.mortbay.jetty.security.HashUserRealm"> 
                <Set name="name">Test Realm</Set> 
                <Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set> 
              </New> 
            </Item> 
        --> 
          </Array> 
        </Set> 
     
        <!-- =========================================================== --> 
        <!-- Configure Request Log                                       --> 
        <!-- Request logs  may be configured for the entire server here, --> 
        <!-- or they can be configured for a specific web app in a       --> 
        <!-- contexts configuration (see $(jetty.home)/contexts/test.xml --> 
        <!-- for an example).                                            --> 
        <!-- =========================================================== --> 
        <!--Ref id="RequestLog"> 
          <Set name="requestLog"> 
            <New id="RequestLogImpl" class="org.mortbay.jetty.NCSARequestLog"> 
              <Set name="filename"><SystemProperty name="jetty.logs" default="./logs"/>/yyyy_mm_dd.request.log</Set> 
              <Set name="filenameDateFormat">yyyy_MM_dd</Set> 
              <Set name="retainDays">90</Set> 
              <Set name="append">true</Set> 
              <Set name="extended">true</Set> 
              <Set name="logCookies">false</Set> 
              <Set name="LogTimeZone">GMT</Set> 
            </New> 
          </Set> 
        </Ref--> 
     
        <!-- =========================================================== --> 
        <!-- extra options                                               --> 
        <!-- =========================================================== --> 
        <Set name="stopAtShutdown">true</Set> 
        <Set name="sendServerVersion">true</Set> 
        <!--Set name="sendDateHeader">true</Set--> 
        <!--Set name="gracefulShutdown">1000</Set--> 
    </Configure> 



解决用run-jetty-run锁住css,js文件的问题。
开发中用run-jetty-run插件启动jetty调式tapestry5应用。tapestry5的live class loader用起来非常爽, 不管你改page class还是html模板都不用重启server。 但是有一个例外,那就是jetty起来之后css, js文件会被jetty锁住, 然后用eclipse修改不了。 所以改css js都非常麻烦, 每改一下就要重启下jetty。google之后发现原来:
引用

Jetty buffers static content for webapps such as html files, css files, images etc and uses memory mapped files to do this if the NIO connectors are being used. The problem is that on Windows, memory mapping a file causes the file to be locked, so that the file cannot be updated or replaced. This means that effectively you have to stop Jetty in order to update a file.


怪不得以前在ubuntu下没有这个问题,转到windows下就发现这个问题了。

解决办法就是找到run-jetty-run插件里面的jetty.jar。jetty.jar可以在eclipse中的jetty启动里面的Classpath中找到。 看下图



找到jetty.jar后解压,编辑org/mortbay/jetty/webapp/webdefault.xml这个文件。把useFileMappedBuffer改成false。这里也就是禁用memory mapped file.

Xml代码  收藏代码

    <init-param> 
      <param-name>useFileMappedBuffer</param-name> 
      <param-value>true</param-value> <!-- change to false --> 
    </init-param> 

分享到:
评论

相关推荐

    jetty在eclipse中配置

    本教程将详细介绍如何在Eclipse中配置Jetty,以便于便捷地调试和运行Web应用。 首先,确保你已经安装了Eclipse IDE和Jetty服务器。你可以从Jetty官网下载适合你Java版本的Jetty发布包,并解压到本地文件系统。 1. ...

    Maven+jetty+jrebel+m2eclipse+eclipse搭建struts2开发环境

    "Maven+Jetty+JRebel+m2eclipse+Eclipse搭建Struts2开发环境"这个主题,正是围绕这些关键组件展开,旨在为开发者提供一个高效且便捷的开发流程。 首先,让我们来详细了解一下每个组件的作用: 1. **Maven**:...

    maven+spring MVC+Mybatis+jetty+mysql

    "maven+spring MVC+Mybatis+jetty+mysql" 的组合是常见的开发栈,它涵盖了项目管理、前端控制器、持久层操作、应用服务器以及数据库管理等多个层面。下面将详细介绍这些关键技术及其在实际应用中的作用。 1. Maven...

    Eclipse+ jetty+android+websocket协议整合

    Eclipse+ jetty+android+websocket协议整合 这里介绍了怎么安装jett插件,共享了一个jett服务器demo,简要介绍了如何配置服务器,同时还给了一个android的客户端。对于android客户端发送websocket协议数据:要注意...

    Jetty For Eclipse 插件快速安装.rar

    【Jetty For Eclipse 插件快速安装】 Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,广泛用于开发、测试和部署Web应用程序。Eclipse是Java开发者的常用集成开发环境(IDE)。为了在Eclipse中方便地调试...

    centos7配置jetty+mariadb等操作.txt

    公司服务器使用centos7+jetty+mariadb,多次部署,总结部署的命令给用得着的人参考,大部分都是参考网上其他前辈的教程,自己实际操作可行,特集中到一起,希望能够帮上他人.

    spring mvc3.2.7+servlet3.1(jetty)+maven3+eclipse

    4. 配置Jetty作为运行时服务器,通过Maven插件在Eclipse内启动Jetty,可以直接运行和调试应用。 5. 在Eclipse中进行单元测试和集成测试,确保代码质量。 这样的组合提供了从开发到部署的一站式解决方案,使得开发...

    自己构建微服务(springmvc+内嵌jetty+maven 环境配置)

    标题 "自己构建微服务(springmvc+内嵌jetty+maven 环境配置)" 提供了关于如何在Java环境中创建微服务的信息。这通常涉及使用Spring MVC作为控制器层,内嵌Jetty作为Web服务器,以及Maven作为项目管理工具。下面将...

    IntelliJ+Maven+Jetty+Jrebel

    标题中的“IntelliJ+Maven+Jetty+Jrebel”揭示了本文将讨论一个基于Java Web开发的高效工作流程,其中涉及四个关键组件: 1. **IntelliJ IDEA**:这是一款由JetBrains公司开发的强大的集成开发环境(IDE),特别...

    一键部署demo+jetty+svn+ant配置

    本教程将详细介绍如何通过“一键部署”实现对一个基于Java的项目(DEMO)进行配置,结合Jetty服务器、Subversion(SVN)版本控制系统以及Ant构建工具的整合使用。 首先,让我们了解这些组件的作用: 1. **DEMO**:...

    maven+jetty +ssh 项目例子

    2. **Jetty的配置和启动**:如何配置Jetty插件,通过`mvn jetty:run`命令快速启动Web应用。 3. **Spring Security的集成**:了解SSH的配置,如用户认证、授权规则的设定,以及如何保护特定的Web资源。 4. **Maven...

    websocket+tomcat+jetty+netty

    总结来说,"websocket+tomcat+jetty+netty"这个主题涵盖了WebSocket协议及其在不同服务器框架中的实现。Tomcat、Jetty和Netty都是支持WebSocket的Java服务器平台,各有其优势和适用场景。理解这些技术可以帮助开发者...

    springmvc+mysql+mybatis+jetty+maven+easyui

    标题 "springmvc+mysql+mybatis+jetty+maven+easyui" 描述了一款基于Java的Web应用程序,它利用了一系列流行的开源技术栈来构建。这个项目采用了Spring MVC作为后端MVC框架,MySQL作为数据库存储,MyBatis作为持久层...

    jetty6 eclipse配置

    在Eclipse中配置Jetty可以让开发者在开发过程中实时预览和测试Web应用,无需每次都通过构建和部署流程。以下是详细的配置步骤及相关的知识点: 1. **Eclipse与Jetty集成** - Eclipse是一款流行的Java开发IDE,提供...

    eclipse_jetty9离线插件

    Eclipse Jetty 9离线插件是专为开发者设计的一款工具,旨在简化在Eclipse集成开发环境中配置和运行Jetty服务器的过程。Jetty是一款轻量级、高性能的Java Web服务器和Servlet容器,广泛用于开发、测试和部署Web应用...

    jfinal-jetty+idea例子

    标题“jfinal-jetty+idea例子”揭示了一个基于Java开发的项目实例,它结合了JFinal和Jetty两个关键组件,并在IntelliJ IDEA(简称IDEA)环境中运行。这个项目可能是为了演示如何在IDEA中配置和运行一个使用JFinal...

    jetty+TLS PSK的java代码实例

    【标题】"jetty+TLS PSK的java代码实例"涉及了几个关键的IT知识点,主要集中在Jetty服务器、TLS(Transport Layer Security)协议以及预共享密钥(PSK,Pre-Shared Key)的安全机制上。以下是这些概念的详细解释: ...

Global site tag (gtag.js) - Google Analytics