Tomcat: Guia de sobrevivência para aplicações legadas

Tomcat: Guia de sobrevivência para aplicações legadas
Igor Chagas
Igor Chagas

Compartilhe

Em algum momento, todo programador ou programadora Java Web provavelmente teve que usar um servidor chamado Apache Tomcat (ou para os íntimos apenas Tomcat), seja estudando ou desenvolvendo um projeto. E é possível também ter enfrentado alguns problemas comuns que aparecem quando utilizamos a ferramenta e acabam dificultando o nosso trabalho.

Por isso, venho mostrar neste artigo os principais problemas pelos quais podemos passar ao usar o Tomcat em nossos projetos Java Web legados. Porém, antes de partirmos para discutir os erros e bugs, devemos mergulhar nas configurações básicas a serem seguidas para evitar certos problemas.

(Este guia foi feito com base nas dúvidas que aparecem no fórum da Alura e por conta disso irá focar especificamente nos problemas que aparecem usando a IDE Eclipse, com o uso das tecnologias mais básicas: JSP, JSTL, Servlets e assim por diante). Vamos lá!

Configurações iniciais:

6.03.15.0TBDTBD10.1.x10.1.0-M6 (alpha)11 and later
5.03.04.02.02.010.0.x10.0.128 and later
4.02.33.01.11.19.0.x9.0.548 and later
3.12.33.01.11.18.5.x8.5.727 and later
3.12.33.01.1N/A8.0.x (superseded)8.0.53 (superseded)7 and later
3.02.22.21.1N/A7.0.x (archived)7.0.109 (archived)6 and later (7 and later for WebSocket)
2.52.12.1N/AN/A6.0.x (archived)6.0.53 (archived)5 and later
2.42.0N/AN/AN/A5.5.x (archived)5.5.36 (archived)1.4 and later
2.31.2N/AN/AN/A4.1.x (archived)4.1.40 (archived)1.3 and later
2.21.1N/AN/AN/A3.3.x (archived)3.3.2 (archived)1.1 and later

Fonte da tabela: Site do Apache Tomcat

Assim como podemos observar na tabela acima, para tudo funcionar corretamente na hora da execução do projeto, é necessário que as versões de outras tecnologias sejam compatíveis com a versão do servidor escolhida. A parte boa é que o próprio core do Tomcat já vem com a maior parte dos “jars” necessários e compatíveis para funcionar sem nenhum problema.

Entretanto, ainda precisamos ficar atentos com a versão do Java e JSTL, já que essas tecnologias não vem acopladas junto a library do Tomcat, sendo necessário incluí-las “manualmente” no projeto.

As versões 9 e 10 do Tomcat funcionam usando a versão mais querida do Java, a 8 (versão que trouxe as mudanças mais significativas para a linguagem), então a não ser que seja escolhida a versão 10.1 ou anteriores a 7 do servidor, é possível usar o Java 8. É importante ressaltar que qualquer versão superior a 11 do Java funciona em qualquer versão do Tomcat, então caso esteja sendo usada, por exemplo, a versão 15, podemos usar a 6 do servidor.

O grande problema acaba sendo o JSTL, que pode gerar algumas dores de cabeça caso a versão errada tenha sido aplicada. Infelizmente, se olharmos a tabela acima, não veremos nenhuma referência à versão da tecnologia e é relativamente difícil de se achar material sobre o tema em portugues na internet. A boa notícia é que eu e diversas outras pessoas que programam já enfrentamos esse problema e conseguimos identificar qual versão dele é a necessária dependendo da escolhida para o Tomcat.

Para se usar a versão 9 do Tomcat será necessária a versão 1.2 da JSTL. Já para a versão 10, usaremos a 2.0. Ambas são compostas por dois “jars”:

1.2:

2.0:

É necessário que esses dois jars, dependendo da versão, sejam colocados na pasta “lib” do seu projeto para evitar qualquer problema envolvendo essa tecnologia.

Pronto! Essa é toda a infraestrutura básica que um projeto Java Web precisa ter.

Agora vamos mergulhar nas principais confusões que podem acontecer durante o nosso desenvolvimento!

Banner da Escola de Programação: Matricula-se na escola de Programação. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Meu import não está dando certo, o que fazer?

Um erro comum que acaba acontecendo é a confusão entre o import das bibliotecas “javax” e “jakarta”. O “javax” é o pacote padrão das versões anteriores a 10 do Tomcat, sendo normal que programadores e programadores que não estão acostumados a versão 10 tenham esse problema.

A versão 10 do Tomcat passou algumas mudanças de arquitetura e por isso o pacote padrão “javax” se tornou “jakarta”, precisando agora ser necessário fazer o import desse novo pacote para usar as principais classes e interfaces de um projeto Java Web.

Exemplo de import:

import jakarta.servlet.*

Meu código está correto mas ainda não funciona, o que fazer?

Às vezes problemas inexplicáveis acontecem mesmo em trechos em que o código está correto. Todas as versões estão compatíveis e ainda assim a execução não funciona. Nessa situação, podemos dizer que “bugs inexplicáveis pedem medidas inexplicáveis” e uma delas é simplesmente reiniciar o Eclipse. Pode parecer estranho, mas diversas vezes ao fazermos grandes mudanças em nossos projetos a IDE pode não conseguir “buildá-los” corretamente. Por vezes, apenas simplesmente fechar e depois abrir o projeto novamente pode resolver.

Em alguns casos se faz necessário limpar o “cache” do Eclipse e do Tomcat, vou deixar um tópico do fórum da Alura onde explico passo a passo como fazer esse procedimento:

Acontece um erro na hora de rodar o servidor: “project facet java version 11 is not supported”, o que fazer?

Este é um daqueles erros que quando aparece é preciso parar, coçar a cabeça e pensar “e agora?” Caso a pessoa não tenha uma noção prévia do que possa ter ocorrido, boas horas serão gastas até descobrir a solução.

Mas geralmente ele é causado quando fazemos um import de um projeto que vem com um Project Facet não suportado pela versão do Tomcat. Neste caso, estou mostrando quando ele não suporta a versão 11, mas isso pode ocorrer em outras versões também. O bom é que na maioria dos casos, fazendo o procedimento abaixo o erro será solucionado sem muitas dificuldades.

O seguinte processo será necessário:

  1. No Eclipse, clique com o botão direito em cima da pasta do seu projeto .
  2. Selecione a opção “Properties”.
  3. Na janela que abrir, no canto esquerdo terá um menu com diversas opções, clique em “Project Facets”.
  4. Vai aparecer uma aba com algumas opções como se fosse uma checklist. Haverá uma opção na qual estará escrito “Java” e no canto direito dela provavelmente estará o número “11”.
  5. Clique nesse número e selecione a opção “1.8”.
  6. Clique no botão “Apply and Close” no canto inferior direito.
Imagem mostra uma janela de properties de um projeto java web do Eclipse, nela podemos observar a guia “Project Facets” com suas diversas opções a serem configuradas

Pronto! Agora o servidor irá conseguir rodar o projeto!

Todos os imports, métodos, classes do pacote javax/jakarta estão em vermelho e não funcionam, o que fazer?

Este problema geralmente também ocorre ao importar um projeto para dentro do Eclipse e a causa dele é a falta da library Apache Tomcat no Build Path do projeto. Ele é bem simples de resolver com o seguinte processo:

  1. No Eclipse, clique com o botão direito em cima da pasta do seu projeto .
  2. Selecione a opção “Build Path” -> “Configure Build Path”.
  3. Clique em "Add library" -> "Server Runtime" -> escolha a versão do Tomcat que você está usando -> clique em "Finish".

Resolvido! Agora as classes do projeto irão compilar normalmente!

Não vi meu problema aqui, o que fazer?

A gama de erros que podem acontecer em um projeto Java Web é imensa e infelizmente não tem como explicar todos eles em único artigo. A parte boa é que no fórum de Java Web da Alura novos tópicos são criados diariamente e as chances de você encontrar como solucionar seu problema por lá são altas.

Vou deixar abaixo uma lista de tópicos com alguns outras principais dúvidas recorrentes e como resolvê-los:

Conclusão:

No geral, todo programador ou programadora que desenvolve aplicações Web Java com tecnologias legadas passou por algum dos problemas citados aqui e aqueles que estão entrando agora nesse mundo provavelmente também vão passar por isso. Mas não é motivo para desanimar, pois bugs e erros fazem parte do trabalho e conseguir resolvê-los torna quem desenvolve cada vez melhor. Portanto, espero que esse artigo consiga ser uma luz caso você se sinta preso em algum problema desconhecido. Sempre é bom conferir também nosso fórum de Java Web, pois a quantidade de erros possíveis é imensa e existem chances de a solução que você procura estar por lá.

Para aqueles que ficaram curiosos sobre esse incrível mundo do Tomcat envolvendo aplicações Java Web legadas, temos dois cursos na Alura que tratam desse assunto:

Igor Chagas
Igor Chagas

Estudante e entusiasta da linguagem Java, integrante do Scuba Team da Alura e universitário nas horas vagas.

Veja outros artigos sobre Programação