chukwa学习2——Jetty

来源:互联网 发布:淘宝助手5.0下载 编辑:程序博客网 时间:2024/05/22 02:20

Jetty 


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


一 .  特征简介

      

   易用性是 Jetty 设计的基本原则,易用性主要体现在以下几个方面:

  1. 通过 XML 或者 API 来对 Jetty 进行配置;
  2. 默认配置可以满足大部分的需求;
  3. 将 Jetty 嵌入到应用程序当中只需要非常少的代码;
  4. 使用了 Ajax 的 Web 2.0 的应用程序中,每个连接需要保持更长的时间,这样线程和内存的消耗量会急剧的增加。这就使得我们担心整个程序会因为单个组件陷入瓶颈而影响整个程序的性能。但是有了 Jetty:

    1. 即使在有大量服务请求的情况下,系统的性能也能保持在一个可以接受的状态。
    2. 利用 Continuation 机制来处理大量的用户请求以及时间比较长的连接。另外 Jetty 设计了非常良好的接口,因此在 Jetty 的某种实现无法满足用户的需要时,用户可以非常方便地对 。             
    3. Jetty 的某些实现进行修改,使得 Jetty 适用于特殊的应用程序的需求。Jetty 设计之初就是作为一个优秀的组件来设计的,这也就意味着 Jetty 可以非常容易的嵌入到应用程序当中而不需要程序为了使用 Jetty 做修改。从某种程度上,你也可以把 Jetty 理解为一个嵌入式的Web服务器。 
二 .  简单Jetty介绍
         1.  创建一个server:
               

         

public static void main(String[] args) throws Exception{Server server = new Server(8080);server.start();server.join();}  

     2. 写句柄(Handles)

          对于一个请求生成一个回应,Jetty需要一个句柄去发送到server.一个句柄主要包括:

          检查/修改HTTP请求。

          生成完整的HTTP回应。

          调用其他的句柄(见HandlerWrapper)

          选择一个或者多个句柄去调用(见HandleCollection)

           

public class HelloHandler extends AbstractHandler{    public void handle(String target,Request baseRequest,HttpServletRequest request,HttpServletResponse response)         throws IOException, ServletException    {        response.setContentType("text/html;charset=utf-8");        response.setStatus(HttpServletResponse.SC_OK);        baseRequest.setHandled(true);        response.getWriter().println("<h1>Hello World</h1>");    }}
    3. 配置connector

        为了配置服务器需要调用的HTTP connectors,需要在服务器 上设置一个或者多个connectors.同时可以对每个单独的connector进行对应的配置,包括

接口,端口,缓冲区大小,超时等

       

public class ManyConnectors{    public static void main(String[] args) throws Exception    {        Server server = new Server();         SelectChannelConnector connector0 = new SelectChannelConnector();        connector0.setPort(8080);        connector0.setMaxIdleTime(30000);        connector0.setRequestHeaderSize(8192);         SelectChannelConnector connector1 = new SelectChannelConnector();        connector1.setHost("127.0.0.1");        connector1.setPort(8888);        connector1.setThreadPool(new QueuedThreadPool(20));        connector1.setName("admin");         SslSelectChannelConnector ssl_connector = new SslSelectChannelConnector();        String jetty_home =           System.getProperty("jetty.home","../jetty-distribution/target/distribution");        System.setProperty("jetty.home",jetty_home);        ssl_connector.setPort(8443);        SslContextFactory cf = ssl_connector.getSslContextFactory();        cf.setKeyStore(jetty_home + "/etc/keystore");        cf.setKeyStorePassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");        cf.setKeyManagerPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");         server.setConnectors(new Connector[]{ connector0, connector1, ssl_connector });         server.setHandler(new HelloHandler());         server.start();        server.join();    }}

  4. 配置一个文件服务器

     

public class FileServer{    public static void main(String[] args) throws Exception    {        Server server = new Server();        SelectChannelConnector connector = new SelectChannelConnector();        connector.setPort(8080);        server.addConnector(connector);         ResourceHandler resource_handler = new ResourceHandler();        resource_handler.setDirectoriesListed(true);        resource_handler.setWelcomeFiles(new String[]{ "index.html" });         resource_handler.setResourceBase(".");         HandlerList handlers = new HandlerList();        handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });        server.setHandler(handlers);         server.start();        server.join();    }}

    5. 利用一个XML配置一个File Server.

      

?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure id="FileServer" class="org.eclipse.jetty.server.Server">     <Call name="addConnector">      <Arg>          <New class="org.eclipse.jetty.server.nio.SelectChannelConnector">            <Set name="port">8080</Set>          </New>      </Arg>    </Call>     <Set name="handler">      <New class="org.eclipse.jetty.server.handler.HandlerList">        <Set name="handlers">  <Array type="org.eclipse.jetty.server.Handler">    <Item>      <New class="org.eclipse.jetty.server.handler.ResourceHandler">        <Set name="directoriesListed">true</Set><Set name="welcomeFiles">  <Array type="String"><Item>index.html</Item></Array></Set>        <Set name="resourceBase">.</Set>      </New>    </Item>    <Item>      <New class="org.eclipse.jetty.server.handler.DefaultHandler">      </New>    </Item>  </Array>        </Set>      </New>    </Set></Configure>

   可以利用下面的代码调用上面的XML文件

  

public class FileServerXml{    public static void main(String[] args) throws Exception    {        Resource fileserver_xml = Resource.newSystemResource("fileserver.xml");        XmlConfiguration configuration = new XmlConfiguration(fileserver_xml.getInputStream());        Server server = (Server)configuration.configure();        server.start();        server.join();    }}
先保存。。后面继续


参考  :

 1.  http://www.jettycn.com/

 2.  http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty

 3.  http://savagegarden.iteye.com/blog/1432033