精华内容
参与话题
问答
  • Jetty是什么?Jetty介绍以及配置

    万次阅读 多人点赞 2010-09-08 13:23:00
    Jetty是什么 Jetty项目简介 Jetty是一个开源、基于标准、全功能实现的JAVA服务器。它在Apache2.0协议下发布,因此可以自由的用于商业用途和发行。首创于1995年,Jetty受益于一个广大的用户社区,有一个稳定的核心...

    转载自:http://jiajunde.javaeye.com/blog/373262

    Jetty是什么 Jetty项目简介


    Jetty是一个开源、基于标准、全功能实现的JAVA服务器。它在Apache2.0协议下发布,因此可以自由的用于商业用途和发行。首创于1995年,Jetty受益于一个广大的用户社区,有一个稳定的核心开发者来持续专著的开发。有很多正在运行的使用Jetty的例子,这也不过是千分之十的Jetty实例。 虽然Jetty的目标很低调, 无数的站点和产品使用Jetty,但是Jetty无处不见!
    Jetty可以用来:
    ◆一个传统的web 服务器来处理静态和动态网页;
    ◆最为一个专用HTTP服务器的后台来处理动态网页,就像Apache使用mod_proxy;
    ◆作为一个JAVA应用程序的内嵌组件。
    这种灵活性意味着Jetty可以用在多种场合:
    ◆随产品做外盒使用,例如Tapestry, Liferay;
    ◆随书光盘里,用来运行例子;
    ◆合并到程序里提供HTTP传输,例如JXTA, MX4J;
    ◆集成到JavaEE服务器作为web容器,例如JOnAS, Geronimo, JBoss, JFox;
    ◆作为一个应用程序的组件,例如Continuum, FishEye, Maven。
    Jetty的特点:
    简单
    Jetty的指导原则是“简单不复杂“。Jetty容易理解和使用:
    ◆通过API或者XML文件配置;
    ◆XML文件语法直接了当地在POJOs上影射API操作;
    ◆默认的配置文件可以使Jetty作为外盒(out-of-the-box);
    ◆只需少量的行数就可以嵌入一个Jetty实例。

    可扩展性
    在异步的WEB2.0类型的应用程序使用的技术,例如AJAX,连接停留时间要比处理一个静态页长,线程和内存需求可能急剧增长。
    底层必须优雅地处理这些问题,一个低速的数据库连接可能造成站点瘫痪,因为线程被占满了。使用Jetty...

    ◆在高强度服务压力性能损失少;
    ◆在现有的web规范的框架下,能处理大用户负载,保证长时间会话的连续性;
    ◆整合现有聚类,例如WADI和Terracotta

    高效
    大量的努力用来优化代码,精炼的代码以至于漏洞尽可能少:
    ◆相关性尽可能少;
    ◆核心保持最小,附加函数放在可选包中;
    ◆可扩展性是一个关键问题;
    ◆高强度下性能衰减平缓。

    嵌入性
    Jetty是一个非常好的组件。这意味着很容易嵌入到一个应用程序中,而不需要应用程序去适应它:
    ◆使用依赖注射和反转的控制模式

    插入性
    Jetty被建构的适合
    Jetty内建插入性。所有Jetty核心组件的实现允许不同的选择,至少一个或者更多,组件的实现总是会提供的。如果这些仍然不能满足你的要求,你可以自由的编写底层接口和抽象类最为基础。这意味着Jetty能够容易地用在一个特别的应用环境中。当Jetty在一个 JavaEE服务器中作为web容器时,这是相当有用的,Jetty的插入性保证了它和主机容器的一个紧密的集成。

     

    转载自:http://shenpipi.spaces.live.com/Blog/cns!D36B637A9359DDC2!174.entry

    Jetty是什么?

    最近翻译的一篇文章

    摘要:

    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

    工具箱


    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

    本文包括以下内容:
    1.        嵌入式Servlet容器有什么意义?
    2.        建立一个嵌入式的容器: 使用The Jetty API
    3.        将配置从代码中独立出来: XML驱动的配置文件
    4.        可执行的JAR包
    5.        结论
    6.        资源


    如果让一个人说出一种开源的servlet容器,可能他们会回答Apache Tomcat。但是,Tomcat并不是孤单的,我们还有Jetty。Jetty作为可选的servlet容器只是一个额外的功能,而它真正出名是因为它是作为一个可以嵌入到其他的Java代码中的servlet容器而设计的。这就是说,开发小组将Jetty作为一组Jar文件提供出来,因此你可以在你自己的代码中将servlet容器实例化成一个对象并且可以操纵这个容器对象。

    Jetty在servlet容器中算不上一个新面孔;它从1998年就已经崭露头角。Jetty的发布遵循了Apache 2.0的开源协议,你可以在免费软件和商业软件中使用Jetty而不用支付版税。

    在本文中,笔者将为你为何需要嵌入式servlet容器提出一点见解,解释Jetty API的基础,并且展示如何使用XML配置文件来将Jetty的代码精简到最少。

    本文的示例代码是在Jetty5.1.10以及Sun JDK 1.5.0_03下测试的。

    转载时请务必保留以下作者信息和链接
    作者:Ethan McCallum;shenpipi
    原文:http://www.onjava.com/pub/a/onjava/2006/06/14/what-is-jetty.html
    Matrix:http://www.matrix.org.cn/resource/article/44/44588_Jetty.html
    关键字:Jetty

    嵌入式Servlet容器的意义何在?

    在你采用Jetty之前,理智的做法是首先问问自己:为什么自己的应用程序中需要嵌入一个servlet容器。 吸引我的视线的是Jetty可以为一个已经存在的应用程序提供servlet功能的能力。这种能力对于很多组织都是有用的,包括Java EE应用服务器生产商,软件测试人员以及定制软件生产商。大部分的Java开发人员都可以划分到这三种情况中。

    首先,考虑要建立自己的Java EE应用服务器这样一种边缘情况。根据规范,一个完整的应用服务器必须提供servlet,EJB,以及其他一些功能。你应该采用已经存在而且测试过的组件并且使用Jetty而不是从零开始。Apache Geronimo, JBoss, 和ObjectWeb JOnAS这些项目组在建立自己Java EE应用服务器时也是这样做的。

    当已经存在的容器不能满足需要的时候,软件测试人员会得益于按照需要来生成自己的servlet容器。例如,曾经有个同事想要寻找某种方式来驱动他为web service代码所写的单元测试。对于他的这种情形——几个开发人员加上几个运行在Cruise Control中的自动单元测试——我向他示范了在他的单元测试组(unit test suites)中如何动态的(on the fly)使用Jetty来实例化一个servlet容器。没有多余的脚本,没有剩余的文件,只有代码。

    对于那些开发Java EE应用作为产品的人员来说,为什么仅仅提供一个WAR文件?这样你为会容器的规范而头疼,同时也会增加你的技术支持的成本。相反的,可以提供给客户一个自己具有启动,停止以及管理功能的应用程序。就连硬件生产商也会从中受益:Jetty对于普通的HTTP服务(没有servlet)只需要350k的内存,这使得可以将其用在智能设备中。你可以提供基于web的控制面板并且具有Java web应用的所有功能而不用担心那些独立的容器所带来的压力。

    最后,我敢打赌嵌入式servlet容器最有趣的应用会发生在那些从来不编写传统的基于web应用的人身上。可以将Java EE和HTTP的组合作为一个C/S结构程序的后台。考虑一个事件驱动的服务,例如(假想的)Message-Driven Bank(onjava上的另外一篇文章中提到),从main()方法启动并且等待到来的请求,就像Unix中的daemon程序一样。肯定会有一些人想要将这个程序暴露成一种基于用户的风格,例如一个GUI桌面应用,这只是个时间问题。

    要创建自己的基础组件,协议和socket通讯代码是最令人生厌的,而且会使人从业务逻辑中分心,就更不用说将来可能要调试的事情了。使用嵌入式的Jetty容器来将业务逻辑通过HTTP协议暴露是一个不错的选择,它不用对现有程序作过多改变。选择采用Swing,SWT,XUI这些GUI并且将请求包装成HTTP Post操作,REST,甚至SOAP来完成这个回路。与定制的特定于某个领域的协议相比,这些通用的协议可能性能稍差,但是,用不了多久,你就会从这些已经存在的经过实际检验的协议中得到好处并且节省大量的努力。

    建立一个嵌入式的容器:使用Jetty API

    希望以上的想法能够刺激你的胃口让你尝试一下嵌入式的servlet容器。示例程序Step1Driver 演示了一个基于Jetty的简单服务。它创建了一个servlet容器的实例,将一个servlet class映射到一个URI,并且使用一些URL来调用这个servlet。为了代码的简洁,我牺牲了一些代码的质量。

    Service对象就是Jetty容器,实例化出这样一个对象就产生了一个容器。

    Server service = new Server() ;



    这样一来,Service对象就像一个没有门的宾馆:没有人能够进入并且使用,所以还是没有用的。接下来的一行代码设置容器在localhost,端口7501监听。

    service.addListener( "localhost:7501" ) ;



    为了在所有的interface上监听,不使用主机名("addListener( ":7501" )")。就像名字暗示的那样,你可以调用addListener()多次来在多个interface上监听。

    注意到示例代码中维护了Server对象的一个引用,这是将来要停止容器需要用到的。
    将一个web应用映射到Service是很直观的:

    service.addWebApplication(
       "/someContextPath" ,
       "/path/to/some.war"
    ) ;



    这个调用将处理一个web应用中的web.xml部署描述符(descriptor)来映射其中的过滤器servlet和servlet,就像其他容器所做的那样。第一个参数是context path,这个web应用的所有servlet和JSP都会被映射成相对于这个路径的URI。第二个参数是web应用本身。可以是一个打包的WAR文件或者目录格式的web应用。再次调用addWebApplication()可以用来添加其他的web应用。

    注意到Jetty并不需要一个完整的符合规范的WAR文件来部署servlet。如果编写了一个搭载于HTTP协议的定制应用程序协议,你可以加载一个单一的servlet并且将其通过网络提供出去。并没有必要使用WAR文件仅仅为了使一个非web应用具有通过HTTP协议访问的功能。

    为了映射这种一次性的servlet,通过在Service对象上调用getContext()动态的建立一个context。这个示例代码建立了一个叫做/embed的context。

    ServletHttpContext ctx = (ServletHttpContext)
       service.getContext( "/embed" ) ;



    如果context不存在地话,调用getContext()将会创建一个新的context
    接下来,调用addServlet()将一个servlet类映射到一个URI

    ctx.addServlet(
       "Simple" , // servlet name
       "/TryThis/*" , // URI mapping pattern
       "sample.SimpleServlet" // class name
    ) ;



    第一个参数是该servlet的一个描述性的名字。第二个参数是要映射的路径,等同于web.xml servlet映射中的<url-pattern>。这个映射路径是相对于context path的,这里是/embed。”/*”表示这个servlet接收/embed/TryThis这样一个URI,同时它也会接收所有以此开头的URI,例如/embed/TryThis/123。在使用一个单一的servlet来作为一个大系统的入口的时候,这种映射方式非常有用。Struts和Axis就是实际应用中使用这样的映射方式的例子。

    有时候你可能想让你的context成为root context,或者说“/”,这样更像一个普通的HTTP服务。Jetty通过Service.setRootWebapp()来支持此功能。
    service.setRootWebapp(
       "/path/to/another.war"
    ) ;



    唯一的一个参数是一个web应用的路径。
    容器在此时还是不活动的。而且它也没有试图去绑定要监听的socket,启动容器需要调用:

    service.start() ;



    这个方法会立即返回,因为Jetty将服务在一个独立的线程中运行。因此,当容器运行的时候,main()可以来做其他任何事情。
    其余的代码是使用一组URL来调用这个嵌入式容器。这些调用确保容器已经在运行并且servlet按照期望的方式工作。
    关闭容器就像启动它一样直观

    service.stop() ;



    注意最外层try/catch块中的catch语句。

    {
    
       service.start() ;
       // ... URL calls to mapped servlet ...
       service.stop() ;
    
    }catch( Throwable t ){
    
       System.exit( 1 ) ;
    
    }



    显示的调用System.exit()确保容器在发生异常的时候被关闭。否则,容器会持续运行因此整个应用程序也不会退出。
    必须记住Jetty web应用并不限于使用代码来访问。如果我将service.stop()从刚才的代码中去掉,那么容器将一直运行并且我可以在浏览器中调用servlet,例如
    http://localhost:7501/embed/TryThis/SomeExtraInfo

    你并不一定要完全按照我说的去做。这个示例代码可以作为一个Eclipse项目运行。而且你也可以写一段shell脚本使其运行在Unix/Linux命令行中。在上面两种情况下,确信Jetty在你的classpath中。

    将配置从代码中独立出来: XML驱动的配置文件

    尽管Jetty的API非常直观简练,但是直接的调用Jetty API会将大量的配置信息——端口号,context path,servlet类名——埋藏在代码之中。Jetty提供了一种基于XML的配置方式来替代直接调用API,这样你就可以将这些配置信息都放在代码外面而使你的代码保持清洁。

    Jetty的XML配置文件是基于Java反射的。java.lang.reflect中的类代表了Java中的方法和类,这样你可以实例化一个对象并且使用方法的名字和参数类型来调用它的方法。这种情况下,Jetty的XML配置文件解析器会将XML的element和属性翻译成反射方法调用。

    这段节选自Step2Driver示例类中的代码是Step1Driver的一个改良版本。要是使用到了配置文件,就必须有一定的Jetty代码来加载它。

    URL serviceConfig = /* load XML file */ ;
       // can use an InputStream or URL
    
    XmlConfiguration serverFactory =
       new XmlConfiguration( serviceConfig ) ;
    
                            
    Server service =
       (Server) serverFactory.newInstance() ;



    不可否认,这不比Step1Driver示例节省多少代码,但是,即使你要添加新的servlet或者web应用,Step2Driver的代码不会因此而增加。而直接调用Service和context对象的方法在配置逐渐增加的情况下会越来越差。
    列表1是Step2Driver加载的XML文件。顶层的<Configure> element 的属性指明了要实例化那个类。这里是Jetty Server对象。

    <!-- 1 -->
    <Configure class="org.mortbay.jetty.Server">
    
      <!-- 2 -->
      <Call name="addListener">
        <Arg>
          <!-- 3 -->
          <New
             class="org.mortbay.http.SocketListener">
    
            <!-- 4 -->
            <Set name="Host">
    
              <!-- 5 -->
              <SystemProperty
                 name="service.listen.host"
                 default="localhost"
              />
    
            </Set>
    
            <Set name="Port">
              <SystemProperty
                 name="service.listen.port"
                 default="7501"
              />
            </Set>
    
          </New>
        </Arg>
      </Call>
    
    
      <Call name="getContext">
    
        <Arg>/embed</Arg>
    
    
        <!--
        call methods on the return value of
        Server.getContext()
        -->
    
        <!-- 6 -->
        <Call name="addServlet">
    
          <!-- servlet name -->
          <Arg>"Simple"</Arg>
    
          <!-- URL pattern -->
          <Arg>/TryThis/*</Arg>
    
          <!-- servlet class -->
          <Arg>sample.SimpleServlet</Arg>
    
        </Call>
    
      </Call>
    
    </Configure>



    <Call> element代表要在Server对象上调用的方法。这里要调用addListener(),如标记(2)处,它自己又有一个子element叫做<Arg>,这指明了方法的参数。这里我只能传递一个字符串值作为监听的地址,而addListener()却需要接受一个SocketListener对象作为参数。因此,我要使用<New>在标记(3)处实例化一个新的SocketListener对象。标记2和3处的代码等同于以下代码:

    server.addListener(
       new SocketListener( ... )
    ) ;



    为了配置SocketListener自己,必须使用一个<Call>来调用它的setHost()方法,既然这个方法遵循了JavaBean的命名规则,示例代码因此使用了<Set> element(4)作为一种快捷方式。在后台,Jetty给set中name属性所指定的属性赋值,并且决定调用什么方法,这里是setHost()

    setHost()的参数这里没有显示给出,而是使用了<SystemProperty>来从系统属性中来获取参数的值,这里从系统参数service.listen.host 和 service.listen.port。如果系统属性没有定义,你可以使用default来指定一个默认值。这里,4和5等同于以下调用:

       socketListener.setHost(
          System.getProperty(
             "service.listen.host" ,
             "localhost"
          )
      ) ;



    最后注意标记6处的<Call> element位于调用getContext方法的<Call>中。内部的<Call>是作用在外部的<Call>的返回的对象上的,这里,调用的是getServlet()返回的context上的addServlet()方法:

    server.getContext().addServlet( ... ) ;



    Jetty 小组的英明在于这个XML配置文件的进一步深入处理:我们可以注意到列表1中所有的Jetty特定的调用都是element和属性的值,而不是名字,这就意味着XML配置文件可以被用在任何类上,而不仅仅是Jetty的类中。根据你的应用程序的编写方式,你可以全部使用Jetty的XML配置文件来配置。

    可执行JAR包

    如果你使用Jetty的XML来配置你的应用,你需要使用大量的重复的代码来加载你的config文件并且运行你的应用。不过你可以使用Jetty的可执行的start.jar来为你加载文件,这会让你节省更多的代码。

    例如,你可以使用以下的命令行来加载Step2Driver中的Jetty服务。

    CLASSPATH= ...various Jetty JARs...
    java /
       -Djetty.class.path=${CLASSPATH} /
       -jar <jetty install path>/start.jar /
       standalone.xml



    注意到这个命令仅仅加载xml文件来建立容器和监听器,因此,它并不会调用示例代码中用来测试URL的代码。

    结论
    一个嵌入式的Jetty servlet容器可以让你的web使用Java应用而不用打包成正式的web应用的形式。这提供了多种可能性,让Jetty成为你的工具箱中的一个多才多艺的帮手。
    当然,我这里所写的东西并不能包含Jetty的所有内容。我建议你去访问Jetty的网站来获取更多的文档和示例代码。

    资源
    ---本文的示例代码.
    --The Jetty网站 上有文档,示例以及下载的链接。同时,它还包含了一个使用Jetty的项目的列表页。同样值得注意的是JettyPlus子项目,它提供了JNDI,数据源和其他servlet规范中的功能(特性)。
    --Sun's Java EE 网站, 其中包含了servlet规范的链接
    --Java Reflection in Action 详细讨论了Java的反射和自省API。
    --为了比较, OnJava同样发布一篇文章关于 Tomcat's embedded side.
    --本文中提到使用 Swing, XUI, and SWT 作为基于Java的GUI前端(frontend)应用程序
    --Message-Driven Bank 来自于另一篇文章, "J2EE Without the Application Server."
    Ethan McCallum 致力于 Unix/Linux, C++, 以及 Java的研究.

    展开全文
  • Jetty篇一之初识Jetty

    万次阅读 多人点赞 2018-06-14 23:12:28
    在学习Jetty之前,一定要了解一些Jetty的基本概念以及优缺点,这样才方便做更深入的学习,现在让我来慢慢揭开它的神秘面纱吧! 基础: 什么是Jetty? 简单来讲Jetty就是一个开源的HTTP服务器和Servlet引擎,它...

    前言:        

            最近公司项目中用到了Jetty来作为项目的web容器,借此机会来分享一下我的学习心得。在学习Jetty之前,一定要了解一些Jetty的基本概念以及优缺点,这样才方便做更深入的学习,现在让我来慢慢揭开它的神秘面纱吧!

    基础:

        什么是Jetty?

            简单来讲Jetty就是一个开源的HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境,比如Java Web应用最常用的Servlet容器Tomcat,由于其轻量、灵活的特性,Jetty也被应用于一些知名产品中,例如ActiveMQ、Maven、Spark、GoogleAppEngine、Eclipse、Hadoop等。

        为什么使用Jetty?

            ①异步的 Servlet,支持更高的并发量  

            ②模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率

            ③在面对大量长连接的业务场景下,Jetty 默认采用的 NIO 模型是更好的选择

            ④将jetty嵌入到应用中,使一个普通应用可以快速支持 http 服务

     

        Jetty的基本架构:                                                                                              

              

            Jetty 的架构比较简单,核心组件主要是由 Server 和 Handler 组成。其中 Server 的 Handler 是其比较重要的一个数据模型,Jetty 中所有的组件都是基于  Handler 来实现的。

     

     

     

     

     

    Tomcat的基本架构:

            

            Server是Tomcat的最顶层元素,是service的集合,即可包含多个service,Server控制整个Tomcat的生命周期。Service由一个Container和多个Connector组成(或者说由Connector,Engine和线程池[可选]组成),形成一个独立完整的处理单元,对外提供服务。

     

     

     

     

    Jetty与Tomcat的对比:

            ①Jetty 比较容易贴合第三方框架,比如你可以直接用 Spring 配置一个 Jetty 服务器

            ②直接可以将 Jetty 作为提供 HTTP 服务的组件,嵌入到应用中

            ③Jetty 是面向 Handler 的架构,而 Tomcat 是面向容器的架构

            ④Jetty 默认采用 NIO 技术,而 Tomcat 默认是 BIO

            ⑤Jetty 高度模块化,可以很灵活的管理拓展组件,而 Tomcat 对其他组件的管理则相对困难

     

    展开全文
  • Jetty的使用教程

    万次阅读 2019-02-25 15:25:33
    Jetty比较简单,和Tomcat大致相同,本文主要描述jetty9以上版本的使用,jetty9版本对jetty的目录结构和使用都有了一些明显的改动。 Jetty较于Tomcat属于轻量级,而且在处理高并发细粒度请求的场景下显得更快速高效...

    1、jetty介绍

    Jetty比较简单,和Tomcat大致相同,本文主要描述jetty9以上版本的使用,jetty9版本对jetty的目录结构和使用都有了一些明显的改动。

    Jetty较于Tomcat属于轻量级,而且在处理高并发细粒度请求的场景下显得更快速高效。所以使其也拥有众多使用场景,合适的选择应该为:云平台本身的门户网站放在Tomcat内,而云台托管的Java Web应该是部署在Jetty内的。

    2、jetty目录结构

    bin目录是存放在Unix系统下运行的shell脚本的;

    etc存放的都是jetty的配置文件;

    modules是存放着各个模块的,以.mod结尾,点进去可以看到有众多模块,不过大多数是没有激活的,像logs,webapps这种模块就是默认激活的。

    webapps和Tomcat一样,用于存放项目的;

    可以看到截图中是有个work目录的,正常情况下,解压jetty是没有这个目录的,因为当在webapps中存放项目时,通过在根目录下面运行java -jar start.jar命令,启动jetty,由于jetty本身所在的目录和运行的项目的路径是分开的,这方便于丹jetty升级的时候,并不影响运行的项目,所以例如在webapps下放置一个war包,运行jetty,该war包解压出来的项目是存在于系统的temp的目录下面的,在jetty的目录中并不能找到,不过当创建一个work文件夹的时候,解压出来的项目就会默认的存放在work文件夹内了。

    3、jetty操作及注意事项

         Jetty默认的端口为8080,修改端口号也很简单,首先进入到jetty服务器安装目录下会看到start.ini配置文件,这里就是jetty启动时加载的配置,其中包括要加载的模块,超时时间配置还有这里的端口号等。例如:jetty.http.port=8888。

           当部署项目的时候,出来将项目copy到webapps下面之外,还需要创建一个对应的xml的文件,如下图:

    里面的配置文件编写为:

    这是最基础的配置,同tomcat的server.xml类似,不过jetty可以配置更多。

    默认情况下,jetty会对根目录(也可以配置jetty.base)下webapps/目录下的内容实现自动部署,部署的规则如下:

    隐藏文件(.开头)和.d结尾的目录被忽略;
    CVS目录如”CVS”和”CVSROOT”被忽略;
    任何war包都会被自动部署;
    任何xml描述文件被认为是可部署的;
    任何目录都被认为是可部署的;
    同名的war包和目录同时存在,目录不被部署,仅war包部署,且认为war包引用该目录;
    同名的war包和xml文件同时存在,war包不被部署,仅xml文件描述符被部署,且认为该xml文件引用该war包;
    同名的目录和xml文件同时存在,目录不被部署,xml文件被部署,且认为xml文件引用该目录;
    关于更详细的说明,请参考官方文档的这里。我主要提醒的是:在webapps目录中,如果存在同名的目录、war包和xml文件,它们会被当做同一个工程,部署的优先级是xml文件>war包>目录。一定要注意同名,如果不同名,在webapps下存在一个war包,同时存在一个引用该war包的xml文件,则会导致重复部署,这就是我跳的坑。

    部署时,推荐的做法是,将xml描述文件放到自动部署的webapps目录下,里面定义war包的路径、上下文路径、是否解压、临时目录、日志文件等,然后将war包放在自定义的固定目录下,项目更新,只需要备份和替换war包,重启jetty即可。

    展开全文
  • Jetty的使用和基本介绍

    千次阅读 2019-06-26 12:30:40
    Jetty jetty是什么? jetty是一个开源的Servlet容器,它为基于Java的web容器,例如JSP和Servlet提供容器。Jetty是使用Java语言编写的,它的API以jar包的形式发布。可以将Jetty实例化成一个对象,它可以迅速为一些...

    Jetty

    jetty是什么?
    jetty是一个开源的Servlet容器,它为基于Java的web容器,例如JSP和Servlet提供容器。Jetty是使用Java语言编写的,它的API以jar包的形式发布。可以将Jetty实例化成一个对象,它可以迅速为一些独立运行的Java应用提供网络和web连接。

    Jetty和tomcat进行比较

    • Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
    • Tomcat默认采用BIO处理I/O请求,Jetty默认采用NIO处理I/O请求,所以在处理静态资源更有优势。
    • Tomcat适用于企业级应用,如企业的门户网站;Jetty适用于部署非企业级应用,如对外提供天气查询的API。
    • Tomcat使用与处理比较频繁的短链接,Jetty适合处理如聊天之类的长链接。

    Jetty的基本实现

    public class JettySample{
    public static void main(String[]args)throws Exception{
    //创建JettyHttpServer对象 
    HttpServer server=new HttpServer();
    //在端口8080上给HttpServer对象绑上一个listener,使之能够接收HTTP请求
    SocketListener listener=new SocketListener();
    listener.setPort(8080);
    server.addListener(listener);
    //创建一个HttpContext,处理HTTP请求。
    HttpContext context=new HttpContext();
    //用setContextPath把Context映射到(/web)URL上。
    context.setContextPath("/web");
    //setResourceBase方法设置文档目录以提供资源
    context.setResourceBase("C:\\j2sdk1.4.1_05");
    //添加资源处理器到HttpContext,使之能够提供文件系统中的文件
    context.addHandler(new ResourceHandler());
    server.addContext(context);
    //启动服务器
    server.start();
    }
    }
    

    new Server()

    1. 初始化线程池:QueuedThreadPool
    2. 初始化ServerConnector
    3. 设置port
    4. 关联Server和Connector

    Server.start()

    1. 设置启动状态
    2. 启动过程doStart()
    3. 启动完毕

    Http请求

    1. Accept成功:这里会匹配处理器,并提交任务到ConcurrentArrayQueue
    2. 处理请求

    在这里插入图片描述

    展开全文
  • jetty与tomcat区别

    万次阅读 2016-09-20 18:02:30
    1.tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范 不同点 1.架构比较 jetty相比tomcat更为简单 jetty架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展...
  • Jetty

    2019-06-05 10:24:07
    Eclipse Jettyis aJavaHTTP (Web) serverandJava Servletcontainer. While Web Servers are usually associated with serving documents to people, Jetty is now often used formachine to machinecommunic...
  • 一、Jetty简介

    千次阅读 2018-06-21 17:41:51
    https://www.cnblogs.com/yiwangzhibujian/p/5832597.htmlJetty使用教程(一)——开始使用Jetty一、Jetty简介... 这个入门教程分为五个部分:第一部分部分重点介绍如何使用Jetty,它提供如下信息,如什么是Jetty...
  • jetty各个版本下载

    2013-05-13 17:05:58
    jetty各个版本下载
  • Jetty简单入门

    千次阅读 2017-12-29 16:52:00
    Jetty 可以理解为一个嵌入式的Web服务器,由纯Java语言实现 Jetty 优点 1.启动速度快 2.轻量级 Jetty对于普通的HTTP服务(没有servlet)只需要350k的内 存,这使得可以将其用在智能设备中。 3.易嵌入性 它...
  • Jetty

    2017-07-30 20:00:34
    一、Jetty简介 1.1 什么是Jetty  Jetty是一个提供HHTP服务器、HTTP客户端和javax.servlet容器的开源项目。    这个入门教程分为五个部分: 第一部分部分重点介绍如何使用Jetty,它提供如下信息,如什么是Jetty...
  • Jetty

    2015-03-22 22:31:42
    在学习OpenJMS和ActiveMQ的时,发现这两个开源项目都默认使用了Jetty作为容器。我这才发现jetty现在应用的市场这么广。以前也曾用过jetty,不过都是搭建好的环境,只是把它看着和Tomcat、Resin等一样,作为开发时的...
  • Jetty

    千次阅读 2011-10-25 17:39:58
    在学习OpenJMS和ActiveMQ的时,发现这两个开源项目都默认使用了Jetty作为容器。我这才发现jetty现在应用的市场这么广。以前也曾用过jetty,不过都是搭建好的环境,只是把它看着和Tomcat、Resin等一样,作为开发时的...
  • Jetty配置

    千次阅读 2016-07-04 19:05:57
    前言现在越来越多的公司用Jetty而不用Tomcat了,原因是 1.Jetty更加轻量级 2.Jetty更加灵活,可扩展性更高 总结:Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。 Jetty安装1.去Jetty官网...
  • jetty

    千次阅读 2015-06-22 20:44:43
    java容器很很多,tomcat、jetty、jboss、resin、weblogic、webspere等等。 有收费的,也有开源免费的,性能可能是有些许差异的,理论上,收费的应该比免费的,性能要要一些。 但是,用开源免费的来做巨大访问量的...
  • jetty

    2019-06-21 08:59:04
  • Jetty:部署到Jetty

    万次阅读 2014-06-06 13:38:02
    标准Jetty发布版本能部署标准servlet Spec Web应用和Jetty内部ContextHandler部署描述符,或者两者的一个混合。 Web应用是可部署的动态(servlets、filters、jsps、等等)和静态内容、支持库、和绑定到特定上下文...
  • jetty

    2009-04-03 09:59:00
    Jetty 这个项目成立于 1995 年,现在已经有非常多的成功产品基于 Jetty,比如 ApacheGeromino, JBoss, IBM Tivoli, Cisco SESM 等。Jetty 可以用来作为一个传统的 Web服务器,也可以作为一个动态
  • jetty学习笔记

    千次阅读 2018-07-14 22:32:57
    2018.6.9 jetty学习笔记(一)什么是jetty?简单来讲jetty就是一个开源HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境。比如Java web应用最常用的Servlet容器和Tomcat。由于其轻量、灵活的特性,...
  • Jetty

    2016-07-31 21:45:46
    Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 命令 作用 命令   启动jetty ...
  • Jetty

    万次阅读 2017-12-16 22:37:16
    本文介绍一个使用Jetty开发的Web的小例子。 Jetty是一个开源的servlet容器,它为基于Java的web容器(例如JSP和servlet)提供运行环境。可以把它理解为和Tomcat一样,不过Jetty更小更轻量级。如果想更深入学习Jetty...

空空如也

1 2 3 4 5 ... 20
收藏数 81,143
精华内容 32,457
关键字:

jetty