1 / 37

Struts

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.

becka
Download Presentation

Struts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Struts 2

  3. Arquitetura Struts2 / MVC • http://struts.apache.org/2.x/

  4. Hello 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

  5. Hello World: Apresentação Arquivo JSP <%@taglibprefix="s"uri="/struts-tags"%> <html> <head> <title>Hello World!</title> </head> <body> <h2><s:propertyvalue="message"/></h2> </body> </html>

  6. Hello World: Modelo Action/Classe Java import com.opensymphony.xwork2.ActionSupport; publicclass HelloWorld extends ActionSupport { publicstaticfinal String MESSAGE = "Struts is up and running ..."; public String execute() throws Exception { setMessage(MESSAGE); returnSUCCESS; // ERROR, INPUT, LOGIN, NONE: Constantes de ActionSupport } private String message; publicvoid setMessage(String message){ this.message = message; } public String getMessage() { returnmessage; } }

  7. Hello World:ControleArquivo struts.xml <!DOCTYPEstrutsPUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <packagename="tutorial"extends="struts-default"> <actionname="helloworld"class="br.com.siriusnet.cursojava.HelloWorld"> <result>/helloworld.jsp</result><!-- Dispatcher --> </action> </package> </struts>

  8. Hello World: Arquivo web.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>

  9. Hello World: 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()

  10. Hello World: 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

  11. Hello World: Seqüência de Passos (3/3) • Finalmente, o arquivo html resultante é enviado para o browser

  12. Padrõ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;

  13. Exemplo de Padrão de Projeto – 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.

  14. Exemplo de Padrão de Projeto – Façade

  15. MVC (Model-View-Controller) • É um padrão arquitetural que permite isolamento entre as camadas num sistema • Este isolamento objetiva simplificar o processo de manutenção do software

  16. http://java.sun.com/blueprints/patterns/MVC-detailed.html MVC (Model-View-Controller)

  17. MVC (Model-View-Controller) • 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

  18. Struts 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

  19. Algumas Diferenças entre Struts 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

  20. Algumas Diferenças entre Struts 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

  21. Algumas Diferenças entre Struts 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

  22. Instalando 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”

  23. 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

  24. 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

  25. Arquivo “struts.xml” <!DOCTYPEstrutsPUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <packagename="tutorial"extends="struts-default"> <include file="outra_configuracao.xml" /> <actionname="nome_acao_url"class="nome.completo.ClasseModelo"> <result type="tipo_Resultado"> /arquivo_saida.jsp <!–- um exemplo --> </result><!-- Dispatcher é o default--> </action> </package> </struts>

  26. Tipos 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 <!DOCTYPEstrutsPUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <packagename="tutorial"extends="struts-default"> <actionname="helloworld"class="br.com.siriusnet.cursojava.HelloWorld"> <result>/helloworld.jsp</result><!-- Dispatcher --> </action> </package> </struts>

  27. Tipos 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

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

  29. Configuração

  30. Internacionalização

  31. Validação

  32. Biblioteca de Tags do Struts

  33. Extendendo o FrameworkPlugins

  34. Tiles • Framework criado para simplificar a construção de interfaces através de templates • Este framework utiliza o padrão Composite

  35. FreeMarker • É 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

  36. 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

  37. Referências • http://struts.apache.org/2.x/ • Página principal • http://struts.apache.org/2.x/docs/core-developers-guide.html • Core Developers Guide

More Related