Utilizando o Framework SubMacro no Desenvolvimento de Aplicações Java para Internet Kleber Taffarel Novembro de 2008 [email protected] Palestrante Especialista em Engenharia de Websites pela UFMS/MS. Professor Universitário nas Disciplinas de de Redes de Computadores I, II e III e Linguagem Programação para Internet pela Faculdade Estácio de Sá; Desenvolvedor da Assetur, onde participa do desenvolvimento de sistemas usando ferramentas livres, além de administração de servidores de Rede e Internet Linux; Colaborador e usuário do software livre Java Framework SubMacro. Tópicos O que é o SubMacro? Funcionalidades Estrutura de uma aplicação padrão SubMacro SubMacroUtils Construindo uma Macro SubMacroUtils Gerando uma nova tela com a SubMacroUtils Considerações Finais O que é o SubMacro? O SubMacro é um framework que tem como objetivo implementar funcionalidades comuns a diversas aplicações, o que facilita e acelera o processo de desenvolvimento. Um dos objetivos do projeto SubMacro é fornecer uma alternativa para desenvolvimento de aplicações Web usando Servlets, sem a necessidade de JSPs ou frameworks (JSF, Struts, Spring, etc). Além disso busca-se oferecer uma maneira automatizada de geração de telas de cadastro e de filtro, em ambiente web e desktop. Funcionalidades Permitir que o desenvolvedor crie suas próprias tags, com formato <#NOMEMACRO>, que será substituída em tempo real por algum código gerado pela Servlet Armazena os HTMLs templates em RAM (desempenho quase idêntico a leitura de HTMLs estáticos) É composto pelas seguintes classes: Cmd, CmdImpl Mail.java HTMLProducer HTMLProducerRet PoolHtml.java Possui o módulo SubMacroUtils que, dentre outras coisas, permite fazer telas de cadastro (inserir/alterar/remover/consultar/imprimir) apenas escrevendo arquivos XML, sem precisar codificar NADA na Servlet Estrutura padrão SubMacro O SubMacro é composto pelas seguintes classes: Cmd CmdImpl São classes que permitem organizar a forma como a Servlet fará o papel de Controller Mail Responsável pelo acesso aos recursos de e-mail da API Java HttpServletSubMacro A servlet do desenvolvedor é criada como filha desta classe, e não da classe original HttpServlet HTMLProducer É responsável por processar as substituições de macros nos templates HTML HTMLProducerRet Implementar as suas macros específicas. PoolHtml Responsável por guardar em uma estrutura de dados dinâmica todos os arquivos template HTML Estrutura padrão SubMacro Macros Construindo uma Macro: As macros personalizadas pelo usuário devem ser implementadas na classe HTMLProducer da aplicação: public static final String[][] LISTATAGRETSubMacro= { // E = equalsIgnoreCase, S = startsWith {"E", "NOMEUSUARIOLOGADO"}, {"E", "COMBOVOLUNTARIO"}, // Combo Voluntário {"E", "EDITARHORARIO"}, // Editar Horario {"E", "LISTARUSUARIO"} // Listagem de Usuarios : } Construindo uma Macro :case 18: { //Listar Usuários String SessionID = ((HttpSession) getRequest().getAttribute("session")).getId(); String op = request.getParameter("op"); HTMLBuf = new StringBuffer(""); String CorAtual = Cor1; try { pstmtHTML = connLocal.prepareStatement("SELECT * FROM USUARIO"); rsHTML = pstmtHTML.executeQuery(); if (rsHTML.next()) { HTMLBuf.append("<tr bgcolor='" + Cor + "'>"); HTMLBuf.append("<td width='25%' class='tittab'>Login:</td>"); HTMLBuf.append("<td width='50%' class='tittab'>Nome:</td>"); HTMLBuf.append("<td width='25%' class='tittab'>E-mail:</td></tr>"); do { HTMLBuf.append("<tr bgcolor='" + CorAtual + "'>"); HTMLBuf.append("<td width='25%' class='negrito'>" + rsHTML.getString("Login") + "</td>"); HTMLBuf.append("<td width='50%' class='negrito'>" + rsHTML.getString("Nome") + "</td>"); HTMLBuf.append("<td width='25%' class='negrito'>" + rsHTML.getString("Email") + "</td></tr>"); CorAtual = GeralHTML.getCorAtual(Cor1, Cor2, CorAtual); } while (rsHTML.next()); rsHTML.close(); } } catch (Exception e) { e.printStackTrace(); HTMLBuf = new StringBuffer(""); } ReplaceText[0] = HTMLBuf.toString(); break; } Exemplo de Tela : SubMacroUtils A ferramenta SubMacroUtils é um módulo do SubMacro com diversos recursos para desenvolvimento de aplicações web e desktop. Seu principal recurso é a geração de telas de cadastro (inserção, alteração, remoção, consulta, impressão) baseada em templates XML. Para utilizar o SubMacroUtils, é necessário disponibilizar para a aplicação Web as mesmas bibliotecas requisitadas pelo SubMacro, pois o SubMacroUtils é um módulo baseado no SubMacro SubMacroUtils Permite fazer telas de cadastro (inserir/alterar/remover/consultar/imprimir) apenas escrevendo arquivos XML, sem precisar codificar NADA na Servlet Criptografia usando algoritmo MD5; Cálculos aritméticos com datas Esquema de mascaras generico em JavaScript; Chamadas de componentes para relatórios JasperReports (em formato HTML, PDF, XLS, CVS, TXT) Consistencia de campos obrigatorios em JavaScript; Catálogo de mensagens de erros comuns para aplicações; Formatação de datas, horas e números reais; Classes utilitárias Geral.java e GeralHTML.java, com alguns métodos genéricos; Inclusão de código SQL em arquivo de properties externo, para facilitar manutenção; Controle de autenticação de usuários e, em seguida, checagem do nível de acesso do usuário autenticado às opções de menu do sistema; Estrutura padrão SubMacroUtils Abaixo algumas das classes que compoem o SubMacroUtils: Boleto,Boleto Baixa Classes responsáveis pela manipulação de boletos bancários, com operações como impressão e baixa de boletos bancários Cripto MD5 responsável pela criptografia de strings utilizando o padrão MD5, muito útil para garantir segurança no envio de senhas pela rede HTMLProducerErro classe filha de HTMLProducer, com macros pré-definidas para exibição de mensagens de erro HttpProducerTab classe filha de HTMLProducerRet do pacote SubMacro. Deve ser extendida pelo desenvolvedor para implementar as suas macros específicas, integrando assim a função de macro-substituição oferecida pelo SubMacro HttpServletTab principal classe do módulo e subclasse de SubMacro.HttpServletSubMacro. O servlet principal da aplicação deve ser extendido de HttpServletTab. É responsável pelo gerenciamento do pool de arquivos XML e do arquivo properties contendo os SQLs usados na aplicação . Estrutura padrão SubMacroUtils Abaixo algumas das classes que compoem o SubMacroUtils: MethodsTab responsável pela validação dos campos das telas de cadastro Paginação classe para realizar paginação de resultados obtidos através de uma consulta ao banco PoolXml mesma função da classe PoolHtml do pacote SubMacro. É responsável por guardar e gerenciar em uma estrutura de dados dinâmica todos os arquivos template XML já acessados, agilizando o acesso aos arquivos XML Print classe responsável pela impressão de relatórios usando JasperReports PText classe usada para enviar dados para o Servidor PText que imprime em modo texto, usando impressora matricial SubMacroUtils Permite fazer telas de cadastro (inserir/alterar/remover/consultar/imprimir) apenas escrevendo arquivos XML, sem precisar codificar NADA na Servlet Criptografia usando algoritmo MD5; Cálculos aritméticos com datas Esquema de mascaras generico em JavaScript; Chamadas de componentes para relatórios JasperReports (em formato HTML, PDF, XLS, CVS, TXT) Consistencia de campos obrigatorios em JavaScript; Catálogo de mensagens de erros comuns para aplicações; Formatação de datas, horas e números reais; Classes utilitárias Geral.java e GeralHTML.java, com alguns métodos genéricos; Inclusão de código SQL em arquivo de properties externo, para facilitar manutenção; Controle de autenticação de usuários e, em seguida, checagem do nível de acesso do usuário autenticado às opções de menu do sistema; Geração de Telas O principal recurso oferecido pelo SubMacroUtils é a geração de telas de cadastro e de filtros a partir de templates XML. Para utilizá-lo, é necessário montar a seguinte estrutura de diretórios dentro do diretório principal da aplicação: css: formatação CSS dos arquivos HTML imagens: imagens necessárias ao JasperReports, além das imagens específicas de cada aplicação jasper: relatórios produzidos pelo JasperReports js: arquivo de funções Javascript para controle da interface com o usuário WEB-INF: arquivos da aplicação Web xml: templates XML das telas de cadastro e dos filtros No diretório principal da aplicação ficam os templates HTML (tab*.html). Esses templates são utilizados na geração das telas de cadastro e dos filtros Exemplo de Tela - Listagem : Exemplo de Tela - Inserção : Exemplo de Tela - Filtro : Exemplo de Impressão - Relatório : Exemplo de Impressão - Boleto : Módulos SubMacro SubMacro: implementação do modelo MVC através de macrosubstituições. SubMacroUtils: recursos para desenvolvimento de aplicações web e desktop, como gerenciamento de impressão, baixa de boletos bancários e relatórios HTML, PDF, XLS. Além disso a geração de telas de cadastro e filtros é facilitada através da utilização de arquivos XML SubMacroGen: facilitar a criação dos arquivos XML utilizados na criação de telas de cadastro pelas ferramentas SubMacroUtils e SubMacroForms SubMacroForms: versão desktop do SubMacroUtils, utilizando também arquivos XML. Coniderações Finais Portal Submacro Integrável a outros Frameworks Desenvolvido em nosso Estado Performance Comprovada Vamos prestigiar Use e confira Versões Estáveis Equipe qualificada e comprometida com o projeto Referências Portal Submacro http://portalsubmacro.intersite.com.br:8080/jetnuke/ Site da projeto SubMacro no java.net https://submacro.dev.java.net/