Servelt -> forward x include

1 resposta
B

Tenho um servlet que faz o controle da minha aplicação. A função dele é simples: verifica um HashMap e executar uma classe específica para aquela determinada jsp. Meu problema é que no código atual eu não consigo visualizar as páginas no netscap, por exemplo, mas no ie vai tudo muito bem... Depois de umas tentativas percebi que usando o dispacher.forward ao invés do include a coisa funcionava em algumas circunstâncias, noutras disparava o erro "org.apache.jasper.JasperException: Stream closed" . Alguém pode me socorrer?

o Código:

protected void service(HttpServletRequest req, HttpServletResponse res)	    
		throws ServletException, IOException {
		
		try{
			String id = null;
			Worker  w;     
			RequestDispatcher dis;
				
			id = req.getParameter("id");     
			   
			if(workersTeam.containsKey(id)){  
				w = (Worker)workersTeam.get(id);
				dis = req.getRequestDispatcher(w.getInfo().getJspPage());
			}else{
				w = (Worker)workersTeam.get("index");
				dis = req.getRequestDispatcher(w.getInfo().getJspPage());	
			}
			
			w.execute(req, res);
			
			dis.forward(req, res);
			
		}catch(Exception ex){
			logger.severe(ex.getMessage());
		}
	}

Gustavo Guilherme BacK

1 Resposta

Bani

No forward você está passando o processamento permanentemente para o outro servlet, enquanto no include após o processamento ele volta para o Servlet que o chamou para dar continuidade no processo.
Colocando o include ao invés do forward pode ser que esteja dando algum erro porque quando o processamento volta ele tenta colocar alguma coisa a mais na response sendo que ela já foi enviada para o browser, estando em um estado inválido (apesar de que a mensagem dessa Exception costuma ser outra, mas talvez seja algo parecido).
Esse negócio de funcionar no IE e não no Netscape é bastante estranho, pois em ambos os casos todo o processamento é feito no lado do servidor e o cliente apenas recebe o HTML pronto (não é como o sendRedirect, que deixa para o browser fazer um redirecionamento). Talvez fosse melhor voce tentar entender a causa desse problema ao invés de substituir forward por include caso o correto seja o forward.

Criado 11 de agosto de 2003
Ultima resposta 11 de ago. de 2003
Respostas 1
Participantes 2