Introdução ao servidor Web simples do Java

blog

LarLar / blog / Introdução ao servidor Web simples do Java

Sep 02, 2023

Introdução ao servidor Web simples do Java

Por Matthew Tyson Arquiteto de Software, InfoWorld | Um dos novos recursos mais úteis incluídos na versão Java 18 (março de 2022) foi o novo Simple Web Server, que facilita a inicialização e

Por Matthew Tyson

Arquiteto de Software, InfoWorld |

Um dos novos recursos mais úteis incluídos na versão Java 18 (março de 2022) foi o novo Simple Web Server, que facilita a ativação e configuração de um servidor de arquivos HTTP. Ele também expõe uma API que estende o pacote httpserver existente para construir casos de uso simples. O novo Simple Web Server é uma ferramenta útil que todo desenvolvedor Java deve ter em sua bagagem de truques. Vamos dar uma olhada!

O novo comando jwebserver do Java simplifica a execução de um servidor web básico. É análogo à popular ferramenta SimpleHTTPServer no mundo Python.

A primeira etapa é certificar-se de que você está executando o Java 18 ou uma versão posterior. Digite java --version para descobrir qual versão você está executando atualmente. Eu recomendo usar o SDKMan para gerenciar instalações do JDK. É especialmente útil para fazer malabarismos com várias versões.

A coisa mais básica que você pode fazer com o Java Simple Web Server é servir o diretório atual na porta 8000. Basta digitar o comando mostrado na Listagem 1.

A partir daí, se você acessar seu navegador e visitar localhost:8000, verá uma listagem do sistema de arquivos, conforme mostrado na Figura 1.

Existem várias coisas comuns que você pode precisar fazer para ajustar o Simple Web Server na linha de comando. Por exemplo, você pode alterar a porta, o endereço ao qual vincular (a interface de rede para escutar) e o diretório para servir.

Na Listagem 2, você pode ver como escutar na porta 8080, em todas as interfaces e no diretório /foo/bar.

Como você pode ver, a ferramenta de linha de comando jwebserver possibilita servir arquivos estáticos usando a sintaxe mais simples possível. A seguir, daremos uma olhada na API Simple Web Server.

O Simple Web Server Javadoc é um bom ponto de partida para aprender sobre a API. A classe SimpleFileServer existe no pacote com.sun.net.httpserver. (Este pacote também abriga APIs mais antigas e de baixo nível para construção de servidores web. O pacote httpserver estende essa funcionalidade para requisitos mais simples.) A ferramenta CLI jwebserver usa SimpleFileServer para fazer seu trabalho, e também podemos usá-lo programaticamente.

A classe SimpleFileServer lida apenas com GET e HTTP/1.1. Podemos fazer algumas coisas interessantes com isso, no entanto. Por exemplo, esta introdução ao trabalho com o Simple Web Server sugere uma maneira de usar o projeto de sistema de arquivos na memória Java do Google para falsificar um sistema de arquivos para o manipulador.

Usaremos a ideia de um sistema de arquivos na memória para modificar o FileHandler no SimpleFileServer para realmente servir um sistema de arquivos virtual da memória. Em seguida, usaremos o pacote httpserver para lidar com um POST para adicionar um arquivo falso ao sistema de arquivos falso.

Para começar, vamos criar um projeto Maven rápido usando o seguinte comando:

Agora, coloque o CD no novo diretório /jsws.

Defina as versões do compilador e de origem como 18 no pom.xml, conforme descrito aqui.

A seguir, adicione Google Jimfs às dependências, conforme mostrado na Listagem 3.

Agora, podemos modificar o arquivo src/main/java/App.java para servir um sistema de arquivos falso. Você pode ver o código para fazer isso na Listagem 4.

A ideia na Listagem 4 é simular a API do sistema de arquivos local padrão usando a biblioteca jimfs de código aberto do Google, que implementa a API java.nio.file, mas faz tudo na memória, como um sistema de arquivos virtual. Usando a biblioteca, você pode definir seus próprios caminhos de diretório e arquivos programaticamente. Portanto, criamos nossa própria estrutura de diretórios virtuais e a transferimos para SimpleFileServer como manipulador de arquivos.

Configuramos a classe SimpleFileServer programaticamente:

Isso aceita o endereço da Internet para vincular, assim como vimos na linha de comando. Neste caso, passamos a interface não especificada e a porta 8080. Depois disso vem a raiz do sistema de arquivos. Para este exemplo, daremos a ele o objeto Path criado pelo nosso método createDirectoryHierarchy().