Problema com Redirecionamento

Ola Pessoal!
Ja percebi que não sou apenas eu que tenho Problemas com Redirecionamento de Páginas né!
O maior problema é que eu não achei nenhum exemplo como o meu, que é o Redirecionamento de uma página HTML para um Servlet e o Redirecionamento do Servlet para uma Página JSP, que é onde o resultado será impresso.
E eu não tenho certeza se no meu exemplo o único problema é o redirecionamento, pois quando clico em Enviar aparece o erro:

HTTP Status 404 - /jsp/myjspapp1.jsp
--------------------------------------------------------------------------------
type Status report

message /jsp/myjspapp1.jsp

description The requested resource (/jsp/myjspapp1.jsp) is not available.
--------------------------------------------------------------------------------
Apache Tomcat/5.0.28

Eu fiz um exemplo bem simples, e quem puder me ajudar serei grato!

Com esse exemplo, todas os programadores que possuem dúvidas na parte de Redirecionamento de páginas poderão esclareca-las!

Primeiro vou passar a minha Estrutura de Diretórios para ficar mais fácil de entender:

Apache Software Foundation |_ Tomcat 5.0 |_ webapps |_ myApp |_ myjspapp1.htm WEB-INF |_ web.xml classes |_ TestingServlet.class TestingServlet.java |_ myJSPApp (Dentro do Diretório webapps) |_ jsp |_ myjspapp1.jsp

Código HTML -> É apenas uma Tabela que possui os campos: Nome da Classe, Atributo 1 e Atributo 2, assim que é clicado em “Enviar”, esses dados fornecidos devem ser pegos por um Servlet. Pode ser que eu esteja escrevendo errado o “form action” do código também, não sei se é: ‘servlet/TestingServlet’ ou se é ‘TestingServlet.class’.

<html>
<body>

<form action='servlet/TestingServlet' method='post'>
<table align='center'>
	<tr>
		<td colspan='2' bgcolor='#DDDDDD' height='5'></td>
	</tr>
	<tr>
		<td class='texto'>Nome da classe: </td>
		<td><input type='text' name='nome' size='20'></td>
	</tr>
	<tr>
		<td colspan='2' class='texto' bgcolor='#DDDDDD'>Atributos:</td>
	</tr>
	<tr>
		<td class='texto'>A1:</td>
		<td><input type='text' name='a1' size='20'></td>
	</tr>
	<tr>
		<td class='texto'>A2:</td>
		<td><input type='text' name='a2' size='20'></td>
	</tr>
	<tr>
		<td align='center' colspan='2' bgcolor='#DDDDDD'><input type='submit' value='Enviar'></td>
	</tr>
</table>
	
</form>

</body>
</html>

Código do Servlet -> Esse código serve para pegar os valores digitados e Redirecionar para uma página JSP, para que nela os valores possam ser impressos. A minha maior dúvida nessa parte é o “request.getRequestDispatcher”, pois não sei se estou passando a referência exata do JSP, ja tentei de várias maneiras e até agora não obtive sucesso, por isso que eu fiz a Estrutura de Diretórios logo acima, assim fica mais fácil para que vocês possam me orientar.

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

public class TestingServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("Não foi Postado");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
    {
        Enumeration e = request.getParameterNames();
        PrintWriter out = response.getWriter ();
        while (e.hasMoreElements()) 
       {
            String nome = (String)e.nextElement();
            String valor = request.getParameter(nome);
            out.println(nome + " = " + valor);
       }
        
        String dado1 = " ";
        String dado2 = " ";
        String dado3 = " ";
      
        request.setAttribute( "nome", dado1 ); 
        request.setAttribute( "a1", dado2 ); 
        request.setAttribute( "a2", dado3 );      	
		
        try{
              	
      	RequestDispatcher rd = request.getRequestDispatcher("../../../myJSPApp/jsp/myjspapp1.jsp");
                rd.forward(request, response);
                        
             } catch (Exception ex) {

        System.out.println(ex.toString());
       }
    }
}

Código do JSP -> Nesse código serão impressos os 3 valores fornecidos pelo usuário.

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>


<%
   String nome = (String) request.getAttribute( "nome" ); 
	
   String a1= (String) request.getAttribute( "a1" ) ; 

   String a2= (String) request.getAttribute( "a2" );

      out.println(" " + nome);
      out.println(" " + a1);
      out.println(" " + a2); 
      
%>

Bom, espero que possam me ajudar, e a muitos outros programadores que possuem a mesma dúvida na parte de redirecionamento.

Obrigado!

Logan

[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos - Matheus [/color][/size] :joia:

Bem,

primeiramente, para que tua action esteja certa verifique se você mapeou o servlet no web.xml com aquele caminho.

quanto ao redirecionamento, se for necessário passar a solicitação passada aconselho o usar o RequestDispatcher, acho mais prático fazer deste modo:

getServletContext().getRequestDispatcher( "/jsp/myjspapp1.jsp" ).forward( request, response );

utilizando o servlet contexto tu não precisa referenciar todo o caminho, só apartir da raiz do teu projeto.

ou se não precisar enviar a solicitação mande através do request.sendRedirect(“caminhoCompleto”);

:okok:

Pelo visto, o problema é que você quer, usando um servlet de uma aplicação x, chamar um jsp de uma aplicação y.

Isso não é possível. Eu recomendo que você coloque, tanto os jsp como os servlets na mesma aplicação, aí dá certo.

Mas, se você realmente quiser mantê-los em aplicações (contextos) separados, tente fazer response.sendRedirect(“http://localhost:8080/myJSPApp/jsp/myjspapp1.jsp”);

Só que é melhor adotar a primeira opção!

Falow!

Ola mais uma vez!
Bom, eu fiz o que vocês falaram, mas ainda tenho uma dúvida na hora de colocar o caminho no “form action” que é para encaminhar o HTML para o Servlet, vejam a linha abaixo:

<form action='servlet/TestingServlet' method='post'> 

Eu não tenho certeza o que eu devo colocar no “form action” é ‘servlet/TestingServlet’ ou ‘TestingServlet.class’, bom, eu ja tentei dos 2 jeitos e até agora nada, se caso alguem saiba como, por favor me ajudem!

Obrigado!

Logan
[/code]

Ola mais uma vez!
Bom, eu consegui redirecionar o HTML para o Servlet, agora o problema está mesmo em fazer com que do Servlet redirecione para o JSP!
Quando eu entro com os dados aparece o seguinte erro:


HTTP Status 404 - /myjspapp1.jsp

--------------------------------------------------------------------------------

type Status report

message /myjspapp1.jsp

description The requested resource (/myjspapp1.jsp) is not available.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

No meu código está assim:


 try{
              	
      	getServletContext().getRequestDispatcher("jsp/myjspapp1.jsp").forward(request, response);
                                
      } catch (ServletException ex) {

        System.out.println(ex.toString());
       }

Não sei mais o que pode ser!

Obrigado e se puderem me ajudar agradeço!

Logan

Bem,

pelo que eu vi você não seguiu minhas recomendações, utilizando o contexto de servlet para redirecionar sempre você terá que iniciar sua URL com / no seu caso aí o container reconheceu somente o que estava após a /.

Quanto ao acesso ao servlet, você deve colocar o caminho que você mapeou o seu servlet no arquivo web.xml

:okok:

Eu consegui solucionar o problema de Redirecionamento de página do Servlet para o JSP, eu peguei um exmplo simples e reestruturei todo o meu diretório de arquivo e funcionou, mas quando usei para o meu exemplo que está postado acima ele da o seguinte erro quando clico em “OK”: O Método POST não é suportado por essa URL.

Alguém pode me dizer como solucionar esse problema?

Obrigado

Logan

Logan,

bem este problema já aconteceu comigo, mas não lembro direito o que eu fiz para solucionar, na verdade o teu jsp ou o local que está redirecionando que não está suportando o método POST. Tente ao invés de utilizar getServletContext utilize request.

até.

Moderadores,

tive problemas com meu navegador e este post foi duplicado. Remova ele se for possível.

ok?