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:
<% String cod_questao = (String) req.getAttribute("codigo");
out.println(cod_questao);
%>
O objeto HttpRequest implícito no JSP é request e não req, então tente:
<% String cod_questao = (String) request.getAttribute("codigo");
out.println(cod_questao);
%>
ou
<%=request.getAttribute("codigo")%>
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:
<% String cod_questao = (String) req.getAttribute("codigo");
out.println(cod_questao);
%>
O objeto HttpRequest implícito no JSP é request e não req, então tente:
<% String cod_questao = (String) request.getAttribute("codigo");
out.println(cod_questao);
%>
ou
<%=request.getAttribute("codigo")%>
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:
<jsp:useBean id="clientKey" type="br.teste.Cliente" scope="request"/>
Nome: <jsp:getProperty name="clientKey" property="nome" /> <br>
Sobrenome: <jsp:getProperty name="clientKey" property="sobrenome" />
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:
<jsp:useBean id="clientKey" type="br.teste.Cliente" scope="request"/>
Nome: <jsp:getProperty name="clientKey" property="nome" /> <br>
Sobrenome: <jsp:getProperty name="clientKey" property="sobrenome" />
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:
<jsp:useBean id="clientKey" type="br.teste.Cliente" scope="request"/>
Nome: <jsp:getProperty name="clientKey" property="nome" /> <br>
Sobrenome: <jsp:getProperty name="clientKey" property="sobrenome" />
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