JSP - response.sendRedirect

Pessoal estou com um probleminha acho que nao consigo resolver.

Bem estou criando uma jsp (“forum.jsp”) que contem outro jsp (“forum_lista.jsp”) via jsp:include e que retorna um lista de foruns, mas quando esta lista apresentar algum erro ela deve ser redirecionada para uma pagina que printa o erro (“erro.jsp”).
A jsp que retorna a lista (“forum_lista.jsp”) chama o metodo lista() na classe Forum, e caso haja erro joga a exception Cexception.
A Cexception tem o metodo handle que da o response.sendRedirect("/site/erro.jsp");


Quando executo apenas a a jsp “forum_lista.jsp” o programa faz o redirecionamento perfeitamente,
Mas quando chamo a uso “forum.jsp” o sendRedirect simplesmente nao funciona, nao redireciona nao faz nada, quando chamo o handle deveria redirecionar toda a url para a nova pagina “erro.jsp”
Nao sei se pelo fato de eu utilizar o jsp:include e nao executar o erro na pagina principal.

Meu codigo esta da seguindo forma:

forum.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="com.Forum" %>
<html>
  <head>
    <title>forum lista</title>
  </head>
  <body>
     <jsp:include page="menu.jsp"/>
     <jsp:include page="forum_lista.jsp"/>
  </body>
</html>

forum_lista.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="com.Forum" %>
<%
    String list = "";
    try{
    	list = Forum.listaTotal();
    }catch(Cexception e){
    	e.handle (request,response);
    }
%>
<%= list  %>

RForumHtml.listaTotal():

	public String listaTotal() throws listaTotal{
		String vHTML = "<div>";
                arrayForum = new ConcurrentHashMap<Integer,RForum>();            
                ForumDAO dao = new ForumDAO();
    	        Iterator iterator2 = arrayForum.keySet().iterator();
                int i = 0;
    	        while (iterator2.hasNext()) {
                   i = i+1;
                   vHTML = vHTML + arrayForum.get(i).getTitulo()+"<BR>";
                }
                vHTML = vHTML + "</div>";
                return vHTML;
	}

Cexception.handle

	public Cexception(String message) {
                super(message);
	}

	public void handleExecption (HttpServletRequest request, HttpServletResponse response, String pagina) {
		String message = this.getMessage();
		if (null == message || "".equals(message)){
			message = "There is no error menssage";
		}
                
		try {
		    RSession.setSession(request, "erro", message);
                    String url = response.encodeURL("/site/erro.jsp");
                    response.sendRedirect(url);
		} catch (IOException e) {
		    	RSession.setSession(request,"erro2",e.getMessage());
			//} catch (ServletException e) {
		    //	RSession.setSession(request,"erro2",e.getMessage());
		}
	}

Eu realmente preciso de ajuda, se puderem me ajudar eu ficaria totalmente grato.

O motivo é o seguinte:

Depois que você começa a mandar algum dado para o cliente (ou seja, um pedaço da página), não pode mais enviar um REDIRECT.
Quando chama a forum_lista.jsp, ela tenta executar a lógica, se deu pau envia o redirect antes de qualquer saída de dados, por isso funciona.
Quando chama a forum.jsp, ela envia o início do HTML, depois envia o menu, para só depois entrar com a execução da lógica. Se der pau é tarde demais para enviar redirect.

Agora que você sabe porque acontece, tente reorganizar seu aplicativo de forma a resolver o problema.
Se depois de pensar bastante não chegar a uma solução pode postar que o pessoal ajuda com algumas idéias.

[quote=gomesrod]O motivo é o seguinte:

Depois que você começa a mandar algum dado para o cliente (ou seja, um pedaço da página), não pode mais enviar um REDIRECT.
Quando chama a forum_lista.jsp, ela tenta executar a lógica, se deu pau envia o redirect antes de qualquer saída de dados, por isso funciona.
Quando chama a forum.jsp, ela envia o início do HTML, depois envia o menu, para só depois entrar com a execução da lógica. Se der pau é tarde demais para enviar redirect.

Agora que você sabe porque acontece, tente reorganizar seu aplicativo de forma a resolver o problema.
Se depois de pensar bastante não chegar a uma solução pode postar que o pessoal ajuda com algumas idéias.[/quote]

Nao sabia deste detalhe.
Muito obrigado pela dica!

Mas sera que existe algum jeito de unir paginas JSP e que elas sejam enviada apenas depois que todas tenham sido processadas, assim evitando este erro ?

Se você já tiver alguma intimidade com jsp e servlets, dê uma melhorada no seu aplicativo estudando o seguinte:
-> MVC
-> Taglibs

Se ainda estiver aprendendo, tente bolar sua própria solução envolvendo os seguintes passos:
-> Mova esta lógica de pesquisa dos registros para outra classe.
-> Crie um servlet para chamar esta pesquisa. Se ele conseguir, faz forward para a página de exibição de resultados, senão para a página de erros. Se não estiver familiarizado com Servlets ainda, pode ser uma JSP sem nenhum html, apenas com <% %> e o código no meio. De qualquer maneira, vai precisar dar uma estudada em (1) Armazenamento de objetos no escopo de request e (2) Forward - como fazer e qual a diferença em relação ao Redirect.

[quote=gomesrod]Se você já tiver alguma intimidade com jsp e servlets, dê uma melhorada no seu aplicativo estudando o seguinte:
-> MVC
-> Taglibs

Se ainda estiver aprendendo, tente bolar sua própria solução envolvendo os seguintes passos:
-> Mova esta lógica de pesquisa dos registros para outra classe.
-> Crie um servlet para chamar esta pesquisa. Se ele conseguir, faz forward para a página de exibição de resultados, senão para a página de erros. Se não estiver familiarizado com Servlets ainda, pode ser uma JSP sem nenhum html, apenas com <% %> e o código no meio. De qualquer maneira, vai precisar dar uma estudada em (1) Armazenamento de objetos no escopo de request e (2) Forward - como fazer e qual a diferença em relação ao Redirect.
[/quote]

Valeu gomesrod, vou dar uma uma estudada em MVC e Taglibs.