Servlet/ Arquivo não encontrado

13 respostas
R

Boa tarde pessoal.
Estou com um problema vergonhosamente simples que não estou conseguindo resolver.

Estou desenvolvendo um servlet que recebe uma string de uma página e retorna "olá + string".

O servlet quando acessado diretamente do eclipse funciona normalmente. Porém, ao tentar acessá-lo via página HTML fazendo uso de um form + action, acusa arquivo não encontrado.

Estou usando eclipse, lubuntu 13.10, tomcat 6 e firefox.

Seguem os códigos:

SERVLET
package com.servlet;
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;

public class SecondServlet extends HttpServlet {
 
	private static final long serialVersionUID = 1L;
	
	/*
	 * (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doGet
	 * (javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 *
	 *"Esse servlet recebe uma string como parametro de uma requisição do cliente e imprime-a no browser."
	 */
	
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String name = request.getParameter("name"); //O método  .getParameter("nome_parametro_a_receber") 
													//obtem o valor do parametro passado 
													//pelo cliente, caso o parâmetro esteja vazio, o método retornará
													// uma string vazia.
		
		PrintWriter out = response.getWriter();
		out.println("<H1>Oi, " + name + "!!!</H1>"); //Obtem o fluxo de saída em forma de caracteres
													//e envia para o browser
		out.close();
		
	}
	
	

}

WEB.XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>SecondServlet</display-name>
  <servlet>
    <servlet-name>com_servlet_SecondServlet</servlet-name>
    <servlet-class>com.servlet.SecondServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>com_servlet_SecondServlet</servlet-name>
    <url-pattern>/SecondServlet</url-pattern>
  </servlet-mapping>
</web-app>
PÁGINA HTML
<HTML>
<HEAD>
<TITLE>Introdução</TITLE>
</HEAD>
<BODY>
<FORM ACTION=?http://localhost:8081/SecondServlet/SecondServlet? METHOD="post">
Qual o seu nome?
<INPUT TYPE=TEXT NAME=?name?><P>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

Desde já agradeço pela ajuda!

13 Respostas

G

É porque você está tentando fazer uma requisição POST ( METHOD=“post” ) e no teu servlet você permite somente GET (implementou doGet).

R

Opa, corrigido. Mas ainda sem funcionar…

G

Como você fez? Implementou o método doPost no servlet? Poste o código alterado.

R

Pra falar a verdade alterei só o método para GET ná página HTML.

<HTML>  
<HEAD>  
<TITLE>Introdução</TITLE>  
</HEAD>  
<BODY>  
<FORM ACTION=?http://localhost:8081/SecondServlet/SecondServlet? METHOD="get">  
Qual o seu nome?  
<INPUT TYPE=TEXT NAME=?name?><P>  
<INPUT TYPE=SUBMIT>  
</FORM>  
</BODY>  
</HTML>
G

O correto seria você impementar o doPost, mas assim como está deveria funcionar.

Então experimente mudar a action do form para ACTION="/SecondServlet/SecondServlet".

R

g4j:
O correto seria você impementar o doPost, mas assim como está deveria funcionar.

Então experimente mudar a action do form para ACTION="/SecondServlet/SecondServlet".

Na verdade eu já fiz esse servlet a um tempo atrás, só que no Windows, e lá funcionou normalmente, usando o método GET. O problema só existe agora que estou usando o Lubuntu.

Alterei a URL no HTML e nada ainda…

Inicialmente pensei que fosse algum erro no documento HTML ou no WEB.xml, pois acessado pelo eclipse o servlet executa normalmente, mas os mesmos parecem estar configurados de forma correta.

Será que pode ser alguma configuração no Tomcat?

G

Fica difícil saber se é alguma coisa no tomcat sem ver a configuração do seu ambiente.

Depois que o tomcat inicia, você deve conseguir acessar via browser o endereço http://localhost:8081/SecondServlet/SecondServlet

R

g4j:
Fica difícil saber se é alguma coisa no tomcat sem ver a configuração do seu ambiente.

Depois que o tomcat inicia, você deve conseguir acessar via browser o endereço http://localhost:8081/SecondServlet/SecondServlet

Pelo eclipse (executanto o servlet no servidor) essa pagina aparece sem problemas, inclusive foi esse o link que copiei e inseri no action da página HTML.

Já já posto uma screen shot com a configuração do servidor no eclipse, o lubuntu vou ter que configurar o lubuntu pra isso.

R

Segue aí a configuração do server

R

Alguém se habilita?

D

Ctrl+C .. Ctrl+V do seu código num projeto na minha máquina. Não sou mestre no assunto mas as seguintes alterações no html fizeram tudo funcionar pelo Eclipse e também direto pelo browser. Além disso também fiz a mudança que já foi citada de mudar de doGet para doPost no servlet

Meu html ficou assim
<HTML>  
<HEAD>  
<TITLE>Introdução</TITLE>  
</HEAD>  
<BODY>  
<FORM ACTION=SecondServlet METHOD="post"> 
Qual o seu nome?  
<INPUT TYPE=TEXT NAME=name><P>  
<INPUT TYPE=SUBMIT>  
</FORM>  
</BODY>  
</HTML>

Pelo que entendi do trecho abaixo no ACTION você colocou o caminho todo do servlet com nome do projeto junto. No meu html eu coloquei somente o nome do servlet que mapeado pelo xml encontra o pacote e a classe. O ACTION do jeito que você colocou não funcionou aqui.

E no trecho ..NAME=?name?>... também retirei os ?s e deu certo.

<FORM ACTION=?http://localhost:8081/SecondServlet/SecondServlet? METHOD="get">    
Qual o seu nome?    
<INPUT TYPE=TEXT NAME=?name?><P> não entendo por que ?name?

Comparei as configurações do teu tomcat e estão iguais. Uso ubuntu + tomcat 6 + firefox.
Como disse também estou estudando o assunto portanto não sei muito, mas as alterações do html fizeram tudo funcionar aqui.

R
dio.msg:
Ctrl+C .. Ctrl+V do seu código num projeto na minha máquina. Não sou mestre no assunto mas as seguintes alterações no html fizeram tudo funcionar pelo Eclipse e também direto pelo browser. Além disso também fiz a mudança que já foi citada de mudar de doGet para doPost no servlet Meu html ficou assim
<HTML>  
<HEAD>  
<TITLE>Introdução</TITLE>  
</HEAD>  
<BODY>  
<FORM ACTION=SecondServlet METHOD="post"> 
Qual o seu nome?  
<INPUT TYPE=TEXT NAME=name><P>  
<INPUT TYPE=SUBMIT>  
</FORM>  
</BODY>  
</HTML>

Pelo que entendi do trecho abaixo no ACTION você colocou o caminho todo do servlet com nome do projeto junto. No meu html eu coloquei somente o nome do servlet que mapeado pelo xml encontra o pacote e a classe. O ACTION do jeito que você colocou não funcionou aqui.

E no trecho ..NAME=?name?>... também retirei os ?s e deu certo.

<FORM ACTION=?http://localhost:8081/SecondServlet/SecondServlet? METHOD="get">    
Qual o seu nome?    
<INPUT TYPE=TEXT NAME=?name?><P> não entendo por que ?name?

Comparei as configurações do teu tomcat e estão iguais. Uso ubuntu + tomcat 6 + firefox.
Como disse também estou estudando o assunto portanto não sei muito, mas as alterações do html fizeram tudo funcionar aqui.

Assim que chegar em casa vou testar essas alterações, e em relação as "?" elas não estão no html original, surgiram aqui no fórum
Já já eu posto o resultado.

Mas já agradeço peja ajuda!

R
ruds:
dio.msg:
Ctrl+C .. Ctrl+V do seu código num projeto na minha máquina. Não sou mestre no assunto mas as seguintes alterações no html fizeram tudo funcionar pelo Eclipse e também direto pelo browser. Além disso também fiz a mudança que já foi citada de mudar de doGet para doPost no servlet Meu html ficou assim
<HTML>  
<HEAD>  
<TITLE>Introdução</TITLE>  
</HEAD>  
<BODY>  
<FORM ACTION=SecondServlet METHOD="post"> 
Qual o seu nome?  
<INPUT TYPE=TEXT NAME=name><P>  
<INPUT TYPE=SUBMIT>  
</FORM>  
</BODY>  
</HTML>

Pelo que entendi do trecho abaixo no ACTION você colocou o caminho todo do servlet com nome do projeto junto. No meu html eu coloquei somente o nome do servlet que mapeado pelo xml encontra o pacote e a classe. O ACTION do jeito que você colocou não funcionou aqui.

E no trecho ..NAME=?name?>... também retirei os ?s e deu certo.

<FORM ACTION=?http://localhost:8081/SecondServlet/SecondServlet? METHOD="get">    
Qual o seu nome?    
<INPUT TYPE=TEXT NAME=?name?><P> não entendo por que ?name?

Comparei as configurações do teu tomcat e estão iguais. Uso ubuntu + tomcat 6 + firefox.
Como disse também estou estudando o assunto portanto não sei muito, mas as alterações do html fizeram tudo funcionar aqui.

Assim que chegar em casa vou testar essas alterações, e em relação as "?" elas não estão no html original, surgiram aqui no fórum
Já já eu posto o resultado.

Mas já agradeço peja ajuda!

Cheguei ontem em casa e pra minha alegria estava sem internet... Pois bem.
Hoje pela manhã aqui na empresa fiz as alterações indicadas, mas somente por elas não funcionou...

Só a alteração do método doGet para doPost não funcionou, no entanto a inclusão de ambos os métodos fez o servlet funcionar tranquilamente!

E a url com o caminho completo do servlet funcionou de boa no ACTION.

Agradeço pela ajuda, foi de muita valia.

Estou voltando a estudar J2EE depois de um tempo parado, tenho que relembrar muitas coisas.

Mais uma vez obrigado! RESOLVIDO

Criado 5 de maio de 2014
Ultima resposta 7 de mai. de 2014
Respostas 13
Participantes 3