Download - Spring & Struts
...MAS PRIMEIRO...
MVCModel-View-Controller
Introdução
• Códigos suscetíveis a mudança.• Lógica acoplada firmemente à interface.
• Solução:– Dividir a aplicação.
• Model• View• Controller
Model
• Representa os dados usados pela aplicação.• Define detalhes da manipulação e
armazenamento de dados.
• Benefícios:– Manutenção: detalhes dos dados e das operações nos
dados podem ser encontrados facilmente.– Pode ser reutilizado por outra aplicação.
View
• Detalhes da implementação da interface de usuário.
• Única a interagir com o usuário
• Benefícios:– Múltiplas interfaces(Swing, WEB, Console).– Criação de grupo de design voltada para o estilo, look
& feel.
Controller
• Detalhes sobre a transição da aplicação.• Captura os eventos da camada view e atualiza os
componentes da camada model.
• Benefícios:– Camada view pode ser projetada sem estar ciente de
outros componentes.– Atualização dos componentes model são removidos
da view.
Model 2
• Ligeira modificação do MVC para uso em aplicações WEB.– Servlet:
• Fornecer um ponto de acesso único ao restante da aplicação.• Responsável pela gerência central do fluxo da aplicação
– Páginas JSP.
Struts
Framework padrão WEB
Apresentação do Framework
Os desenvolvedores utilizam o Struts para suportar cada camada de uma aplicação (MVC2).
Ele implementa o controlador da aplicação (Integração das camadas).
Struts – Estrutura – Provê a estrutura inicial das aplicações
Entendedo Struts
O que baixar para instalar
Você deve ter o TomCat
Baixe o Struts 2 no site http://struts.apache.org/download.cgi#struts20111
Instale o Amateras: https
://sourceforge.jp/projects/amateras/files/?release_id=29511#29511
Como instalar Descompacte o Struts em qualquer diretório
Para testar o Struts copie o arquivo struts2-blank-2.0.11.1.war para a pasta \webapps do Tomcat
Inicie o serviço Tomcat, acesse http://localhost:8080• Deve aparecer a página inicial do Tomcat
Agora tente acessar o arquivo war que você copiou digitando• http://localhost:8080/struts2-blank-2.0.11.1
Para fazer sua própria aplicação Struts Quando você abrir o arquivo .war com um browser, ele
gerará uma pasta struts2-blank-2.0.11.1, que terá algumas subpastas.• WEB-INF/results: páginas JSPs contendo o resultado de
uma operação realizada pelo usuário. Estas páginas poderão ser chamadas somente pelo Struts. O usuário da aplicação não conseguirá acessá-las diretamente;
• WEB-INF/src: abaixo deste diretório serão mantidos os arquivos .java da aplicação
• WEB-INF/lib: bibliotecas utilizadas pela aplicação; • WEB-INF/classes: arquivos .class referentes às classes
Java compiladas da aplicação; Adicione essa pasta ao seu workspace, mude seu nome
e comece a editá-la
Vantagens do Struts
O Struts serve para auxiliar no desenvolvimento de aplicações para WEB.
Ele separa muito bem cada camada utilizando MVC
Desenvolvedores html e java podem trabalhar separadamente no mesmo projeto.
A interface não depende do fluxo de informação e vice-versa
Inside Struts... Servlets é uma tecnologia em servidores que ajudam a
guiar uma página web para uma URL que contém uma classe e permite a utilização do métodos desta usando http.
Ruim pois qualquer modificação na interface gerava mudança no código fonte do Servlet (Que continha o código Java)
JSP (Java Server Pages) Páginas com HTML e código Java, facilita o desenvolvimento.
Problema: JSP lida com a apresentação (html) e desenvolvimento (JAVA) no mesmo arquivo, não havia como reutilizar código decentemente.
Solução Com o problema da reusabilidade das JSP, criaram tags
especiais html para acessar partes de código, exemplos:
• <jsp:useBean … /> Agora para dividir bem as funções das JSP e dos
Servlets criaram frameworks como o Struts! O Struts gerencia as 3 partes do MVC (Mais focado na C)
• Model: .Java
• View: São as JSPs
• Controller: Actions
Exemplo de Projeto Struts
Vamos estudar um projeto que vêm com o Struts
O que irei explicar é uma tela de login simples que lê os dados de um usuário.
Example.xml
Conclusão
O Struts facilita o desenvolvimento de aplicações WEB.
A versão 2.0 tem bastante ferramentas inovadoras.
Deve ser estudado com afinco pois é muito abrangente
• J2EE
• Aplicações de grande porte
• Reduzir este problema
• MVC
Utilização
• Padrões de Desenvolvimento
• Dependency Injection
• Inversion of Control
Conceitos Básicos
Padrão de desenvolvimento de programas
de computadores onde a sequência
(controle) de chamadas dos métodos não
é determinada pelo programador. Este
controle é delegado a uma infraestrutura
de software muitas vezes chamada de
container. Esta é uma característica
comum aos frameworks.
Inversion of Control
http://pt.wikipedia.com/ Dependency_Injection
(Inversão de Controle)
No Spring o container se encarrega de
"instanciar" classes de uma aplicação
Java e definir as dependências entre elas
através de um arquivo de configuração em
formato XML. Dessa forma o Spring
permite o baixo acoplamento entre classes
de uma aplicação orientada a objetos.
Dependency Injection
http://pt.wikipedia.com/ Dependency_Injection
(Inclusão de Dependência)
Vamos implementar o seguinte sistema de classes Normalmente e depois implementaremos Spring no Sistema.
Exemplo Codificação(Inclusão de Dependência)
public class Computador {private Impressora impressora = null;private Monitor monitor = null;private Teclado teclado = null;
public void setImpressora(Impressora impressora) {this.impressora = impressora;
}public void setMonitor(Monitor monitor) {
this.monitor = monitor;}public void setTeclado(Teclado teclado) {
this.teclado = teclado;}public void ligar(){
monitor.exibeMensagem("Digite texto para impressão");
String texto = teclado.ler();
impressora.imprimir(texto);
monitor.exibeMensagem("Texto Impresso!");
}
}
Exemplo Codificação(Inclusão de Dependência)
public class Impressora {public void imprimir(String texto) {
System.out.println("[IMPRESSORA] " + texto);}
}
Exemplo Codificação(Inclusão de Dependência)
public class Monitor {public void exibeMensagem(String mensagem) {
System.out.println("[MONITOR] "+mensagem);}
}
public class Teclado {public String ler() {
String texto = null;System.out.print("[TECLADO]>");
try {texto = new BufferedReader(new InputStreamReader(System.in)).readLine();
} catch (IOException e) {System.out.println("Erro lendo teclado!");e.printStackTrace();
}return texto;}
}
/*Classe de Teste*/
public class IniciaComputador {public static void main(String[] args) {
Computador computador = new Computador();computador.setImpressora(new Impressora());computador.setTeclado(new Teclado());computador.setMonitor(new Monitor());computador.ligar();
}}
/*Saida no Console*/[MONITOR] Digite texto para impressão[TECLADO]> Teste[IMPRESSORA] Teste[MONITOR] Texto Impresso!
Para fazer o Spring entender a
dependência entre nossas classes,
precisamos criar um arquivo de
configuração. Este geralmente recebe o
nome de applicationContext.xml. Vejamos
o arquivo que
define nosso exemplo:
Dependency Injection(Inclusão de Dependência)
Exemplo Codificação(Inclusão de Dependência)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans><bean id=“computadorBean” class=“pacoteBase.Computador”>
<property name="impressora" ref=“impressoraBean“/>
<property name="teclado" ref=“tecladoBean“/><property name="monitor“ ref="monitorBean“/>
</bean>
<bean id=“impressoraBean“ class=“pacoteBase.Impressora“/>
<bean id=“tecladoBean“ class=“pacoteBase.Teclado“/>
<bean id=“monitorBean“ class=“pacoteBase.Monitor“/>
</beans>
Classes
Atributos
E para testar nosso exemplo utilizando Spring podemos utilizar a classe abaixo:
public class IniciaUsandoSpring {public static void main(String[] args) {
ApplicationContext applicationContext = newClassPathXmlApplicationContext(“classpath:pacoteBase/applicationContext.xml");
Computador computador = (Computador)applicationContext.getBean("computadorBean");
computador.ligar();}
}
Exemplo Codificação(Inclusão de Dependência)
/*Saida no Console*/[MONITOR] Digite texto para impressão[TECLADO]> Teste[IMPRESSORA] Teste[MONITOR] Texto Impresso!
O applicationContext.xml é onde são
declarados os beans do Spring. O
framework chama de beans
todas as classes que gerencia. As classes
precisam ser declaradas utilizando o
elemento <bean>
O Arquivo ApplicationContext.xml(Inclusão de Dependência)
<bean id=”identificador do bean” class=”FQN da classe que implementa o bean” >
<property name=”nome do atributo” ref=”id do bean que satisfaz a dependência”/>
</bean>
FQN significa Fully-Qualified Name, ou nome completo. O FQN de uma classe é o nome da classe com oseu pacote completo. Por exemplo, o FQN da classe String é java.lang.String, o FQN da classeList é java.util.List.
No exemplo, declaramos os beans computadorBean, impressoraBean, monitorBean e tecladoBean.
O bean computadorBean possui como atributos referências para os outros beans e estas referências sãodeclaradas utilizando elementos property dentro da declaração do bean.
Ao utilizar o elemento property, o Spring irá tentar utilizar um método setNomeDoAtributo() parapreencher o bean com a dependência configurada.Muitas vezes, para não quebrar a invariante de um objeto é necessário que suas dependências sejam supridas durante a inicialização deste. Para estes casos, o Spring oferece a possibilidade de injetar as dependências utilizando o construtor do objeto ao invés de seus métodos mutadores (setters).
O Arquivo ApplicationContext.xml(Inclusão de Dependência)