Struts

37
Struts Struts Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

description

Struts. Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense. Struts 2. Arquitetura Struts2 / MVC. http://struts.apache.org/2.x/. Hello World. - PowerPoint PPT Presentation

Transcript of Struts

Page 1: Struts

StrutsStruts

Carlos Bazilio

Depto de Ciência e TecnologiaPólo Universitário de Rio das Ostras

Universidade Federal Fluminense

Page 2: Struts

Struts 2Struts 2

Page 3: Struts

Arquitetura Struts2 / Arquitetura Struts2 / MVCMVC

• http://struts.apache.org/2.x/

Page 4: Struts

Hello WorldHello World

• Nos próximos slides apresentaremos uma aplicação inicial que está disponibilizada no site oficial do Struts

• Esta é constituída de 3 arquivos:– Uma página no servidor (.jsp) para exibir a

mensagem– Uma ação (Action – classe java) para criar a

mensagem– Um mapeamento entre a página e a ação (struts.xml)

• http://struts.apache.org/2.x/docs/hello-world.html

Page 5: Struts

Hello World: Apresentação Hello World: Apresentação Arquivo JSPArquivo JSP

<%@ taglib prefix="s" uri="/struts-tags" %>

<html> <head> <title>Hello World!</title> </head> <body> <h2><s:property value="message" /></h2> </body></html>

Page 6: Struts

Hello World: Modelo Hello World: Modelo Action/Classe JavaAction/Classe Java

import com.opensymphony.xwork2.ActionSupport;public class HelloWorld extends ActionSupport { public static final String MESSAGE = "Struts is up and

running ...";

public String execute() throws Exception { setMessage(MESSAGE); return SUCCESS; // ERROR, INPUT, LOGIN, NONE:

Constantes de ActionSupport }

private String message; public void setMessage(String message){ this.message = message; } public String getMessage() { return message; }}

Page 7: Struts

Hello World:ControleHello World:ControleArquivo struts.xmlArquivo struts.xml

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts

Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="tutorial" extends="struts-default"> <action name="helloworld"

class="br.com.siriusnet.cursojava.HelloWorld"> <result>/helloworld.jsp</result> <!--

Dispatcher --> </action> </package></struts>

Page 8: Struts

Hello World: Arquivo Hello World: Arquivo web.xmlweb.xml

<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>

<filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern>

</filter-mapping>

</web-app>

Page 9: Struts

Hello World: Hello World: Seqüência de Passos (1/3)Seqüência de Passos (1/3)

• O contêiner recebe uma requisição do servidor web ao recurso HelloWorld.action

• De acordo com o arquivo web.xml, o filtro do framework é acionado para todo tipo de recurso

• O framework procura em struts.xml por uma ação com nome HelloWorld, instancia a classe associada e dispara o método execute()

Page 10: Struts

Hello World: Hello World: Seqüência de Passos (2/3)Seqüência de Passos (2/3)

• O método execute() atribui a mensagem e retorna o valor SUCCESS

• O framework checa o arquivo struts.xml para ver que recurso retornar no caso de SUCCESS. O framework diz ao container para retornar o arquivo HelloWorld.jsp

• Quando o arquivo jsp é processado, as tags codificadas são resolvidas. Exemplo, para a tag <s:property value="message" />, o método get() da propriedade é chamado e o valor é inserido na página html resultante

Page 11: Struts

Hello World: Hello World: Seqüência de Passos (3/3)Seqüência de Passos (3/3)

• Finalmente, o arquivo html resultante é enviado para o browser

Page 12: Struts

Padrões de ProjetoPadrões de Projeto

• Um padrão de projeto é uma solução comum para um problema comum encontrado no desenvolvimento de software (Sun);

• A utilização desses padrões (boas práticas) usualmente implica em algumas vantagens:– Facilidade de comunicação: padrões possuem nomes, os quais

resumem uma solução que deve ser de conhecimento comum entre equipes de desenvolvimento;

– Credibilidade: sua implementação estará utilizando soluções amplamente testadas e aprovadas;

– Facilidade de manutenção: padrões tendem a reduzir o acoplamento entre componentes, o que implica num sistema de fácil manutenção;

Page 13: Struts

Exemplo de Padrão de Exemplo de Padrão de Projeto – FaçadeProjeto – Façade

• Similar a idéia de fachada;• Entretanto, o objetivo deste padrão é simplificar, e não

ocultar serviços oferecidos por um dado sistema;• Facilita a adoção de 2 importantes aspectos:

– Diminuição do acoplamento;– Aumento da granularidade;

• Usualmente, um façade é utilizado na camada de regras de negócio, o que oferece uma interface simplificada para um subsistema;

• Com frequência também, seus clientes estão localizados na camada de apresentação;

• Porém, nada impede que um façade invoque serviços oferecidos por outro façade.

Page 14: Struts

Exemplo de Padrão de Exemplo de Padrão de Projeto – FaçadeProjeto – Façade

Page 15: Struts

MVC (MVC (Model-View-Model-View-ControllerController))

• É um padrão arquitetural que permite isolamento entre as camadas num sistema

• Este isolamento objetiva simplificar o processo de manutenção do software

Page 16: Struts

MVC (MVC (Model-View-Model-View-ControllerController))

• http://java.sun.com/blueprints/patterns/MVC-detailed.html

Page 17: Struts

MVC (MVC (Model-View-Model-View-ControllerController))

• O exemplo da aplicação “HelloWorld” mostrada é compatível com este padrão:– O arquivo .jsp que exibe a mensagem

representa a camada de apresentação– A classe java (ação) que cria a mensagem

representa a camada de modelo– O arquivo .xml que relaciona os arquivos

anteriores representa a camada de controle

Page 18: Struts

Struts 1Struts 1

• Primeira versão do framework que apresentava diversas facilidades para a programação da web em jsp na época

• A codificação de aplicações foi significativamente simplificada com o advento da versão 2

Page 19: Struts

Algumas Diferenças entre Algumas Diferenças entre Struts 1 e 2Struts 1 e 2

• Classes Action:– Na versão 1, classes Action precisam estender uma

classe base abstrata– Na versão 2, qualquer classe POJO com um método

execute() pode ser utilizada

• Modelo de threads:– Na versão 1, actions são singletons e precisam ser

thread-safe, pois haverá 1 instância para todas as requisições

– Na versão 2, são criados objetos action para cada requisição

Page 20: Struts

Algumas Diferenças entre Algumas Diferenças entre Struts 1 e 2Struts 1 e 2

• Dependência de servlets:– Na versão 1, o método execute() recebe como

parâmetros objetos HttpServletRequest e HttpServletResponse

– Na versão 2, estes valores são obtidos de um “dicionário”, ou seja, não há necessidade de acessar os objetos do servlet explicitamente

• Testes:– Na versão 1, a dependência de servlets também

dificultava a realização de testes sobre a aplicação– Na versão 2, estes testes podem ser realizados

simplesmente criando objetos da action a ser testada

Page 21: Struts

Algumas Diferenças entre Algumas Diferenças entre Struts 1 e 2Struts 1 e 2

• Formulários de entrada:– Na versão 1, os formulários que tratavam

ações de formulários precisavam estender uma classe base abstrata

– Na versão 2, estes são substituídos elegantemente por classes POJO com propriedades, como JavaBeans

Page 22: Struts

Instalando o StrutsInstalando o Struts

• O framework Struts é distribuído como uma biblioteca Java (.jar), juntamente com outras bibliotecas necessárias a sua execução

• Para fazer com o que o servidor seja capaz de processar uma aplicação Struts, podemos:– Colocar os arquivo .jar num local adequado no

servidor• Nesta opção, os arquivos ficam na pasta “tomcat/lib”

– Inserir estas bibliotecas dentro de um arquivo de distribuição .war

• Nesta opção, os arquivos devem ficar dentro da pasta “WEB-INF/lib”

Page 23: Struts

Arquivo “struts.properties”Arquivo “struts.properties”

• Arquivo de configuração que permite a modificação do comportamento padrão do framework

• As propriedades padrão estão definidas no arquivo “default.properties” contido na distribuição “struts2-core.jar”

• Algumas propriedades:– struts.url.http.port = 8080 ## Porta padrão– struts.configuration.xml.reload=false ## Força recarga

do struts.xml após mudança

Page 24: Struts

Arquivo “struts.xml”Arquivo “struts.xml”

• Este arquivo representa a camada de controle no padrão MVC

• Nele indicamos que urls são interceptadas, quais classes de modelo tratam estas requisições e que recursos são utilizados para exibir a resposta ao cliente

Page 25: Struts

Arquivo “struts.xml”Arquivo “struts.xml”

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="tutorial" extends="struts-default">

<include file="outra_configuracao.xml" /> <action name="nome_acao_url"

class="nome.completo.ClasseModelo"> <result type="tipo_Resultado">

/arquivo_saida.jsp <!–- um exemplo --></result> <!-- Dispatcher é o default-->

</action> </package></struts>

Page 26: Struts

Tipos de ResultadosTipos de Resultados

• Enquanto as ações (Actions) são utilizadas para mudança de estado de uma aplicação, os resultados (Result Types) gerenciam as visões

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration

2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="tutorial" extends="struts-default"> <action name="helloworld"

class="br.com.siriusnet.cursojava.HelloWorld"> <result>/helloworld.jsp</result> <!-- Dispatcher --> </action> </package></struts>

Page 27: Struts

Tipos de ResultadosTipos de Resultados

• Chain Result • Dispatcher Result • FreeMarker Result• HttpHeader Result• Redirect Result• Redirect Action Result• Stream Result• Velocity Result• XSL Result• PlainText Result• Tiles Result• ..., Tipos de Terceiros• http://struts.apache.org/2.x/docs/result-types.html

Page 28: Struts

Tipos de ResultadosTipos de Resultados

• Estes tipos estão definidos no arquivo “struts-default.xml”, dentro da tag <result-types />

Page 29: Struts

ConfiguraçãoConfiguração

Page 30: Struts

InternacionalizaçãoInternacionalização

Page 31: Struts

ValidaçãoValidação

Page 32: Struts

Biblioteca de Tags do Biblioteca de Tags do StrutsStruts

Page 33: Struts

Extendendo o FrameworkExtendendo o FrameworkPluginsPlugins

Page 34: Struts

TilesTiles

• Framework criado para simplificar a construção de interfaces através de templates

• Este framework utiliza o padrão Composite

Page 35: Struts

FreeMarkerFreeMarker

• É uma ferramenta genérica de geração de texto baseado em templates

• Está disponível como uma biblioteca java• Apesar de não estar amarrada a aplicações

web, é bastante utilizada na geração de páginas html

Page 36: Struts

JSF (JavaServer Faces)JSF (JavaServer Faces)

• Diferentemente do Struts, JSF é uma especificação Java e não um produto proprietário

• Seu objetivo é oferecer uma maneira de se construir interfaces independente da plataforma do cliente

• Para tal, é identificado o tipo do cliente para que a interface se renderizada de forma adequada

Page 37: Struts

ReferênciasReferências

• http://struts.apache.org/2.x/– Página principal

• http://struts.apache.org/2.x/docs/core-developers-guide.html– Core Developers Guide