Desenvolvimento WEB em JAVA Palestrante: Lourival F. de Almeida Júnior
Agenda Introdução Servlet Arquitetura de Software Velocity Struts Conclusão Referências
Introdução (antes) Programador Produto
Introdução (hoje) Programador Arquiteto de Software GCS GQS Produto Gestão de Projeto Analista de Sistemas Engenheiro de Software
Introdução Softwares maiores e mais complexos exigem uma organização também maior e mais complexa
Arquitetura Web Process
Servlet Servlet
Primeiro Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class HelloServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println( <html> ); out.println( <title>primeiro Servlet</title>"); out.println( <body><h1>olá Mundo!!!</h1></body> ); out.println( </html> ); }
Arquitetura de Software APRESENTAÇÃO Objeto CONTROLE Objeto PERSISTÊNCIA
VELOCITY
Agenda Introdução Arquitetura Velocity Template Language (VTL) Linkando com Java
Introdução Velocity é um motor de templates (template engine) escrito em Java; Serve bem como divisor das camadas de apresentação e negócio, facilitando o desenvolvimento paralelo entre web designers e programadores; Bastante usado atualmente no desenvolvimento de aplicações web; Alternativa viável para o uso de JSP.
Problemas com JSP Problemas de design conhecidos e relatados em estudos; JSP embute código Java dentro das páginas HTML (contra MVC); JSP é editado -> transformado -> compilado -> carregado -> executado, o que faz necessário um compilador java na máquina servidora; Difícil aprendizado por designers; Solução Taglibs: Estende a linguagem JSP; Ao invés de colocar código Java dentro de páginas HTML, agora colocamos XML dentro dos HTML.
Exemplo de Taglibs <%@ page language="java" %> <%@ taglib uri="/web-inf/struts-logic.tld" prefix="logic" %> <!-- Is the number guess right? --> <logic:equal parameter="number" value="7"> You guessed right! You win a high speed blender! </logic:equal> <!-- If the number guessed was wrong --> <logic:notequal parameter="number" value="7"> <!-- Less Than --> <logic:lessthan parameter="number" value="7"> A little higher... </logic:lessthan> <!-- Greater Than --> <logic:greaterthan parameter="number" value="7"> A little lower... </logic:greaterthan> </logic:notequal>
Problemas com JSP Funcional apenas com aplicações Web; Gerenciamento de Erros Erros confusos, os problemas reportados estão no código Java gerado a partir do.jsp; O parser do.jsp pode gerar um conjunto de erros enquanto o compilador gera outros tipos de erros, tudo isso no mesmo stack trace; Para fazer o tratamento de erros é inevitável o uso de Java dentro das páginas HTML.
Hello World em JSP <html> <head><title>hello</title></head> <body> <h1> <% if (request.getparameter("name") == null) { out.println("hello World"); } else { out.println("hello, " + request.getparameter ("name")); } %> </h1> </body></html>
Hello World em Velocity <html> <head><title>hello</title></head> <body> <h1> #if ($valor == null) Hello World #else Hello, $valor #end </h1> </body> </html>
Arquitetura Templates Templates Templates Dados Dados Dados Velocity (Motor de Templates) merge Stream (html, xml, texto, etc.)
Velocity Template Language Linguagem simples que define a forma como os templates serão escritos para referenciar objetos em Java; Bastante poderosa; De fácil aprendizado em relação ao JSP; Facilmente assimilada por web designers no desenvolvimento web.
Velocity Template Language Variáveis $cliente, $!cliente, $(cliente) Propriedades $cliente.endereco, $(cliente.endereco) Métodos $cliente.getendereco(), $(cliente.getendereco ()) $cliente.getendereco( completo ) $cliente.endereco
Velocity Template Language #if #if (condicao) <corpo> #elseif (condicao2) <corpo> #else <corpo> #end #if ($cliente.condicao == em debito ) <H1>Cliente em débito</h1> #else <H1>Seja bem vindo!</h1> #end
Velocity Template Language #foreach #foreach ($ref in arg) <corpo> #end <table> #foreach( $cliente in $listacliente ) <tr><td>$velocitycount</td><td>$cliente.nome</td></tr> #end </table>
Velocity Template Language #include Inclui um arquivo que não passará pelo parser do Velocity #include (arg) #parse Inclui um arquivo que passará pelo parser do Velocity #parse (arg)
Velocity Template Language #macro #macro (vname $arg1 [$arg2 $arg3]) #end <código> ##Definicao #macro (messagemarkupforproperty $property) #if ($messages.exist($property) ) <ul> #foreach ($m in $messages.get($property)) $m #end </ul> #end #end ##Uso #messagemarkupforproperty( nome )
Velocity Template Language <HTML> <HEAD>Testando aplicacao de Velocity</HEAD> <BODY> <H1>Olá $Cliente</H1> #foreach ($item in $menu) <h2>$item.nome eh ligado a: $item.action</h2><br> #end </BODY> </HTML>
Fazendo a ligação com Java Inicializar o Velocity Criar um objeto Context Adicionar seus dados ao contexto Escolher um template Ligar o template e o contexto para produzir uma saída
Struts
Introdução Framework open-source para construção de aplicações web; Implementação do padrão MVC, construído sobre padrões de projeto (Design Patterns) bem conhecidos pela comunidade; Apresentação (JSP, Velocity, XSLT,...) Persistência (JDBC, Hibernate, EJB,...)
Introdução Características do Struts: Controlador central; Sistema de apresentação externo ao framework; Tratamento de erros; Internacionalização; Sincronizadores; Validação de parâmetros (cliente/servidor); Sistema de log; Upload; Plugins;...
Arquitetura - MVC Módulos especialistas; Divisão de tarefas e papéis dos envolvidos; Poderosa ajuda no desenvolvimento de aplicações complexas e de tamanho considerável.
Arquitetura - MVC Model a base de dados envolvida na aplicação camada de persistência View responsável pela renderização dos dados desejados na interface de saída esperada camada de apresentação Controller mantém e controla o fluxo entre as várias telas da aplicação, mais a conversação entre as camadas de apresentação e persistência
Arquitetura - Model I
Arquitetura - Model II Struts Velocity Hibernate
Arquitetura Struts
Conceitos Básicos Parte I ActionServlet Controlador central da aplicação; Responsável por delegar tarefas para as ações correspondentes; Actions Responsável por executar as regras de negócio da aplicação em desenvolvimento; Forms Responsável por armazenar os dados HTTP em um objeto Java.
Arquitetura Struts
Arquitetura Struts Controle Negócio Modelo Apresentação
Conceitos Básicos Parte II RequestProcessor Dita a seqüência de eventos que ocorrem dentro da aplicação desde uma requisição até a preparação da resposta; ActionForward Controla o fluxo de navegação entre as páginas da aplicação; ActionMapping Cataloga e configura uma lógica de negócio disponível para uma aplicação Struts; struts-config.xml Arquivo principal de configuração do framework; VelocityServlet/VelocityLayoutServlet Responsáveis pela renderização da apresentação para o cliente;
Fluxo do Struts
Construção... struts-config.xml Arquivo contendo as configurações gerais da aplicação que está em execução sobre o Struts; Elementos: <data-sources> <form-beans> <global-exceptions> <global-forwards> <action-mappings> <controller> <message-resources> <plug-in>
Construção (struts-config.xml) <data-sources> Configura o controle das fontes de dados para o Controller
Construção (struts-config.xml) <form-beans> Descreve um bean que será utilizado pelo Action correspondente
Construção (struts-config.xml) <global-exceptions> Funciona como um container exceções lançadas pelo Action
Construção (struts-config.xml) <global-forwards> Define direcionamentos de URL
Construção (struts-config.xml) <action-mappings> Define os Actions da aplicação Struts
Construção (struts-config.xml) <message-resources> Contem o mensageiro da aplicação
Construção (struts-config.xml) <plug-in> Descreve plugins para serem usados no Struts
Construção... Actions Estendem de org.apache.struts.action.action; Possuem um método execute() que é chamado pelo RequestProcessor; Contem a lógica de negócio. Fazem parte da camada de controle; São criadas uma única vez, reutilizadas e são passíveis de concorrência.
Action
Construção... Forms Estendem de org.apache.struts.action.actionform; Os forms são JavaBeans que representam as screens da aplicação; Só pode conter propriedades String e boolen; São preenchidos pelo RequestProcessor; Caso a configuração no struts-config.xml para o ActionMapping seja setada como validate = true, o método validate() da classe será chamado.
ActionForm
Construção... Template Arquivos texto que misturam HTML com a VTL (Velocity Template Language) Intimamente ligados ao Velocity Tools (conjunto de classes criadas para apoiar a construção de aplicações com Struts)
Links e bibliografia Struts http://jakarta.apache.org/struts http://jakarta.apache.org/velocity/tools/struts/ Patterns http://developer.java.sun.com/developer/technica larticles/j2ee/despat/
Links e bibliografia Velocity http://jakarta.apache.org/velocity Artigos http://jakarta.apache.org/velocity/ymtd/ymtd.html http://www.javaworld.com/javaworld/jw-12-2001/jw- 1228-velocity.html http://www.javaworld.com/javaworld/jw-07-2001/jw- 0727-templates.html http://today.java.net/pub/a/today/2003/12/16/veloci ty.html
Questões Lourival F. de Almeida Júnior lourival.almeida@gmail.com