Não consigo abrir um servlet

9 respostas
FernandoCartaxo

Olá a todos, estou tendo dificuldades em abrir um servlet que criei para treinar
se eu colocar todo o caminho dele (http://localhost:8080/web/Teste.java) ele abre, mostrando o fonte da classe, se eu coloco sem o .java ele da o erro:

HTTP Status 404 - /web/Teste
type Status report
message /web/Teste
description The requested resource (/web/Teste) is not available.
Apache Tomcat/6.0.14

essa classe se encontra na raiz do projeto, não está dentro de nenhuma pasta

meu web.xml se encontra no mesmo lugar que a classe:

<?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>Teste</servlet-name>
		<servlet-class>Teste</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Teste</servlet-name>
		<url-pattern>/Teste</url-pattern>
	</servlet-mapping> 
</web-app>

alguem pode me ajudar nisso? há algo errado no meu web.xml? algum outro fator pode estar influenciando o andamento?

att,
Fernando Cartaxo

–edit–
só a termos de informações, uso o tomcat 6.0 e o plugin sysdeo no eclipse

9 Respostas

A

Caro Fernando,
sua classe deve ser compilada, e o arquivo Teste.class resultante da compilação deve ser colocado dentro do diretório /web/WEB-INF/classes

ramilani12

Qual o contexto da sua aplicação web?

Prq vc definiu no seu web.xml que URL que “mapeará” seu servelet seria isso: http://localhost:8080/meuContexto/Teste

FernandoCartaxo

Caro Fernando,
sua classe deve ser compilada, e o arquivo Teste.class resultante da compilação deve ser colocado dentro do diretório /web/WEB-INF/classes

via IDE nao faz isso automaticamente? (eclipse)?

o nome do meu contexto é web, e para acessar a servlet eu faço: http://localhost:8080/web/Teste

ainda nao conseguir…
não tou achando nada parecido na net, no google, deve ser uma besteira que tou me passando

–edit
realmente nao tem nenhum .class no diretorio /web/WEB-INF/

nicoweda

Então, no Eclipse vc tem que ir lah em “Configure build path…” e na aba source muda o default output folder pra onde vc deseja jogar as suas classes compiladas, no caso SeuProjeto/WEB-INF/classes
Abraços!

FernandoCartaxo

nicoweda:
Então, no Eclipse vc tem que ir lah em “Configure build path…” e na aba source muda o default output folder pra onde vc deseja jogar as suas classes compiladas, no caso SeuProjeto/WEB-INF/classes
Abraços!

Está configurado desse jeito já… pode ter alguma relação ao jdk que tou usando?

nicoweda

Faz assim, cria uma source folder chamada src
joga sua classe dentro dessa pasta, e tenta denovo.

Abraços

FernandoCartaxo
nicoweda:
Faz assim, cria uma source folder chamada src joga sua classe dentro dessa pasta, e tenta denovo.

Abraços

fiz isso, continua dando o mesmo erro =(

--edit

acho que assim fica mais fácil de passar o que estou querendo

minha hierarquia é essa:
[img]http://img115.imageshack.us/img115/8501/eclipse01gr5.jpg[/img]

meu web.xml é esse:

<?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>Web</servlet-name>
		<servlet-class>Web</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>Web</servlet-name>
		<url-pattern>/Web</url-pattern>
	</servlet-mapping> 
</web-app>
e minha classe Web é essa:
import java.io.IOException;  
 import java.io.PrintWriter;  
   
 import javax.servlet.ServletException;  
 import javax.servlet.http.HttpServlet;  
 import javax.servlet.http.HttpServletRequest;  
 import javax.servlet.http.HttpServletResponse;  
   
 /** 
  * O método padrão invocado em um servlet é doGet. 
  * A especificação 2.3 de servlet (que é a que estou trabalhando) implementa 
  * os 7 métodos do HTTP 1.1 (get, head, post, options, put, delete, trace). 
  * Os métodos mais comumente utilizados em aplicações web são get e post. 
  */  
 public class Web extends HttpServlet {  
   
    /** 
     * É executado quando é feita uma requisição com método GET pelo cliente. 
     *  
     * @param request Objeto com as informações pertinentes a requisição 
     * @param response Objeto com as informações pertinentes a reposta para o cliente 
     */  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  
          throws ServletException, IOException {  
       PrintWriter pw = response.getWriter(); // pega o 'escritor' da resposta  
       pw.println("<HTML>");  
       pw.println("<TITLE>Olá Mundo em Servlet!</TITLE>");  
       pw.println("<BODY>");  
       pw.println("Olá Web!");  
       pw.println("</BODY>");  
       pw.println("</HTML>");  
       pw.flush(); // descarrega as informações. não é obrigatória a chamda deste método  
    }  
 }

Será que ajuda?

zirocool

Meu caro…

Ao trabalhar com servlets, tente criar elas com pacotes específicos.

As vezes o container se perde quando tu não especifica um pacote na tua servlet.

Digamos que tu tenha uma servlet no pacote
br.com.guj

Entao, teu mapeamento ficaria da seguinte forma:

<web-app>  
    <servlet>  
         <servlet-name>web</servlet-name>  
         <servlet-class>br.com.guj.Web</servlet-class>  
     </servlet>

É importante observar, que no parametro servlet-name tu pode especificar qualquer coisa, isso servirá somente como referência pra ti chamar no mapping.

<servlet-mapping>  
        <servlet-name>web</servlet-name>  
         <url-pattern>/primeiroexemplo</url-pattern>  
</servlet-mapping>

No código acima, eu usei o parametro servlet-name pra chamar a referência que eu criei na , e mapiei ela pra seguinte url: http://localhost/NOMEDOTEUCONTEXTO/primeiroexemplo

NOMEDOTEUCONTEXTO = nome da webapp q tu criou no teu server.

FernandoCartaxo

fiz do jeito que você falou zirocool mas continuo na mesma…
algo que observei é que mesmo eu digitando localhost:8080/web onde o web é o meu contexto ele não lista os arquivos dentro dele, que em outro computador que usava e conseguir rodar a servlet listava… creio eu que deve ser algum problema de configuração…
alguem sabe o que pode ser isso?

–edit
conseguir agora, o erro era na hierarquia das classes, agora que arrumei rodou meu servlet, porém ele contiuna não listando os arquivos da pasta da minha aplicação, por exemplo, ao digitar localhost:8080/web ele deveria aparecer todos os meus arquivos, só que dá o mesmo erro de antes…

segue a minha antiga hierarquia e a nova, com seus respectivos web.xml, para caso alguem tenha o mesmo erro:

antigo

novo

mas continua minha duvida, de porque nao aparece a listagens dos arquivos da pasta da minha aplicação

Criado 3 de novembro de 2007
Ultima resposta 4 de nov. de 2007
Respostas 9
Participantes 5