Desenvolvimento WEB em JAVA

Propaganda
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)
Arquiteto de Software
Programador
Produto
GCS
GQS
Analista de Sistemas
Gestão
de
Projeto
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
<código>
#end
[$arg2 $arg3])
##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
Velocity
Hibernate
Struts
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/jw1228-velocity.html
• http://www.javaworld.com/javaworld/jw-07-2001/jw0727-templates.html
• http://today.java.net/pub/a/today/2003/12/16/veloci
ty.html
Questões
Lourival F. de Almeida Júnior
[email protected]
Download