Adicionando contextos ao Jetty no Maven

Compartilhar/Favoritos

Onde trabalho, há um conjunto predefinido de CSS e Javascript que todos os aplicativos web devem usar. Eles não podem ser embutidos dentro da aplicação web: as páginas devem referenciá-los a partir do raiz do servidor. Isso permitiria a correção ou troca de estilo em um único ponto para todos os sistemas. Ex:

<link rel="stylesheet" type="text/css" href="/css/principal.css" />

Durante o desenvolvimento, contudo, isso causa um problema. Se não tivermos contextos com os arquivos CSS e Javascript localmente ou redirecionados para um local que os tenha, o desenvolvimento fica inviável.

Usamos em desenvolvimento o Jetty executado diretamente pelo Maven, como explicado aqui.

Levei algum tempo para descobrir uma forma simples de criar novos contextos do Jetty quando executado diretamente pelo Maven. Havia mais de uma forma, mas queria a mais simples. Aproveitei e aprendi um pouco mais sobre a configuração de plugins no Maven.

Normalmente, basta muito pouco para configurar o Jetty. Basta configurar o POM do seu projeto:

<project>
...
  <build>
  ...
    <plugins>
    ...
      <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>maven-jetty-plugin</artifactId>
      </plugin>
    ...
    </plugins>
  ...
  </build>
...

Depois, é só executar com:

mvn jetty:run

Agora, ao que importa. Para criar mais contextos, basta incluir alguns itens na configuração do plugin:

<plugin>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <configuration>
    <contextHandlers>
      <contextHandler>
        <contextPath>/css</contextPath>
        <resourceBase>C:/htmlbase/css</resourceBase>
        <handler implementation="org.mortbay.jetty.handler.ResourceHandler"/>
      </contextHandler>
    </contextHandlers>
  </configuration>
</plugin>

É possível incluir vários contextHandlers. Ainda há duas variações interessantes:

<contextHandlers>
  <contextHandler>
    <contextPath>/</contextPath>
    <resourceBase>C:/htmlbase</resourceBase>
    <handler implementation="org.mortbay.jetty.handler.ResourceHandler"/>
  </contextHandler>
</contextHandlers>

No exemplo acima, criamos um contexto raiz. Ele não entra em conflito com o contexto da sua aplicação. Assim, qualquer URL que esteja em um contexto diferente da sua aplicação irá para “C:/htmlbase”.

A outra variação é:

<contextHandlers>
  <contextHandler>
    <contextPath>/</contextPath>
    <resourceBase>http://www.suaempresa.com.br</resourceBase>
    <handler implementation="org.mortbay.jetty.handler.ResourceHandler"/>
  </contextHandler>
</contextHandlers>

Note que “resourceBase” é uma URL. O Jetty irá buscar desta URL o conteúdo procurado (não é redirecionamento). Nestes casos, é mais interessante forçar um cache no cliente:

<contextHandlers>
  <contextHandler>
    <contextPath>/</contextPath>
    <resourceBase>http://www.suaempresa.com.br</resourceBase>
    <handler implementation="org.mortbay.jetty.handler.ResourceHandler">
      <cacheControl>public,max-age=3600</cacheControl>
    </handler>
  </contextHandler>
</contextHandlers>

Assim, estamos informando o browser para evitar que busque sempre recursos que normalmente serão estáticos.

É possível fazer as mesmas coisas através de um arquivo de configuração específico do Jetty, mas note que é bem mais complicado.

You may also like...

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Translate »