文章目录
  1. 1. Jetty POJO 配置
  2. 2. Jetty Start配置文件
  3. 3. 其它配置文件
  4. 4. Jetty IoC XML 配置格式

Jetty POJO 配置

Jetty的核心组件简单的就像一个POJO一样,Jetty的配置过程大部分是实例化的过程,在POJO之上的装配和设置域操作,你可以通过下面的方式实现:

  1. 直接写代码实例化和装配Jetty对象,如:Embedding Jetty
  2. 使用Jetty xml配置,这是一个IOC框架,实例化和装配Jetty对象作为XML对象,etc/jetty.xm 是主要的Jetty配置文件。但是也有其它配置jetty特定配置文件在发布版本里。
  3. 用第三方的IOC框架,如Spring,实例化和装配Jetty对象作为一个Spring Bean。

因为主要的Jetty配置文件都是IOC来去完成的,可以去参考Jetty API文档

Jetty Start配置文件

Jetty使用下面的配置文件去实例化、注入和启动服务器通过执行start.jar

ini文件

Jetty使用命令行的启动方式,start.ini 和start.d/*.ini下的文件可以创建一有效的命令行参数,参数可能是:

  • Xml文件使用jetty IOC的文件格式
  • 模块激活使用 —module=name配置
  • 属性配置方式 name=value,参数化使用jetty IOC xml
  • 一个标准的Java属性文件包含额外的 start文件属性
  • 其它start.jar选项(参见:java -jar start.jar —help )
  • JVM 选项

mod文件
modules/*.mod文件包含模块定义,激活方式 —module=name 名称是每个模块文件的定义

  • 模块依赖按照顺序激活
  • 所需的库模块添加到类路径中
  • 该模块所需要的XML文件添加到有效的命令行
  • 文件所需的激活模块
  • 模板ini文件 —add-to-start =name 激活时使用的名字

XML文件
Jetty或spring IoC格式的XML文件或在命令行上列出,ini文件或添加到模块定义有效的命令行。XML文件实例化和注入实际的Java对象,包括服务器、连接器和上下文。因为码头奥委会XML文件经常使用属性,许多常见配置任务可以没有编辑这些XML文件来完成。如果需要XML配置更改,应该从jetty复制XML文件 jetty.home/etc 到 jetty.base/etc 在修改之前

其它配置文件

Jetty IoC XML 配置格式

public class ExampleServer {

public static void main(String[] args) throws Exception {
    Server server = new Server();
    ServerConnector connector = new ServerConnector(server);
    connector.setPort(8080);
    server.setConnectors(new Connector[]{connector});
    ServletContextHandler context = new ServletContextHandler();
    context.setContextPath("/");
    context.addServlet(HelloServlet.class, "/hello");
    context.addServlet(AsyncEchoServlet.class, "/echo/*");
    HandlerCollection handlers = new HandlerCollection();
    handlers.setHandlers(new Handler[]{context, new DefaultHandler()});
    server.setHandler(handlers);
    server.start();
    server.join();
}
}

HelloServlet

/**
 * <p/>
 * User : krisibm@163.com
 * Date: 2015/6/17
 * Time: 18:00
 */
public class HelloServlet extends HttpServlet {
final String greeting;

public HelloServlet() {
    this("Hello");
}

public HelloServlet(String greeting) {
    this.greeting = greeting;
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html");
    response.setStatus(HttpServletResponse.SC_OK);
    response.getWriter().println("<h1>" + greeting + " from HelloServlet</h1>");
}
}

AsyncEchoServlet

public class AsyncEchoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    AsyncContext asyncContext = request.startAsync(request, response);
    asyncContext.setTimeout(0);
    Echoer echoer = new Echoer(asyncContext);
    request.getInputStream().setReadListener(echoer);
    response.getOutputStream().setWriteListener(echoer);
}

private class Echoer implements ReadListener, WriteListener {
    private final byte[] buffer = new byte[4096];
    private final AsyncContext asyncContext;
    private final ServletInputStream input;
    private final ServletOutputStream output;
    private final AtomicBoolean complete = new AtomicBoolean(false);

    private Echoer(AsyncContext asyncContext) throws IOException {
        this.asyncContext = asyncContext;
        this.input = asyncContext.getRequest().getInputStream();
        this.output = asyncContext.getResponse().getOutputStream();
    }

    @Override
    public void onDataAvailable() throws IOException {
        onWritePossible();
    }

    @Override
    public void onAllDataRead() throws IOException {
        onWritePossible();
    }

    @Override
    public void onWritePossible() throws IOException {
        // This method is called:
        //   1) after first registering a WriteListener (ready for first write)
        //   2) after first registering a ReadListener iff write is ready
        //   3) when a previous write completes after an output.isReady() returns false
        //   4) from an input callback

        // We should try to read, only if we are able to write!
        while (output.isReady() && input.isReady()) {
            int read = input.read(buffer);
            if (read < 0) {
                if (complete.compareAndSet(false, true))
                    asyncContext.complete();
                break;
            } else if (read > 0) {
                output.write(buffer, 0, read);
            }
        }
    }

    @Override
    public void onError(Throwable failure) {
        failure.printStackTrace();
        asyncContext.complete();
    }
}
}

pom

<dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-server</artifactId>
        <version>9.0.4.v20130625</version>
        <exclusions>
            <exclusion>
                <groupId>org.eclipse.jetty.orbit</groupId>
                <artifactId>javax.servlet</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-servlet</artifactId>
        <version>9.0.4.v20130625</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
文章目录
  1. 1. Jetty POJO 配置
  2. 2. Jetty Start配置文件
  3. 3. 其它配置文件
  4. 4. Jetty IoC XML 配置格式