Gerador de código JSP baseado em projeto de banco de...

42
Gerador de código JSP baseado em projeto de banco de dados MySQL Juliane Menin Orientanda Prof. Alexander Roberto Valdameri Orientador

Transcript of Gerador de código JSP baseado em projeto de banco de...

Page 1: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Gerador de código JSP baseado em projeto de banco de dados MySQL

Juliane MeninOrientanda

Prof. Alexander Roberto ValdameriOrientador

Page 2: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Roteiro

� Introdução e Objetivos� Fundamentação Teórica� Especificação� Implementação� Apresentação da Ferramenta� Conclusão� Extensões

Page 3: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Introdução

� JSP� Servlets� Diferenças JSP e Servlets� Banco de Dados MySQL� Geração de Código� Ferramentas Geração de Código

Introdução e Objetivos

Page 4: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Objetivos

� Desenvolver uma ferramenta para a geração de código para tecnologia JSP, a partir das definições encontradas em uma base de dados MySQL.

Introdução e Objetivos

Page 5: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Motivação

� Auxiliar os programadores � Diminuir a necessidade de programação� Evitar código inconsistente

Introdução e Objetivos

Page 6: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

JSP

� Java Server Pages� Tecnologia baseada em Java � Simplifica o desenvolvimento de páginas

web� É compilado na forma de um servlet� Separa a programação da lógica� Reutilização

Fundamentação Teórica

Page 7: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Funcionamento do JSP Fundamentação Teórica

Gera Resposta

Envia Resposta

Recebe solicitação

Servlet JSP carregado?

Servlet JSP atual?

CompilaServlet JSP

CarregaServlet

Não

Sim

Servlet compilador de página

Servidor de HTTP

Servlet de página JSP

Gera fonte de servlet JSP

Analisa JSP

Não

Sim

Container JSP

Page 8: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Servlets

� Estende as funcionalidades do servidor� São independentes de plataforma� Camada intermediária entre Cliente HTTP

e servidor Web� Possui três métodos : init, destroy, service

Fundamentação Teórica

Page 9: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

JSP X ServletsFundamentação Teórica

Servlets JSP

JAVA HTML

O HTML é escrito no código Java

HTML Java

O código Java é escrito no HTML

Page 10: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

JSP X ServletsFundamentação Teórica

Servlet = Java-Fácil de entender-Controla o sistema-Classes pequenas-Lógica pura

Servlet = Java + HTML-HTML atrapalha o código Java-Difícil de entender HTML-Fácil de entender Java-Lógica com visualização-Classes gigantes

JSP = HTML-Fácil de entender HTML-Controla a visualização-Visualização pura

JSP = HTML + Java-Código Java atrapalha o HTML-Visualização com lógica-Fácil de entender HTML-Difícil de entender Java

Programador Programador

Designer Designer

Page 11: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Banco de Dados MySQL

� Open Source� Fácil de usar� Baixo custo� Suporta diferentes tipos de tabelas

Fundamentação Teórica

Page 12: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Tipos de tabelas MySQLFundamentação Teórica

Possui integridade referencial;

Tipo de tabela transacional;

Armazenamentos de dados em tablespace;Requer mais espaço em memória;

INNODB

Tabela padrão do MySQL;

Melhor desempenho para leituraNão possui integridade referencial;

Permite o controle de transações;

Há limite de tamanhos;

São tabelas rápidas;

MyISAM

CaracterísticasTabela

Page 13: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Tipos de tabelas MySQLFundamentação Teórica

Fácil de manipular o controle de transações;

Recuperação automática de dados; BDB

São armazenadas em memória;São rápidas;

Conteúdo volátil;

Ideal para tabelas que são consultadas com muita freqüência;

HEAP

Divisão de tabelas grandes em tabelas pequenas;

Coleção de tabelas MyISAM idênticas;

MERGE

CaracterísticasTabela

Page 14: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Geração de Código

� Qualidade� Consistência� Decisões não previstas� Mais tempo para o projeto

Fundamentação Teórica

O Código gerado não possui erro de sintaxeO código gerado é consistente no projeto

Apenas gerar os templates e executar o gerador

Não consome muito tempo com tarefas repetitivas

Page 15: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Ferramentas para Gerar Código

� DBDesigner� CodeCharge� AspSys

Fundamentação Teórica

Integra Criação, Modelagem, desenvolvimento e manutenção dos dadosGera código para PHPGera código para várias linguagensPermite conexão com vários bancosGera interface personalizada

Gera código para as rotinas de cadastros em ASPFoi desenvolvida em ASP

Page 16: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Visão Geral da FerramentaEspecificação

Desenvolvedor

a) Especifica a base de dados b) A Ferramenta faz a leitura da estrutura das tabelas.

c)Configuração das páginas d)Geração das páginas JSP

Desenvolvedor

Page 17: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Casos de usoEspecificação

ud Diagrama de Casos de Uso

Desenvolvedor

Selecionar Base de Dados

Configurar Páginas

Visualizar PáginasGerar o código

Criar projeto

Page 18: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Diagrama de classes Especificação

cd Diagrama de Classes

Projeto

- ds_projeto: char- diretorio: char- titulo: char- autor: char- Data: char- host: char- usuario: char- baseDados: char- senha: char

Visao

- nm_visao: char- ordem_tabela: char- ordem_campo: char- ordemTipo: char- condicao: char- l inhaPorPagina: int- titRel: char- posFormX: int- posFormY: int- largForm: int- altForm: int- ResTab: char- ResCampo: char- ResOp: char- ResDesc: char

Tabelas

- tabela: char- tipo: char

ChaveStrangeira

- tab_ref: char- campo_ref: char- campo: char

Campos

- nm_campo: char- tipo: char- tamanho: int- nulo: boolean- chave: boolean- extra: boolean- caption: char

Visao_tabela

- ehPrincipal: boolean

Grupo

- grupo: char- posLinha: int- posColuna: int- popPup: boolean

v isTabCamp

- tituloForm: char- visivel: boolean- caption: char- tamanho: int- tipo: char- tituloRel: char

Restricao

- campo: char- tabela: char- condicao: char- valor: char

1..*1

0..*

0

1 1..*

1

1..*

1

1..*

1

1..*

1 1..*

1..*1

Page 19: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Técnicas e Ferramentas

� Java JDSK 1.5 � Eclipse 3.0� MySQL� JBoss

Implementação

Page 20: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ArquiteturaImplementação

Conexão com o banco de dados

Ferramenta

Configurações GeraisDefinição da Integridade Referencial

Definindo páginas de erro

Leitura da Estrutura do banco de dados

Gerenciando Visões

Gerenciando GruposGerenciando Formulários

Gerenciando Relatórios

Gerando as páginas

Novo Projeto

Abrir Projeto

Page 21: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Conexão com o Banco Implementação

Page 22: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

private void carregaTabs(){ //lê todas as tabelas da baseResultSet rsTab;try {

rsTab = this .cn.SQLexecuteQuery ( "show table status" );if (rsTab != null ){

while (rsTab.next()){Tabela tab = criaTabelas(rsTab);tabelas.add(tab);

}}}catch ( Exception e){ System .err.println (e.getMessage());

}

private void carregaEstrutura(){ //lê a estrutura dos campos da tabelaResultSet rsCamp;

try {Iterator i = tabelas.iterator();

while ( i.hasNext()) {Tabela tp = (Tabela) i.next();

rsCamp = this .cn.SQLexecuteQuery ( "Desc " +tp.getTabela());if (rsCamp != null )

while (rsCamp.next()){Campos camp = criaCampos(rsCamp,tp.getTabela().toSt ring());

campos.add(camp);}

}}catch ( SQLException e) { System .err.println (e.getMessage());

}

Implementação

Leitura da Estrutura das Tabelas

Page 23: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

private Campos criaCampos( ResultSet rsCamp, String tabela){ //instancia os campos {try {

Campos camp = new Campos();

camp.setTabela(tabela);camp.setCampo(rsCamp.getString(1));String tipo = rsCamp.getString(2);//verificifa o tipo do campocamp.setTipo(verificaTipo(tipo));//verifica o tamanhocamp.setTamanho(verificaTam(tipo));//verifica se o campo é nulocamp.setNulo(verificaNulo(rsCamp.getString(3)));//verifica se é chavecamp.setChave(verificaChave(rsCamp.getString(4)));

//verifica se é auto_incrementocamp.setIncremento(verificaIncremento(rsCamp.getStr ing(6)));

return camp;} catch ( Exception e){ System .out.print(e.getMessage()); return null ;}}

Implementação

Leitura da Estrutura das Tabelas

Page 24: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ImplementaçãoConfigurações Gerais

Definindo Integridade

Page 25: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ImplementaçãoGerenciando visão

Criando uma visão

Page 26: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ImplementaçãoGerenciando um grupo

Criando um grupo

Page 27: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ImplementaçãoConfigurando Relatório

Configurando Formulários

Page 28: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Regras para o Formulário

� Se tamanho do campo < 80 = caixa de texto, senão textArea;

� Se campo auto-incremento então campo desabilitado;

� Se campo chave-primária e não visível então oculto

� Se campo chave estrangeira então selected

Implementação

Page 29: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

ImplementaçãoVisualizando os arquivos

Alterando o código

Page 30: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Operacionalidade

Estudo de caso

FK_CLIENTE_PEDIDO

FK_CIDADE_CID_EST FK_ESTADO_CID_EST

FK_CLIENTE_CID_EST

FK_PEDIDO_ITENS

FK_PRODUTO_ITENS

Cidade

cd_cidadedesc_cidade

inttext

<pk>

Estado

cd_estadodesc_estado

inttext

<pk>

Produto

cd_produtodesc_produto

inttext

<pk>

Pedido

cd_pedidocd_cl ientedt_venda

intintdate

<pk><fk>

Cliente

cd_cl ientecd_cidadecd_estadonm_clienteruabairro

intintinttexttexttext

<pk><fk><fk>

Cidade_Estado

cd_cidadecd_estado

intint

<pk,fk1><pk,fk2>

Itens_pedido

cd_pedidocd_produtoqtdvalor

intintintfloat

<pk,fk1><pk,fk2>

Page 31: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Operacionalidade

Página Inicial do Sistema

Page 32: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Operacionalidade

Páginas de Apresentação Servidor Web

Estrutura das páginas geradas

Banco de Dados

ControladorRequest

Response

Acessa o Banco de dados

Retorna os dados

Page 33: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Operacionalidade

public class Controlador extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServle tResponse response)

throws ServletException, java.io.IOException {

//decodifica a ação que é para executar de acordo co m URL

String acao = decodificaAcao(request);

String proximaPagina = "" ;

boolean achouPagina = false ; //controle para verificar se a página foi encontrad a

if (acao.equals( "abrir_Cliente" )){

proximaPagina = abrirCliente(request,response);

achouPagina = true ;

}

if (!achouPagina)

proximaPagina = "/pageNaoSalva.htm" ;

getServletContext().getRequestDispatcher(proximaPag ina).forward(request, response);

} //Decodifica a ação selecionada

protected String decodificaAcao(HttpServletRequest request) {

String caminho = request.getRequestURI();

String acao = caminho.substring(caminho.lastIndexOf( '/' )+1, caminho.lastIndexOf( ".do" ));

return acao;}

//Necessário para extender o HttpServlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, java.io. IOException { processRequest(request, response); }

protected void doPost(HttpServletRequest request, HttpServletRespons e response) throwsServletException, java.io.IOException { processRequest(request, response); }

Código do Controlador

Page 34: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Implementação

protected String abrirCliente(HttpServletRequest request,ttpSer vletResponse response) throwsServletException, java.io.IOException{

String paginaErro= "/erro.htm" ;

String paginaSucesso= "/cliente_relacao.jsp" ;

String proximaPagina = paginaErro;

try { ...

ArrayList cidades = Conn.getListaCliente(param, limitePorPagi na);

request.getSession().setAttribute( "listaCliente" ,clientes);

proximaPagina = paginaSucesso;

} catch ( Exception e){ System. out.print(e.toString());}

return proximaPagina; }

Código do Controlador

public static ArrayList getListaCliente(int inicio, int qtd){

try { String sql = "Select CLIENTE.NM_CLIENTE as CLIENTE, CLIENTE.RUA, CLIENTE.BAIRRO, CIDADE.DESC_CIDADE as CIDADE, ESTADO.DESC_ESTADO as ESTADO from CLIENTE, CIDADE, ESTADO where CLIENTE.CD_CIDADE = CIDADE.CD_CIDADE and CLIENTE.CD_ ESTADO = ESTADO.CD_ESTADO order byCLIENTE.CD_CLIENTE asc LIMIT " +inicio+ "," +qtd;

connecta();

rs = st.executeQuery(sql);

ArrayList cliente = new ArrayList();

while (rs.next()){

Cliente umCliente = criaCliente(rs);

cliente.add(umCliente); }

return cliente; }

catch ( Exception e ){ System .out.println(e.getMessage()); return null; } }

Page 35: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Implementação

<% ArrayList clientes = ( ArrayList )session.getAttribute( "listaCliente" );

...

<!-- Dados da Tabela -->

<% for ( int i = 0; i < clientes.size(); i++){

Cliente cliente = (Cliente)clientes.get(i);

if ((i % 2) == 0)

out.println( "<TR class='cor1'>" );

else

out.println( "<TR class='cor2'>" );

out.println( "<TD id=dados>" +cliente.getNm_cliente()+ "</TD>" );

out.println( "<TD id=dados>" +cliente.getDesc_cidade()+ "</TD>" );

out.println( "<TD id=dados>" +cliente.getDesc_estado()+ "</TD>" );

out.println( "<TD id=dados WIDTH='3%' ALIGN=CENTER><A HREF=altera_cliente.do?cd=" +cliente.getCd_cliente()+ "><IMG SRC='img/editar.png' BORDER=0 ALT='Editar Cliente'></IMG></A></TD>" );

out.println( "<TD id=dados WIDTH='3%' ALIGN=CENTER><A HREF=javascript:excluir(" +cliente.getCd_cliente()+ ")><IMG SRC='img/excluir.png' BORDER=0 ALT='Excluir Cliente'></IMG></A></TD>" );

out.println ("</TR>" );

} %>

Código da Página de Relatório

Page 36: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Implementação

Apresentação do Relatório

Page 37: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Apresentação do FormulárioFundamentação Teórica

Page 38: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Conclusões

O objetivo foi alcançado gerando código para as rotinas básicas de um sistema como:

� Inclusão� Exclusão� Alteração� Pesquisas� Relatórios

Nos relatórios é permitida a customização, como exemplo, definir atributos de ordenação e paginação de registros.

Conclusões

Page 39: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Conclusões

� A utilização da IDE eclipse mostrou-se adequada a construção e depuração do software desenvolvido;

� Execução multiplataforma.

Conclusões

Page 40: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Extensões

� permitir a utilização de outros bancos de dados como PostGree, SQLServer ou Oracle;

� permitir ao desenvolvedor a definição de seu próprio layout do aplicativo, através de folhas de estilos;

� permitir a geração de relatórios mais complexos baseados nas funções de grupos.

Extensões

Page 41: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Relevância

Este trabalho foi muito importante para mim através dele :

� Aumentei o meu conhecimento em Java, que é uma linguagem poderosa;

� Aprendi a desenvolver interfaces em Java;� Aprendi JSP, que é um tecnologia

baseada em Java;

Relevância

Page 42: Gerador de código JSP baseado em projeto de banco de ...campeche.inf.furb.br/tccs/2005-I/2005-1julianemeninap.pdf · protected void doGet(HttpServletRequest request, HttpServletResponse

Gerador de código JSP baseado em projeto de banco de dados MySQL

Juliane MeninOrientanda

Prof. Alexander Roberto ValdameriOrientador