Introdução ao Tomcat e Servlets

40 respostas
A

Assunto: Como instalar o famoso tomcat e rodar a sua primeira servlet. Este tutorial também explica um pouco do web.xml e como funciona um servlet container.

Você pode ler este tutorial na íntegra em http://www.guj.com.br/java.artigo.9.1.guj

Por favor, coloque as suas dúvidas e seus comentários sobre este tutorial aqui.
Sinta-se livre para fazer qualquer tipo de pergunta, desta maneira você estará nos ajudando e aos outros usuários!

40 Respostas

Leonardo

Olá galera !

Estou com problemas na primeira parte do tutorial. Estou utilizando o Linux. Quando tento compilar o Servlet usando:

javac HelloServlet.java

recebo o erro:

Segmentation fault

e não é gerado o arquivo .class

alguma idéia ?
:cry:

Obrigado !

Paulo_Silveira

minha nossa!

isso nao era pra acontecer NUNCA!

que java voce tem instalado? pegou onde?

poxa, deu pau no javac! o javac eh feito em java, entao a virtual machine ta completamente quebrada! tenta reinstalar se for simples!

Leonardo

você não vai acreditar … mas isto está acontecendo onde hospedo meu site ! :shock:

na verdade eles usam o Jikes, não é o compilador da Sun … estão batendo cabeça mas nào sabem como resolver… :evil:

Leonardo

e o problema continua... você acha que o jeito é reinstalar tudo mesmo ?

uma classe bem ridicula eu consigo compilar:

import javax.servlet.*;
import java.io.*;

public class Teste {
   public Teste () {
      String x;
   }

a do tutorial não ...

import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class HelloServlet extends HttpServlet{
      public void doGet(HttpServletRequest request, HttpServletResponse response
)
         throws IOException, ServletException {
    
        // vamos definir o tipo de conteudo
        // que será devolvido pelo response
        response.setContentType("text/html");

        // pegamos o PrintWriter do response, através
        // do qual escreveremos o conteudo da pagina
        PrintWriter out = response.getWriter();

        // Agora vamos escrever o conteudo da pagina
        out.println("<HTML>");
        out.println("<BODY>");
        out.println("<H1>Hello World!</H1>");
        out.println("</BODY>");
        out.println("</HTML>");
       }                                                                        
    }

Alguma idéia ?? :?:

Leonardo

talvez isto diga alguma coisa…

LocaWeb > javac HelloServlet.java -verbose [read HelloServlet.java] [read /usr/java/lib/rt.jar/java/lang(Object.class)] [read /usr/java/lib/rt.jar/java/lang(Throwable.class)] [read /usr/java/lib/rt.jar/java/io(Serializable.class)] [read /usr/java/lib/rt.jar/java/lang(String.class)] [read /usr/java/lib/rt.jar/java/lang(Comparable.class)] [read /usr/java/lib/rt.jar/java/lang(CharSequence.class)] Segmentation fault LocaWeb >

não é estranho que o javac leia somente a rt.jar ? eo servlet.jar ?

F

Na esqueça de adicionar o servet.jar ao classpath. Mas mesmo sem adicionar nao deveria dar seg fault…

Leonardo

O CLASSPATH está assim:

CLASSPATH=/usr/java/lib/rt.jar:/usr/java/lib/servlet.jar:/usr/java/lib/activatio
n.jar:/usr/java/lib/mail.jar:/usr/java/lib/mm.mysql-2.0.14-bin.jar:/usr/java/lib
/jdbc2_0-stdext.jar:.

:frowning:

Rafael_Steil

Isso eh pau na locaweb. Com certeza. Liga pro 0800 deles e mete o pau. :twisted:

Rafael
(editado: nao tenho mtas experiencias boas com a locaweb, por isso a minha ira)

Paulo_Silveira

Leonardo. Tipo, nao era pra voce ta fazendo assim.
Voce deveria compilar os arquivos no SEU micro, e usar o ftp soh para mandar os .class pro lugar certo!

Porque voce quer compilar na locaweb?

Leonardo

não sabia que não era assim … :?

pensai que tinha que compilar tudo lá !

vou compilar tudo local e depois mandar pra lá !

valeu :!:

Leonardo

valeu galera ! funcionou: www.ntec.com.br/teste/servlet/HelloServlet

agora curiosidade… a compilação também não deveria funcionar lá ???

Paulo_Silveira

dever, deveria
mas a vantagem do java eh compilar em algum lugar e rodar em qualquer lugar, e voce tava jogando isso fora!!!

Program once, run anywhere!

K

Olah.
Eu estou tendo problemas com a integracao APACHE-TOMCAT atreaves do mod_webapp
faz uma semana que estou tentando fazer essa integracao e ateh agora nada…

se alguem poder me dar alguma luz…
Obrigado.

Paulo_Silveira

Oi

O mod_webapp serve soh para isntalar exemplos
quem faz a ligacao com o tomcat eh o mod_jk

Sinceramente, recomendo voce criar um proxy entre o apache e o tomcat. tipo, redireciona o diretorio /java para o tomcat na porta 8080, porque usar modo_jk eh MUITO chato de fazer…

Umlauf

Na introdução do tutorial diz que preciso ter o JDK instalado.
Devo instalar o J2SE ou J2EE pra rodar um Servlet? Ou não tem nada a ver? :?

Rafael_Steil

Poder ser o J2SE apenas, a unica coisa que voce deve ter no seu CLASSPATH eh o servlet.jar ( ou servlets.jar, nao lembro o certo ), o qual ja vem junto com o Tomcat.!!

[]'s
Rafael Steil

Paulo_Silveira

se voce nao esta achando o servlets.jar, pegue ele nao nossa secao de downloads

Umlauf

Obrigado, Rafael e Paulo !!

Funcionou perfeitamente meu HelloServlet :smiley:

Estou apenas com um probleminha:
Eu instalei o Tomcat em c:java omcat 4.1. Esse espaço entre “tomcat” e “4.1” está atrapalhando na hora de compilar a classe. Eu tirei o " 4.1" do nome da pasta e consegui compilar, mas pra poder startar o Tomcat tive que colocá-lo novamente.

Bem, pra não ter que tirar e pôr a toda hora o " 4.1" vejo duas possibilidades (não sei se alguma delas é possível):

  1. deixo a pasta como “Tomcat 4.1” e instruo o javac a reconhecer espaços num caminho;

  2. altero a pasta para “Tomcat” e mudo a configuração do Tomcat pra ele saber que o nome da pasta mudou.

O problema é que não sei como fazer nenhuma das duas :frowning:

Somebody help me, please?

Umlauf

Galera,

Quando eu modifico a classe, recompilo e jogo-a em webapps | HelloServletApp | WEB-INF, substituindo a anterior e dou um refresh no browser, continua aparecendo o texto da compilação anterior. Só consegui resolver isso restartando o tomcat. É assim mesmo ou estou deixando de fazer algo?

Rafael_Steil

Pelo que sei, ha 2 possibilidades:

  1. configure a tua aplicacao ( no serve.xml ) com reloadable=true
  2. Use o gerenciador do tomcat para restartar. Por exemplo, digamos que o nome da tua aplicacao seja “teste”. Basta fazer:

http://localhost:8080/manager?reload=/teste

[]'s
Rafael Steil

S

Pessoal nunca trabalhei com pacotes etc, sempre coloquei os .class dentro do WEB_INF/classes e sempre rodou.

Mas galera fui tentar instalar aquele pacote do tutorial do chat (gujchat.jar) po ele é cheio de pastas e tal, alguém com uma boa alma poderia me falar como isso funciona ? como rola esses esquemas de pacotes, de jars em um TOMCAT ou JBOSS.

Como instalo o gujchat.jar no TOMCAT ?

Desde já agradeço pela atenção de todos.

cadu

pessoal,

gostaria de saber quais diretórios devo criar e onde colocar os arquivos no tomcat… e no tomcat tem q usar xml ou posso usar html?

e qual servidor recomendaria usar para trabalhar com java, jsp etc, o apache ou tomcat mesmo?

o apache tem uma configuração mais simples? :?:

Umlauf

Rafael,

onde deve ser colocado o “reloadable=true” ? Tá meio confuso esse server.xml… :oops:

é o server.xml que fica no %CATALINA_HOME%/conf/ né?

[]'s

Paulo_Silveira

é nesse server.xml mesmo
vai aqui um exemplo

<Context path="/guj" docBase="c:\tchan\guj" 
         debug="0" reloadable="true"/>
Umlauf

Funcionou!!! :smiley:

Obrigado a todos!

[]'s

cadu

olá pessoal !!!

sem querer ser chato…

mas não consegui rodar qualquer servlet q seja do jeito do tutorial…
só roda quando coloco na pasta “examples” …

fiz do mesmo jeito do tutorial mais de 5 vezes… não sei o q pode está dando errado… acesso as servlets exemplos e está OK… e coloco a minha lá tbm está ok, mas quando crio os diretórios não dá certo…

fiz o seguinte:

c: omcatwebappsHelloServletApp
c: omcatwebappsHelloServletAppWEB-INF
c: omcatwebappsHelloServletAppWEB-INFclasses
c: omcatwebappsHelloServletAppWEB-INFweb.xml

no web.xml coloquei a mesma coisa do tutorial…

aquelas alterações no server.xml … não sei se fiz certo… tentei até alterar no server.xml o context do diretorio examples para o diretorio da minha aplicação… ainda reconhece o diretorio examples e não o diretório da aplicação

pessoal por favor se puderem me ajudar agradeço…
a versão do tomcat q estou usando é 4.0
e a do jdk é 4.1

:?

F

Vc sabe o ultimo numero da versao do Tomcat (4.0.?)?

Nos ultimos dias eu peguei uma versao um poco mais nova do Tomcat (acho q era 4.1.12) e acho que realmente precisei configurar alguma coisa a mais alem do que estah no tutorial…

Alguem ai confirma o que eu falei ou serah q to viajando???

Se for isso mesmo tenho q fazer uma atualizacaozinha no tutorial

Rafael_Steil

Eu uso a ultima versao, a 4.1+, e funciona da mesma maneira. O que deve estar acontecendo, e foi algum dos varios problemas que tive quando estava comecando a mexer com ele, era na hora de mapear os servlets e ate mesmo na configuracao da minha aplicacao.
Basicamente ( e de qq maneira eh mais ou menos o que foi dito no tutorial ) eh assim:

  1. Abra o server.xml e coloque la um contexto para a aplicacao. Levando em consideracao que o diretorio base dela eh “/var/tomcat4/webapps/MinhaAplicacao”, fazer assim:
<Context path="/MeuTeste" docBase="/var/tomcat4/webapps/MinhaAplicacao" reloadable="true"/>

Note que essa entrada deve necessariamente estar denro de uma tag <Service>, geralmente a “Tomcat-Standalone”.

Depois disso, se o diretorio nao extistir, crie ele. Entao crie um WEB-INF dentro dele e dentro do WEB-INF crie um outro diretorio chamado “classes”. Dentro do “classes” coloque o .class do Servlet.

Entao agora precisa criar o web.xml dentro do diretorio WEB-INF. Levando em consideracao que o nome do .class eh ServletExemplo.class , e que queremos acessar usando o nome “MeuServlet”, o web.xml ficaria assim:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<servlet>
	<servlet-name>MeuServlet</servlet-name>
	<servlet-class>ServletExemplo</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>MeuServlet</servlet-name>
	<url-pattern>/MeuServlet</url-pattern>
</servlet-mapping>

</web-app>

Depois eh so restartar o tomcat e ( levando em consideracao que ele vai startar no localhost, porta 8080 ), acessar:

http://localhost:8080/MeuTeste/MeuServlet

Isso funciona perfeito em todo tomcat que testei.

Rafael

F

Entao Rafael, mas quando eu usei a versao 4.0.4 eu nao tive a necessidade de editar o server.xml… Entao o tutorial ficou sem explicar essa parte…

Rafael_Steil

Eh que, dependendo da configuracao padrao do tomcat, ele toda hora fica ( ou nao ) verificando se tem novas aplicacoes. Por isso que as vezes qdo o pessoal apenas criava o diretorio o tomcat ja se ligava e configurava.

Rafael

Roger75

Pessoal,

Quero instalar o tomcat na minha maquina, então fiz download do arquivo tomcat-4.1.27.zip, descompactei no diretorio c:tomcat e tentei executar C:tomcat/jakarta-tomcat-4.1.27/bin/startup.bat

Esta dando a mensagem:
“The CATALINA_HOME environment variable is not defined correctly
This environment variable is needed to run this program”

Onde eu tenho que definir esta variavel ?
Tentei colocar a linha
SET CATALINA_HOME=.;C:TOMCAT/JAKART~1.27/bin
no autoexec.bat mas não funcionou.

Alguem poderia me ajudar?

black_fire

Se você tá no windos, tenta usar o instalador:

http://apache.usp.br/jakarta/tomcat-4/binaries/jakarta-tomcat-4.1.27.exe

CATALINA_HOME é o diretório onde está instalado o tomcat:

suponhamos que voce tenha instalado o tomcat em:
c: omcat

set CATALINA_HOME=c: omcat

Use o mesmo procedimento do classpath para o calalina_home
Não fica setado a pasta bin e sim a pasta de instalação…

Roger75

Legal, funcionou!
Também estava dando problema de “sem espaço em ambiente” mais aí segui a orientação do help de aumentar a memória inicial do startup.bat.

Valeu mesmo!

“black_fire”:
Se você tá no windos, tenta usar o instalador:

http://apache.usp.br/jakarta/tomcat-4/binaries/jakarta-tomcat-4.1.27.exe

CATALINA_HOME é o diretório onde está instalado o tomcat:

suponhamos que voce tenha instalado o tomcat em:
c: omcat

set CATALINA_HOME=c: omcat

Use o mesmo procedimento do classpath para o calalina_home
Não fica setado a pasta bin e sim a pasta de instalação…

Roger75

Segui o exemplo do tutorial porém não funcionou :frowning:

Consegui criar a class HelloServlet.class e configurei tudo do jeito que está ensinando porém quando eu abro o endereço

http://localhost:8080/HelloServletApp/HelloServlet aparece a tela:

HTTP Status 404
/HelloServletApp/HelloServlet
type :Status report
message: /HelloServletApp/HelloServlet
description: The requested resource (/HelloServletApp/HelloServlet) is not available.

Que será que está ocorrendo?

Ironlynx

Roger75,sua servlet não está sendo encontrada…
Como está seu mapeamento?(Seu web.xml?)

V

Aí pessoal eu instalei TomCat5 e não sei configurar.
Quando vo rodar o startup.bat aparece a mensagem:
The CATALINA-HOME enviroment variable is not defined correctly…vc já conhecem.

Desde já agradeço!
8)

Rafael_Steil

Configure a variavel de ambiente chamada

CATALINA_HOME

para apontar para o diretorio onde vc instalou o tomcat.

Rafael

C

Estou usando o eclipse para criar meus servlets, jsp… mas gostaria de criar em outra pasta, fora do webapps do tomcat. Qual o procedimento ??

Outra coisa: estou usando um plugin chamado sysdeo para tomcat, então qdo crio o projeto, ele cria duas pastas webinf +/- dessa forma:
+projeto
—web-inf/src
—web-inf
-----classes
daí sempre fico na dúvida, onde eu coloco meus servlets, html, imagens, enfim, qual a forma correta de usar esta estrutura ??

Rodrigo_Carvalho_Aul

Você pode colocar dentro do webapps só o xml de configuração da sua aplicação, e lá vc aponta o local que está a sua aplicação. Por exemplo:

intranet.xml

<Context displayName="Intranet" docBase="C:Intranethtdocs" path="/intranet" reloadable="true"> </Context>

emircalife

Gente, como faço para fazer rodar o tomcat no windows vista, pois instarei sem que ele apresentasse erro, mas o serviço não inicializa.

PS. já peguei uma dica que dizia para liberar todas as permissões para a pasta do tomcat, mas mesmo assim não funcionou.

Criado 31 de agosto de 2002
Ultima resposta 24 de jan. de 2008
Respostas 40
Participantes 16