Eu tinha uma aplicação em Swing na qual montava uma Jtable. Eram 4 classes na qual uma continha os metedos da minha Jtable, outra era a minha classe DAO onde continha todas as informações do banco e onde populava minha List, outra continha os campos da minha tabela e por ultima a minha classe principal onde construía minha tabela e exibia em um JPanel.
Bom, agora eu estou passando isso para Web. Quero fazer em JSP e servlet. No meu projeto, minha CLASSE DAO está assim:
public class DAO{
static ResultSet rs;
static Statement MeuState;
static String SQL;
public DAO(){
}
public static List<Campos> listarClientes() {
List<Campos> lista = new ArrayList<Campos>();
try {
String url = "url de conexão";
Class.forName("com.intersys.jdbc.CacheDriver");
Connection conn = DriverManager.getConnection(url);
MeuState = conn.createStatement();
SQL = "select campo1, " +//1
"campo2," +//2
"campo3," +//3
"campo4," +//4
"FROM Tabela";
rs = MeuState.executeQuery(SQL);
while (rs.next()){
lista.add(geraContato(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)))
}
}
}
catch (SQLException e) {
e.printStackTrace();
}
catch (ClassNotFoundException ex) {
System.out.println(ex.getMessage());
}
return lista;
}
public static Campos geraContato(String a1, String a2, String a3, String a4) {
Campos c = new Campos();
c.setProduto(a1);
c.setBitola(a2);
c.setArmazem(a3);
c.setEstoque(a4);
return c;
}
}
e minha classe aonde contém os CAMPOS da tabela é:
public class Campos implements Serializable {
private static final long serialVersionUID = 1L;
private String Produto;
private String Bitola;
private String Armazem;
private String Estoque;
public String getProduto() {
return Produto;
}
public void setProduto(String produto) {
this.Produto = produto;
}
public String getBitola() {
return Bitola;
}
public void setBitola(String bitola) {
this.Bitola = bitola;
}
public String getArmazem() {
return Armazem;
}
public void setArmazem(String Armazem) {
this.Armazem = Armazem;
}
public String getEstoque() {
return Estoque;
}
public void setEstoque(String estoque) {
this.Estoque = estoque;
}
}
Bom, a minha dúvida é como eu faço pra chamar a minha consulta da minha classe DAO na minha Servlet e distribuí-la em uma table html simples ??
Você deve chamar normalmente o método da classe DAO, populando um ArrayList ou um Vector ou qualquer tipo que permita coleção de dados e, colocar isto na sessão, por exemplo.
Aí você direciona para uma jsp e ali implementa um for que percorre a coleção e mostra os dados
Henrique, eu entendi os seus exemplos. Mas ele nao me retornou a minha lista. O projeto nao deu erro nem nda. MAs a minha tabela está vindo vazia, só com o cabeçalho. Alguma idéia?
drsmachado, como eu coloco um arraylist na sessão e depois chamo isso no jsp? Fica mais rápido do que chamar direto no jsp como o Henrique exemplificou?
marujorafao…
No exemplo abaixo mostra como vc pega a lista na jsp. Mas vc tem que usar as tags jstl.
So que nesse exemplo não é na sessao, mas se vc quiser colocar na sessao vc so muda essas linha:
request.setAttribute(“lista_para_tabela”, suaLista);
para
request.getSession(true).setAttribute(“lista_para_tabela”, suaLista);
e na jsp vc muda:
<c:forEach var=“objeto_lista” items="${requestScope.lista_para_tabela}">
para
ENtão Henrique, agora está funcionando. Havia um erro juvenil no meu html mesmo e por isso não mostrava os dados ¬¬
Então, em relação a sessão e esse código que vc citou:
Eu coloco ele aonde? Na minha classe DAO ? Ou eu crio uma servlet pra chamar a minha lista, jogar na sessão e então passar pro jsp?
E como eu faria pra resgatar a sessão no jsp? Pq eu percebi que pela Servlet ele vai mais rapido que pelo jsp. Mas nao da pra jogar o html la na servlet neh… fica muito confuso pra dar manutenção depois… =/
Ireny, obrigado pela ajuda. Eu nao vou ter tempo de estudar jstl. Vou fazer do jeito basico mesmo com jsp e servlet mesmo. Mas de qualquer jeito, muito obrigado pela atençao!
e pra falar a verdade eu nao conheço outra forma de fazer isso no jsp e servlet, quando eu tava estudando e precisei fazer isso me falaram q eu teria q usar jstl
vo te passar um link de onde vc pode baixar as bibliotecas, é rapidinho
Realmente com o JSTL se tem um aumento significativo no desenvolvimento, com suas Tag’s, mas se for trabalhar com JSTL ja compensa começar a estudar também JSF
então vc chama a Servlet que chama o código da sessão (faz a operação com sua DAO, joga na sessão) e em seguida dispara pra JSP que vai disponibilizar os dados.
pense em uma arquitetura MVC,
Controler - Servlet (acessa a DAO e envia para a JSP)
Model - DAO (faz acesso ao banco de dados )
Visao - JSP (que mostra os dados)
Dúvida 1: Como eu faço para que minha servlet chame o jsp para exibição dos dados?
Dúvida 2: Na minha jsp, como eu recupero os dados da minha sessão para montar um for? Seria assim:
List<Campos> listaCampos = (List<Campos>)request.getSession().getAttribute("dados");
for (Campos campo : listaCampos) {
out.println("<td align='center' width=''> " + campo.getProduto() + "</td>");
}
Não teria um jeito de montar tudo na Servlet e então o jsp só exibir, deixando toda a sobrecarga pro servidor? Senão, isso no cliente vai ficar pesado. Tenho uma tabela com 42 colunas e mais de 500 linhas ¬¬
Entendi cara. Eh, acho que eu vou precisar usar jstl mesmo. Pq eu estou com um problema de desempenho. Vc poderia entao postar um exemplo pra mim? No caos, o meu trabalho soh iria aumentar em relação as tagslib que ue teria que colocar?
Apesar der que eu irei precisar manipular essa tabela, talvez até mesmo usando ajax. Tipo, se muda algo na linha (x1,y1) a coluna Y vai mudar de cor, ou de valro, ou vai fazer um novo calculo baseado nas informaçoes que ja constam… enfim. O jstl seria mesm oa melhor solução pra isso?