Servlet/ Arquivo não encontrado

13 respostas
ruds

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

g4j

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

ruds

Opa, corrigido. Mas ainda sem funcionar…

g4j

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

ruds

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>
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".

ruds

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?

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

ruds

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.

ruds

Segue aí a configuração do server

ruds

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.

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!

ruds
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