Jsp e servlets

Olá pessoal, a alguns dias um amigo do fórum me deu algumas dicas para que eu pudesse passar meus dados do Servlet e exibir em um pág JSP, porém estou obtendo o seguinte erro:

HTTP Status 500 -


type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.IllegalStateException
org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:352)
Assunto_QuestServlet.doPost(Assunto_QuestServlet.java:91)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.


Meu servlet:

.
.
.
try{
stm = con.createStatement();

           sql = "SELECT * FROM QUESTAO, ALTERNATIVA" +
                  " WHERE assunto='" + assunto + "'" + 
                  " AND QUESTAO.cod_questao = ALTERNATIVA.cod_questao";
                
           ResultSet rs = stm.executeQuery(sql);
           
            while(rs.next()){
           
            cod_questao = rs.getString("cod_questao");
            req.setAttribute("codigo",cod_questao);
            res.sendRedirect("/Resolv_Quest.jsp");

.
.
.

meu JSP:

<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<html>
<head><title>JSP Page</title></head>
<body>

<%-- <jsp:useBean id=“beanInstanceName” scope=“session” class=“beanPackage.BeanClassName” /> --%>
<%-- <jsp:getProperty name=“beanInstanceName” property=“propertyName” /> --%>

<% String cod_questao = (String) req.getAttribute(“codigo”);
out.println(cod_questao);
%>

<%–
Resolucao mc = (Resolucao);
session.getAttribute(“cod_questao”);
–%>

</body>
</html>

minha estrutura de pastas:

C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.0\webapps\myApp1–aqui colo meus JSPs minha pasta WEB_INF e META_INF

C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.0\webapps\myApp1\WEB-INF\classes–aqui coloco meus servlets

Aguardo alguma dica…

T+

Sta Leisley

Leisley,

Vc esta fazendo um:

 res.sendRedirect("/Resolv_Quest.jsp"); 

durante a interação no result set.

Talvez seja isto, pois quando vc faz um sendRedirect o servlet retorna o controle para o browser para então fazer o novo request. E neste caminho já ocorreu um response.flush() e se vc tentar chamar qualquer coisa após o flush obterá um IllegalStateException.

E outra coisa é no JSP:

 &lt;% String cod_questao = (String) req.getAttribute("codigo");
out.println(cod_questao);
%&gt;

O objeto HttpRequest implícito no JSP é request e não req, então tente:

 &lt;% String cod_questao = (String) request.getAttribute("codigo");
out.println(cod_questao);
%&gt;

ou 
&lt;%=request.getAttribute("codigo")%&gt;

Espero que lhe ajude!

Adilson Chicoria Jardim

[quote=chicoria]Leisley,

Vc esta fazendo um:

 res.sendRedirect("/Resolv_Quest.jsp"); 

durante a interação no result set.

Talvez seja isto, pois quando vc faz um sendRedirect o servlet retorna o controle para o browser para então fazer o novo request. E neste caminho já ocorreu um response.flush() e se vc tentar chamar qualquer coisa após o flush obterá um IllegalStateException.

E outra coisa é no JSP:

 &lt;% String cod_questao = (String) req.getAttribute("codigo");
out.println(cod_questao);
%&gt;

O objeto HttpRequest implícito no JSP é request e não req, então tente:

 &lt;% String cod_questao = (String) request.getAttribute("codigo");
out.println(cod_questao);
%&gt;

ou 
&lt;%=request.getAttribute("codigo")%&gt;

Espero que lhe ajude!

Adilson Chicoria Jardim[/quote]

Então adilson, como então chamo miha página JSP para mandar os dados do servlet?
Ou tenho que fazer a referencia no JSP?

Leisley

Lesley,

A idéia seria vc criar classes para modelar sua aplicação, conhecido como java bean(pelos menos 1 construtor publico sem parâmetros, métodos get e set para seus atributos privados, e que implemente Serializable) exemplo:


package br.teste; 

public class Cliente implements Serializable
{
private String nome ;
private String sobrenome ;

public Cliente (){}

public String getNome(){ return this.nome;} 
public String getSobrenome(){ return this.sobrenome;} 

public void setNome(String nome ){ this.nome = nome ;} 
public void setSobrenome(String sobrenome ){ this.sobrenome = sobrenome ;}

}

Depois disso após resgatar os dados do banco vc cria uma instância de cliente, seta seus atributos e coloca o objeto no request, e depois redireciona para a página JSP sem retornar o controle para o browser.

Cliente cliente = new Cliente();
cliente.setNome("Adilson");
cliente.setSobrenome("Jardim");

request.setAttributte("clienteKey" , cliente );
 request.getRequestDispatcher("/apresentaCliente.jsp").forward(request, response) ;

Ai no JSP:

&lt;jsp:useBean id="clientKey" type="br.teste.Cliente"  scope="request"/&gt;
Nome: &lt;jsp:getProperty name="clientKey" property="nome" /&gt; <br>
Sobrenome: &lt;jsp:getProperty name="clientKey" property="sobrenome" /&gt;

E o resultado:


Nome: Adilson 
Sobrenome: Jardim

Começa por ai…

Adilson

[quote=chicoria]Lesley,

A idéia seria vc criar classes para modelar sua aplicação, conhecido como java bean(pelos menos 1 construtor publico sem parâmetros, métodos get e set para seus atributos privados, e que implemente Serializable) exemplo:


package br.teste; 

public class Cliente implements Serializable
{
private String nome ;
private String sobrenome ;

public Cliente (){}

public String getNome(){ return this.nome;} 
public String getSobrenome(){ return this.sobrenome;} 

public void setNome(String nome ){ this.nome = nome ;} 
public void setSobrenome(String sobrenome ){ this.sobrenome = sobrenome ;}

}

Depois disso após resgatar os dados do banco vc cria uma instância de cliente, seta seus atributos e coloca o objeto no request, e depois redireciona para a página JSP sem retornar o controle para o browser.

Cliente cliente = new Cliente();
cliente.setNome("Adilson");
cliente.setSobrenome("Jardim");

request.setAttributte("clienteKey" , cliente );
 request.getRequestDispatcher("/apresentaCliente.jsp").forward(request, response) ;

Ai no JSP:

&lt;jsp:useBean id="clientKey" type="br.teste.Cliente"  scope="request"/&gt;
Nome: &lt;jsp:getProperty name="clientKey" property="nome" /&gt; <br>
Sobrenome: &lt;jsp:getProperty name="clientKey" property="sobrenome" /&gt;

E o resultado:


Nome: Adilson 
Sobrenome: Jardim

Começa por ai…

Adilson[/quote]

Adilson, vou tentar fazer isso ai retorno se consegui obter sucesso ou não.
Mas desde já agradeço a atenção.

Abraços,

Leisley

[quote=Leisley][quote=chicoria]Lesley,

A idéia seria vc criar classes para modelar sua aplicação, conhecido como java bean(pelos menos 1 construtor publico sem parâmetros, métodos get e set para seus atributos privados, e que implemente Serializable) exemplo:


package br.teste; 

public class Cliente implements Serializable
{
private String nome ;
private String sobrenome ;

public Cliente (){}

public String getNome(){ return this.nome;} 
public String getSobrenome(){ return this.sobrenome;} 

public void setNome(String nome ){ this.nome = nome ;} 
public void setSobrenome(String sobrenome ){ this.sobrenome = sobrenome ;}

}

Depois disso após resgatar os dados do banco vc cria uma instância de cliente, seta seus atributos e coloca o objeto no request, e depois redireciona para a página JSP sem retornar o controle para o browser.

Cliente cliente = new Cliente();
cliente.setNome("Adilson");
cliente.setSobrenome("Jardim");

request.setAttributte("clienteKey" , cliente );
 request.getRequestDispatcher("/apresentaCliente.jsp").forward(request, response) ;

Ai no JSP:

&lt;jsp:useBean id="clientKey" type="br.teste.Cliente"  scope="request"/&gt;
Nome: &lt;jsp:getProperty name="clientKey" property="nome" /&gt; <br>
Sobrenome: &lt;jsp:getProperty name="clientKey" property="sobrenome" /&gt;

E o resultado:


Nome: Adilson 
Sobrenome: Jardim

Começa por ai…

Adilson[/quote]

Adilson, vou tentar fazer isso ai retorno se consegui obter sucesso ou não.
Mas desde já agradeço a atenção.

Abraços,

Leisley
[/quote]

Adilson estou implantando suas dicas, porém fiquei com dúvida no comando :
request.setAttributte(“clienteKey” , cliente );
Esse clienteKey quer dizer a chave primária da tabela cliente?

???

Aguardo retorno

não é apenas a id para se referenciar este bean pela pagina.

Obrigada pela dica, eu vi mesmo em uma apostila de java que era isso.
Bem, agora espero que eu consiga obter sucesso.

t+

Leisley