Criando e configurando o servidor Jetty 9 em Java

Criando e configurando o servidor Jetty 9 em Java

1. Visão geral

Neste artigo, vamos falar sobre como criar e configurar uma instância Jetty programaticamente.

Jetty é um servidor HTTP e um contêiner de servlet projetado para ser leve e facilmente incorporável. Vamos dar uma olhada em como instalar e configurar uma ou mais instâncias do servidor.

2. Dependências do Maven

Para começar, queremosadd Jetty 9 with the following Maven dependencies em nossopom.xml:


    org.eclipse.jetty
    jetty-server
    9.4.8.v20171121


    org.eclipse.jetty
    jetty-webapp
    9.4.8.v20171121

3. Criação de um servidor básico

Girar um servidor incorporado com o Jetty é tão fácil quanto escrever:

Server server = new Server();
server.start();

Desligá-lo é igualmente simples:

server.stop();

4. Manipuladores

Agora que nosso servidor está em funcionamento, precisamos instruí-lo sobre o que fazer com as solicitações recebidas. Isso pode ser executado usando a interfaceHandler.

Nós mesmos poderíamos criar um, mas o Jetty já fornece um conjunto de implementações para os casos de uso mais comuns. Vamos dar uma olhada em dois deles.

4.1. WebAppContext

A classeWebAppContext permite delegar o tratamento da solicitação a um aplicativo da web existente. O aplicativo pode ser fornecido como um caminho de arquivo WAR ou como um caminho de pasta do aplicativo da web.

Se quisermos expor um aplicativo no contexto "myApp", escreveríamos:

Handler webAppHandler = new WebAppContext(webAppPath, "/myApp");
server.setHandler(webAppHandler);

4.2. HandlerCollection

Para aplicativos complexos, podemos até especificar mais de um manipulador usando a classeHandlerCollection.

Suponha que implementamos dois manipuladores personalizados. O primeiro executa apenas operações de log enquanto o segundo cria e envia de volta uma resposta real ao usuário. Queremos processar cada solicitação recebida com os dois nesta ordem.

Veja como fazer isso:

Handler handlers = new HandlerCollection();
handlers.addHandler(loggingRequestHandler);
handlers.addHandler(customRequestHandler);
server.setHandler(handlers);

5. Conectores

A próxima coisa que queremos fazer é configurar em quais endereços e portas o servidor estará ouvindo e adicionando um tempo limite inativo.

A classeServer declara dois construtores de conveniência que podem ser usados ​​para vincular a uma porta ou endereço específico.

Embora isso possa ser bom ao lidar com aplicativos pequenos, não será suficiente se quisermos abrir várias conexões em soquetes diferentes.

Nesta situação, Jetty fornece a interfaceConnector e mais especificamente a classeServerConnector que permite definir vários parâmetros de configuração de conexão:

ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
connector.setHost("169.20.45.12");
connector.setIdleTimeout(30000);
server.addConnector(connector);

Com essa configuração, o servidor escutará 169.20.45.12:80. Cada conexão estabelecida neste endereço terá um tempo limite de 30 segundos.

Se precisarmos configurar outros soquetes, podemos adicionar outros conectores.

6. Conclusão

Neste tutorial rápido, focamos em como configurar um servidor incorporado com o Jetty. Também vimos como realizar outras configurações usandoHandlerseConnectors.

Como sempre, todo o código usado aqui pode ser encontradoover on GitHub.