精华内容
下载资源
问答
  • jetty 源码 2018 zip

    2018-05-04 10:31:47
    jetty 源码 zip github 最近真坑 下载好慢 留点资源 给需要的人 一块学习吧
  • jetty源码剖析

    2018-07-12 16:48:34
    jetty源码剖析,通过此文档可以了解Jetty的实现原理和阅读底层代码。
  • jetty源码查阅

    2014-10-30 23:25:44
    jetty svncheckout出来的,方便大家查阅。
  • Jetty 源码分析

    千次阅读 2017-02-08 18:31:01
     你了解Jetty 吗,就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器。  Jetty具备以下特点:  快速高效  。Jetty是最快的Servlet服务器之一 。Jetty可以处理上千...

    一、 总括

         你了解Jetty 吗,就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器。


         Jetty具备以下特点:

         快速高效

         。Jetty是最快的Servlet服务器之一

         。Jetty可以处理上千个并发连接
         小巧嵌入
         。Jetty的jar只有600多K
         。可动态嵌入到应用程序,适合开发web2.0等应用

         应用广泛

         。开源项目有GeronimoJBossJOnAS

         。商业项目有IBM Tivoli, Sonic MQ and Cisco SESM等

         可到Jetty网站 http://jetty.mortbay.org/jetty/ 查看最新信息

         本文将通过对Jetty最新稳定版 Jetty5.1.5RC2 源码的研究,向读者展示Jetty在设计方面使用的不同设计理念, 希望对广大开发者在设计自己的系统时有所帮助。

         Jetty按照功能可以分为四个主个主要的部分,HttpServer, HttpContext,HttpHandler,HttpListener,详见如下类图:

    <图 1-1>

     

    二、HttpServer及配置

         对于初次接触Jetty的人一定会对上图感到迷惑,其实在Jetty中 HttpServer是一个服务器的核心控制类, 我们可以看到,其它的组件类都是由该类扩展开来,HttpServer的作用就是在一系列的监听器类和处理器类之间搭起了一个桥梁,有效的控制着消息在系统内的传递,如下图:
    <图 1-2 >
         HttpServer职责是接受从HttpListener传递过来的request(请求),HttpServer通过对request的Host(主机)或Path(路径)进行匹配,然后分发给相应的HttpContext(可以理解为一个web application)。
         这里举个例子,假设我们现在要建立一个提供静态页面web服务,页面内容在c:\root \下,可以通过如此配置HttpServer:
         HttpServer server = new HttpServer(); // 创建一个新的HttpServer
         SocketListener listener = new SocketListener(); // 创建一个新监听器
         listener.setPort(8080);// 设置监听端口为8080
         server.addListener(listener);// 将监听类注册到server中
         HttpContext context = new HttpContext(); // 创建一个新HttpContext
         context.setContextPath(“/app/*”); // 设置访问路径
         context.setResourceBase(“c:/root/”); // 设置静态资源路径
         context.addHandler(new ResourceHandler()); // 为这个HttpContext添加一个静态资源处理器
         server.addContext(context); // 将这个HttpContext注册到server中
         server.start();// 最后启动这个server
         当我们要建立一个提供动态页面web服务时, 假设我们自己的 web 应用放在Jetty目录下的webapps下并打好包文件名为myapp.war, 可以通过如此配置HttpServer:
         Server server = new Server(); // 创建一个新的HttpServer
         SocketListener listener = new SocketListener();// 创建一个新监听器
         listener.setPort(8080); // 设置监听端口为8080
         server.addListener(listener ); // 将监听类注册到server中
         server.addWebApplication(“myapp”,”./webapps/myapp/”); // 将这个web应用注册到这个Server中
         server.start(); // 最后启动这个server
         短短数行代码就可创建一个web服务器并启动它,这有点类似于我们windows中的即插即用的概念,需要什么就添加什么,把这些类以HttpServer为核心组合在一起,就可以完成强大的功能。
     

    三、Jetty Server

         1.上面我们探讨了HttpServer的启动,读者一定还存在这样疑问,整个Jetty 服务器是怎样启动的?
         首先我们可以在图 1-1 看到左下角有一个Server类,这个类实际上继承了HttpServer,当启动Jetty服务器时,具体来说,在Jetty根目录下命令行下如输入 JAVA -jar start.jar etc/demo.xml,注意这里有一个配置文件 demo.xml做为运行参数,这个参数也可以是其它的配置文件,也可是多个xml配置文件,其实这个配置文件好比我们使用struts时的struts -config.xml文件,将运行Server需要用到的组件写在里面,比如上一节中HttpServer的配置需要的组件类都可以写在这个配置文件中。
         2.我们自己部署到Jetty的webapps目录下的web application,Jetty如何运行我们自己的web application?
         首先当我们按上述方法启动Jetty Server时,就会调用Server类里面的main方法,这个入口方法首先会构造一个Server类实例(其实也就构造了一个 HttpServer),创建实例过程中就会构造XmlConfiguration类的对象来读取参数配置文件,之后再由这个配置文件产生的 XmlConfiguration对象来配置这个Server,配置过程其实是运用Java的反射机制调用Server的方法并传入配置文件中所写的参数来向这个Server添加HttpListener,HttpContext,HttpHandler,web application(对应我们自己部署的web应用)。
         添加我们自己的web application过程中相应的就会读取我们所熟知的/WEB-INF/web.xml来创建一个WebApplicationContext(这个类继承了HttpContext)的实例,同时也会创建WebApplicationContext自身的ServletHandler(实现了 HttpHandler接口),注意到ServletHandler中包含一组ServletHolder指向实际的Servlet,譬如说我们在 web.xml文件中配置了两个Filter和一个Servlet,这里就会有三个ServletHolder,实际处理请求时 ServeletHandler就会依次调用这三个ServletHolder传入request,response处理(实际最后交给这两个 Filter和Servlet处理),这样我们自己做好的一个 web应用就挂载到这个Server上了,可以接受客户端相应的request(请求)。
     

    四、运行原理(时序图)

    <图 1-7 >

         上图展示了一个request的处理过程,首先HttpListener监听到客户端发来的请求创建一个HttpConnection实例(封装了连接细节,比如从Socket连接中获取的输入流和输出流), HttpConnection对象构建过程中会创建Jetty内部自定义的HttpRequest和HttpResponse对象,接着 HttpListener会调用这个HttpConnection实例的handle方法, HttpConnection实例就调用HttpRequest对象的read()方法读取信息,调用HttpServer的service方法以 HttpRequest,HttpResponse为参数传给HttpServer,HttpServer又将HttpRequest和 HttpResponse分发给相应的HttpCotext,HttpContext最后将HttpRequest和HttpResponse交给自身的 HttpHandler 处理,在这里HttpRequest,HttpResponse被再次封装为ServletHttpRequest和 ServletHttpResponse,其实这两个类实现了我们所熟知的HttpServletRequest和 HttpServletResponse接口。

     

    五、高级组件

         1.HttpHandler:

         该接口的实现类用于处理HttpContext分发过来的reqeust,不同的实现类的有不同的处理功能,这里介绍几常用的HttpHandler实现类:
         ReourceHandler:用于处理静态内容,如以扩展名为.html的文件

         SecurityHandler:提供基本的安全验证

         ForwardHandler:转发一个request到另一个url

         ServletHandler:用于将request交由具体的Servlet类进行处理
         2.当你在看图 1-2 时候会注意到HttpServer和HttpListener,HttpServer与HttpContext,HttpContext与 HttpHandler存在一对多的关系,下面就介绍一下它们之间的这种关系如何通过程序来配置.

         HttpListener & HttpServer:

         HttpListener是所有监听器类的接口,如图中的SocketListener (基于传统的Socket技术)就实现了该接口,Jetty还有其它的实现该接口类,如SocketChannelListener(基于NIO技术)类等,HttpListener职责主要是在服务器启动后监听相应端口的来自客户端请求并建立连接(图 1-1 中所示用HttpConnection封装连接细节),监听器可在同个IP上开启多个端口为同一个HttpServer 进行监听,所以HttpListener和HttpServer是多对一的关系,如下图:

    <图 1-3 >

         配置代码:
         HttpServer server = new HttpServer();
         HttpListenrer listener1 = new SocketChanneListener();
         Listener1.setPort(8080);
         HttpListenrer listener1 = new SocketListener();
         Listener1.setPort(8443);
         server.addListener(listener1);
         server.addListener(listener2);
     

         HttpContext & HttpHandler:

         HttpContext相当于对应客户端请求的URL或某个虚拟机, 其子类中包含若干个HttpHandler, 当接受到request(请求)时,HttpContext会依次(按某个预定的次序)把request交给这些HttpHandler处理,直到这个 request被标示处理过为止, 需要注意的是这个request可能被多个HttpHandler处理,但只能有一个HttpHandler能标示这个request已被处理过.

         一个典型的HttpContext有用于安全处理、静态资源处理及Servlet类的 HttpHandler,如下图:
    <图 1-4>
         配置代码:
         HttpContext context = new HttpContext();
         context.setContextPath(“/myapp/*”);
         HttpHandler securitHandler = new SecurityHandler();
         HttpHandler resourceHandler = new ResourceHandler();
         HttpHandler servletHandler = new ServletHandler();
         context.addHandler(securitHandler);
         context.addHandler(resourceHandler);
         context.addHandler(servletHandler);
     
         HttpServer & HttpContext:
         一般的HTTP服务器软件可以同时处理多个web application,同样一个HttpServer可以包含多个HttpContext,如下图可以通过同一个端口的监听类来映射多个 HttpContext:

    <图 1-5 >

         配置代码:
         HttpServer server = new HttpServer();
         HttpContext context1 = new HttpContext();
         context1.setContextPath(“/app1/*”);
         HttpContext context2 = new HttpContext();
         context2.setContextPath(“/app2/*”);
         server.addContext(context1);
     
         HttpServer & HttpLister & HttpContext:

         另外Jetty对多网卡(多个IP地址,不同的主机名)的服务器也提供了很好的支持,每个 HttpContext都有自身的HttpServer:

    <图 1-6 >

         配置代码:
         HttpServer server1 = new HttpServer();
         SocketListener listener1 = new SocketListener();

         listener1.setHost(“www.app1.com”);//orListener1.setHost(“www.app2.com”)

         listener2.setPort(80);

         HttpContext context1 = new HttpContext();

         context1.setContextPath(“/”);

         server1.addListener(listener1);

         server1.addContext(context1);

     
         3.Jetty对高并发的支持
    <图 1-8>
         如果多用户请求服务就会涉及到多线程的管理,如图 1-8,Jetty中主要由ThreadPool负责管理多线程,注意其中Pool.PondLife是Pool的一个内部接口, ThreadPool.PoolThread是ThreadPool的一个内部线程类,我们看到Pool.PondLife和Pool存在一个聚集的关系,实际上Pool对象中存放在是一个个ThreadPool.PoolThread线程对象,当有新用户连接上Server时,ThreadPool就从Pool中取一个空闲的线程为当前用户连接服务。
     

    六、小结

         本文通过图示简要介绍了Jetty整个体系架构和主要的组件类及服务器的启动执行过程,其实Jetty 通常被用来做为内嵌的Web Server来使用,一些常见的服务器软件,如Apache Cocoon、JBoss ,JOnAs等都会采用Jetty作为Web解決方案;另外由于Jetty在性能及稳定性要优于同类HTTP Server的原因,Jetty已在国外已很流行,鉴于这一点,本文作者可以预测在不久的将来Jetty同样也会在国内流行开来。

    展开全文
  • i-jetty源码

    2012-11-14 22:59:49
    这是i-jetty源码,在google code上也有,需要用maven编译后执行
  • Jetty源码结构及启动过程

    千次阅读 2017-12-02 20:36:19
    源码下载: https://github.com/eclipse/jetty.project/releases 代码模块: 启动方式: start.ini配置文件 这个默认配置决定启动了哪些模块以及启动的顺序。 这些配置文件的顺

    包下载:

    http://download.eclipse.org/jetty/

    包结构:

    源码下载:

    https://github.com/eclipse/jetty.project/releases

    代码模块:

    启动方式:

    start.ini配置文件

    这个默认配置决定启动了哪些模块以及启动的顺序。


    这些配置文件的顺序不能错,比如若是将jetty-deploy.xml置于最下面将导致jetty-webapps无法初始化的错误。简单介绍下几个配置的作用:

    1)jmx.xml

    去掉该注释,容器中的某些类便能在运行时受管理;比如:如果工程需要在不重启的情况下重新读取某配置文件。这因为该功能管理着工程中需要被管理的类,因此置于最上方。

    2)jetty.xml

    该配制文件就对应了server类,管理着connection,thread pool,handler等。

    3)deploy.xml

    该配置文件对应于上篇博客描述的deployService,在jetty中就是deployManager,部署管理器,因此如果这玩意位置错了,下面的webapps.xml自然就报错了。

    4)webapps.xml

    war包的部署器,webappcontext便于基于此生产出来的。

    start.jar启动原理

    1、解析命令行参数:

    截取源码里jetty-start模块中的Main类的main函数调用解析启动命令的方法(命令行方式启动 jetty 的入口)小块:

    public List<String> expandCommandLine(String[] args) throws Exception
        {
            List<String> arguments = new ArrayList<String>();
            // add the command line args and look for start.ini args
            boolean ini = false;
            for (String arg : args)
            {
                if (arg.startsWith("--ini=") || arg.equals("--ini"))
                {
                    ini = true;
                    if (arg.length() > 6)
                    {
                        arguments.addAll(loadStartIni(new File(arg.substring(6))));
                    }
                }
                else if (arg.startsWith("--config="))
                {
                    _startConfig = arg.substring(9);
                }
                else
                {
                    arguments.add(arg);
                }
            }
            // if no non-option inis, add the start.ini and start.d
            if (!ini)
            {
                arguments.addAll(0,parseStartIniFiles());
            }
            return arguments;
        }

    2、定位加载资源并依据配置文件反射调用相应的类

    同样截取jetty-xml里的一块源代码:

    // For all arguments, load properties or parse XMLs
                        XmlConfiguration last = null;
                        Object[] obj = new Object[args.length];
                        for (int i = 0; i < args.length; i++)
                        {
                            if (args[i].toLowerCase(Locale.ENGLISH).endsWith(".properties"))
                            {
                                properties.load(Resource.newResource(args[i]).getInputStream());
                            }
                            else
                            {
                                XmlConfiguration configuration = new XmlConfiguration(Resource.newResource(args[i]).getURL());
                                if (last != null)
                                    configuration.getIdMap().putAll(last.getIdMap());
                                if (properties.size() > 0)
                                {
                                    Map<String, String> props = new HashMap<String, String>();
                                    for (Object key : properties.keySet())
                                    {
                                        props.put(key.toString(),String.valueOf(properties.get(key)));
                                    }
                                    configuration.getProperties().putAll(props);
                                }
                                obj[i] = configuration.configure();
                                last = configuration;
                            }
                        }

    分为两步,先是依据xm描述的内容依次解析xml并处理逻辑,期间会生成很多个实例,如果实例实现了LifeCycle接口再依次调用start方法,因此server就是在此被start起来了。

    例子:

    java -jar start.jar --list-options 命令查找Server,jsp,jmx,resources,websocket,ext,plus,annotations这些对应的模块有:
    here are 31 OPTIONs available to use.
    Each option is listed along with associated available classpath entries,  in the order that they would appear from that mode.
    Note: If using multiple options (eg: 'Server,servlet,webapp,jms,jmx') then overlapping entries will not be repeated in the eventual classpath.
    ${jetty.home} = /Users/weiguang/jetty-distribution-8.1.16.v20140903
    GLOBAL option (Prepended Entries)
    -------------------------------------------------------------
    Empty option, no classpath entries active.
    GLOBAL option (Appended Entries) (*)
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-util-8.1.16.v20140903.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-io-8.1.16.v20140903.jar
    Option [ajp]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-ajp-8.1.16.v20140903.jar
    Option [All] (Aggregate)
    -------------------------------------------------------------
     0:                (dir) | ${jetty.home}/resources
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-xml-8.1.16.v20140903.jar
     2:  3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar
     3:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-http-8.1.16.v20140903.jar
     4:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-continuation-8.1.16.v20140903.jar
     5:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-server-8.1.16.v20140903.jar
     6:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-security-8.1.16.v20140903.jar
     7:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlet-8.1.16.v20140903.jar
     8:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-webapp-8.1.16.v20140903.jar
     9:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-deploy-8.1.16.v20140903.jar
    10:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlets-8.1.16.v20140903.jar
    11:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-rewrite-8.1.16.v20140903.jar
    12:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-jmx-8.1.16.v20140903.jar
    13:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-ajp-8.1.16.v20140903.jar
    14:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-jndi-8.1.16.v20140903.jar
    15:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-plus-8.1.16.v20140903.jar
    16:  1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar
    17:  1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
    18:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-annotations-8.1.16.v20140903.jar
    19:  1.1.0.v201108011116 | ${jetty.home}/lib/annotations/javax.annotation-1.1.0.v201108011116.jar
    20:  3.1.0.v200803061910 | ${jetty.home}/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar
    21:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-policy-8.1.16.v20140903.jar
    22:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-client-8.1.16.v20140903.jar
    23:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-websocket-8.1.16.v20140903.jar
    24:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-overlay-deployer-8.1.16.v20140903.jar
    25:  2.2.0.v201108011116 | ${jetty.home}/lib/jsp/com.sun.el-2.2.0.v201108011116.jar
    26:  2.2.0.v201108011116 | ${jetty.home}/lib/jsp/javax.el-2.2.0.v201108011116.jar
    27:  1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
    28:  2.2.0.v201112011158 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar
    29:  2.2.2.v201112011158 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
    30:  1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
    31: 3.7.0.M20110909-1335 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.7.1.jar
    32:                1.1.1 | ${jetty.home}/lib/jta/javax.transaction-1.1.1.v201105210645.jar
    33:     8.1.16.v20140903 | ${jetty.home}/lib/monitor/jetty-monitor-8.1.16.v20140903.jar
    34:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-core-8.1.16.v20140903.jar
    35:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-jetty-8.1.16.v20140903.jar
    36:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-jetty-http-8.1.16.v20140903.jar
    Option [annotations]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-annotations-8.1.16.v20140903.jar
     1:  1.1.0.v201108011116 | ${jetty.home}/lib/annotations/javax.annotation-1.1.0.v201108011116.jar
     2:  3.1.0.v200803061910 | ${jetty.home}/lib/annotations/org.objectweb.asm-3.1.0.v200803061910.jar
    Option [client]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-client-8.1.16.v20140903.jar
    Option [Client] (Aggregate)
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-client-8.1.16.v20140903.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-http-8.1.16.v20140903.jar
    Option [default]
    -------------------------------------------------------------
     0:                (dir) | ${jetty.home}/resources
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-xml-8.1.16.v20140903.jar
     2:  3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar
     3:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-http-8.1.16.v20140903.jar
     4:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-continuation-8.1.16.v20140903.jar
     5:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-server-8.1.16.v20140903.jar
     6:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-security-8.1.16.v20140903.jar
     7:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlet-8.1.16.v20140903.jar
     8:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-webapp-8.1.16.v20140903.jar
     9:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-deploy-8.1.16.v20140903.jar
    10:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlets-8.1.16.v20140903.jar
    Option [deploy]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-deploy-8.1.16.v20140903.jar
    Option [ext]
    -------------------------------------------------------------
    Empty option, no classpath entries active.
    Option [jmx]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-jmx-8.1.16.v20140903.jar
    Option [jndi]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-jndi-8.1.16.v20140903.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-plus-8.1.16.v20140903.jar
     2:  1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar
     3:  1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
    Option [jsp]
    -------------------------------------------------------------
     0:  2.2.0.v201108011116 | ${jetty.home}/lib/jsp/com.sun.el-2.2.0.v201108011116.jar
     1:  2.2.0.v201108011116 | ${jetty.home}/lib/jsp/javax.el-2.2.0.v201108011116.jar
     2:  1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
     3:  2.2.0.v201112011158 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar
     4:  2.2.2.v201112011158 | ${jetty.home}/lib/jsp/org.apache.jasper.glassfish-2.2.2.v201112011158.jar
     5:  1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar
     6: 3.7.0.M20110909-1335 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.7.1.jar
    Option [jta]
    -------------------------------------------------------------
     0:                1.1.1 | ${jetty.home}/lib/jta/javax.transaction-1.1.1.v201105210645.jar
    Option [monitor]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/monitor/jetty-monitor-8.1.16.v20140903.jar
    Option [overlay]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-overlay-deployer-8.1.16.v20140903.jar
    Option [overlays]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-overlay-deployer-8.1.16.v20140903.jar
    Option [plus]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-jndi-8.1.16.v20140903.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-plus-8.1.16.v20140903.jar
     2:  1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar
     3:  1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
    Option [policy]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-policy-8.1.16.v20140903.jar
    Option [resources]
    -------------------------------------------------------------
     0:                (dir) | ${jetty.home}/resources
    Option [rewrite]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-rewrite-8.1.16.v20140903.jar
    Option [security]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-security-8.1.16.v20140903.jar
    Option [server]
    -------------------------------------------------------------
     0:  3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-http-8.1.16.v20140903.jar
     2:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-continuation-8.1.16.v20140903.jar
     3:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-server-8.1.16.v20140903.jar
    Option [Server] (Aggregate)
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-xml-8.1.16.v20140903.jar
     1:  3.0.0.v201112011016 | ${jetty.home}/lib/servlet-api-3.0.jar
     2:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-http-8.1.16.v20140903.jar
     3:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-continuation-8.1.16.v20140903.jar
     4:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-server-8.1.16.v20140903.jar
     5:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-security-8.1.16.v20140903.jar
     6:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlet-8.1.16.v20140903.jar
     7:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-webapp-8.1.16.v20140903.jar
     8:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-deploy-8.1.16.v20140903.jar
     9:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlets-8.1.16.v20140903.jar
    Option [servlet]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlet-8.1.16.v20140903.jar
    Option [servlets]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-servlets-8.1.16.v20140903.jar
    Option [setuid]
    -------------------------------------------------------------
    Empty option, no classpath entries active.
    Option [spdy]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-core-8.1.16.v20140903.jar
     1:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-jetty-8.1.16.v20140903.jar
     2:     8.1.16.v20140903 | ${jetty.home}/lib/spdy/spdy-jetty-http-8.1.16.v20140903.jar
    Option [webapp]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-webapp-8.1.16.v20140903.jar
    Option [websocket]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-websocket-8.1.16.v20140903.jar
    Option [xml]
    -------------------------------------------------------------
     0:     8.1.16.v20140903 | ${jetty.home}/lib/jetty-xml-8.1.16.v20140903.jar

    这些模块相当于将那些组件加入classpath中,jetty在启动时也会装载这些模块。

    总结:

    不同的OPTION决定了启动不同的模块(也就是不同的组件和classpath)。另外,对于start.config里面的不同的OPTION可能有相同的模块依赖。

    默认的test.war启动了如下模块:

    • Server: 一个标准的servlet容器
    • jsp: jsp模块
    • jmx: jmx支持
    • resources: 允许从${jetty.home}/resources中读取类资源(实际上是配置log4j.properties)
    • websocket: 支持websocket的例子
    • ext: 由于${jetty.home}/lib/ext目录为空,实际上什么都做。其实此特性是为了装载自定义的组件依赖。
    • plus: 一些扩展支持,从上面classpath中猜测,应该是jndi、java认证以及java mail的组件。
    • annotations: java注解以及字节码的支持。

    启动时序图:



    展开全文
  • Jetty源码分析.pdf

    2012-09-21 16:01:56
    Jetty源码分析.pdf
  • Jetty 源码解析

    2019-11-26 17:21:22
    Jetty 源码剖析系列(1) - 总览》 《Jetty 源码剖析系列(2) - web.xml 的解析与执行》 《Jetty 源码剖析系列(3)-Connector如何接收处理网络请求》 《Jetty 源码剖析系列(4)-Connector如何接收处理网络请求》...
    展开全文
  • 工作小几个月了,JDK基础和web应用框架学的的差不多了,开始学习Jetty源码,费了小半天才编译成功,把自己拆过的坑记录下来。 编译前的环境: MAVEN 3.3、Eclips eLuna Service Release 1 (4.4.1) 下载好MAVEN后...

    工作小几个月了,JDK基础和web应用框架学的的差不多了,开始学习Jetty源码,费了小半天才编译成功,把自己拆过的坑记录下来。

    编译前的环境:

    MAVEN 3.3、Eclips eLuna Service Release 1 (4.4.1) 

    下载好MAVEN后,得把Eclipse中的maven配置为下载的MAVEN具体请搜索其他博文参考!

    1. 下载源码
    2. 导入eclipse
    3. 编译源码

     

    1.下载源码

    1.1 Jetty源码可以方便的在Github的Jetty工程主页上下载,链接

    1.2 进入主页后,看了的页面类似如下:

    1.3 点击Jetty工程主页图片的1处可以出现下拉弹出菜单,你可以按branch或者tag选择不同版本的Jetty,本文使用的是Jetty 9.3.x,也就是快照版。

    1.4 点击Jetty工程主页图片的2处,显示下载源码包的方式,如果你没有git客户端或者不想安装,点击下载zip包的连接进行直接下载。

     

     

    2. 导入eclipse

    2.1 下载zip包成功后,进行解压,jetty包的根目录下文件一览如下。在此,为后面叙述方便,称该目录为$myJettySourceRoot。

    该目录(后续称为$myJettySourceRoot)中红框圈中的两个文件值得注意:

    README.md是开发者团队为编译源码的开发者提供的一些提示的内容,但是别当真!完全按他的做是编译不会成功的!!!

    porm.xml是Jetty工程的根porm文件。

    2.2 打开Eclipse,选择File->import->Maven->Exesting Maven Projects。选择$myJettySourceRoot目录,我的是C:\Users\Administrator\Downloads\jetty.project-jetty-9.3.x,如下图,选择所有工程。点击“完成”开始导入,然后Maven会开始

    下载依赖包,工程可能需要持续3个小时。中途出现的选项一律点“确认”和“resolve later”,可能会出现重启Eclipse的选项,也点“确认”。

    3. 编译源码

    3.1导入成功后,Eclipse中目录树如下,找到Jetty-Protject工程鼠标右键,选择run as->Maven clean,进行工程清理。

    3.2 清理完成后,在选择etty-Protject工程鼠标右键,选择run as->run configuration。在Maven Bulid下新建一个build配置。按下图配置:进行install、但跳过test。(因为有一些测试在本机上难以成功)。点击“run”开始编译,中途会出现失败的场景,处理步骤参考3.3,重复几遍后可编译成功

    3.3 编译失败的的处理参考。

    在编译中,经常会出现编译失败,查看控制台信息会发现"Could not resolve dependencies for xxx:jar:test"的类似信息,出现这种情况是jetty-project某个子模块依赖了另一个子模块的test包,出现这种情况,先在Eclipse中找到对应xxx的Maven工程,右键run as ->maven install。比如xxx是jetty-plus,就右键jetty-plus工程,run as ->maven install,先安装这个子模块的所有包,然后再执行3.2,重复几次就可以编译成功。完全编译成功如下图:

    3.4 在$myJettySourceRoot\jetty-distribution\target\distribution目录(我的目录是C:\Users\Administrator\Downloads\jetty.project-jetty-9.3.x\jetty-distribution\target\distribution)下可以查到编译成功后的文件。

    3.5 打开cmd,cd到该目录下,输入java -jar start.jar可以启动Jetty。

    转载于:https://www.cnblogs.com/xieqing/p/6520396.html

    展开全文
  • Jetty源码学习

    2017-09-15 18:00:03
     Jetty Jetty源码学习、经验等 源代码里没有密码,好多开源框架都出自大牛大师之手,是学习的好例子,可惜自己没啥耐心去看,网上搜索到网友牛人解析,记录下来,学习学习。 ...
  • Jetty源码分析

    2016-07-28 16:30:19
    你了解Jetty 吗,就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器。 Jetty具备以下特点: 快速高效 。Jetty是最快的Servlet服务器之一 。Jetty可以处理上...
  • jetty 源码编译

    2017-01-26 18:23:02
    1、git上拉代码:...2、cd到代码目录jetty.project,mvn install,期间会碰到诸如: [ERROR] Failed to execute goal on project cdi-websocket: Could not resolve dependencies
  • Jetty源码分析线程池配置(8.1.15)Jetty8.1.15 源码分析 Jetty 线程模型问题描述代码示例相关依赖Demo示例HelloHandler的源码出现问题解决详细分析Jetty线程模型问题溯源源码追溯acceptor 线程分配源码selectors ...
  • Jetty作为高性能Web服务器,它的架构相比于Tomcat要简单很多,组件抽象更简洁,接下来我们就来看下 二、架构 上图中,绿色部分是Jetty开放给开发者使用的;浅橙色表示JDK或Servlet规范定义的(或开发者实现的)...
  • Jetty源码分析线程池配置(9.4.12) 问题描述 Jetty启动后,如果线程数过少导致请求阻塞,造成大量的close_wait状态的连接 大量close_wait的排查可以参考 https://www.jianshu.com/p/b3d45ce92cbd 示例及原理...
  • jetty源码分析

    2013-12-19 10:07:08
    加载WebXmlConfiguration对象,找到webdefault.xml(在jetty-webapp-9.1.jar包中)和web.xml文件,创建WebAppClassLoader,利用StandardDescriptorProcessor解析WebXmlConfiguration,将配置信息设置到Context。...
  • 深入理解Tomcat和Jetty源码之第一篇前奏知识 这周开始对Tomcat和Jetty的源码和框架产生了浓厚的兴趣,接下来想记录一下学习Tomcat和Jetty源码的心得和体会,有兴趣的朋友可以关注一下,我主要以思维导图的方式来...
  • Jetty源码分析之WebAppContext

    千次阅读 2017-12-24 13:26:27
    WebAppContext即Web Application ContextHandler,表示一个Web..."org.eclipse.jetty.webapp.JettyWebXmlConfiguration" //, //"org.eclipse.jetty.webapp.TagLibConfiguration" } ; 上面的_configurations中...
  • spring boot内置jetty

    2018-12-07 11:28:40
    spring boot内置jetty开发,附带一些基础小功能,比如上传下载文件,走马灯,图片预览等等。
  • 前面分析Jetty整体架构的时候介绍过Jetty的三大组件:Acceptor、Handler和ThreadPool;前两者工作的时候都是需要线程的,而所需的线程正是从ThreadPool中获取的。这篇文件就是来分析ThreadPool的一个具体实现:...
  • jetty源码下载地址

    2013-03-14 11:04:43
    jetty svn http://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk
  • Jetty请求过程源码分析

    千次阅读 2017-12-02 20:39:48
    BIO编程通常为每一个连接分配一个线程,由该线程通过InputStrem、OutputStream以“顺序”方式一路解析、处理、返回结构。这时候,线程数==连接数。 ...jetty:请求流程: 发现一个新的连接 创建E

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,576
精华内容 7,430
关键字:

jetty源码