Struts vs Struts2
Struts (também conhecido como Apache Struts ou Struts 1) é uma estrutura de software livre de plataforma cruzada escrita em Java, que se destina ao desenvolvimento de aplicativos da web Java EE. Foi uma das estruturas iniciais de aplicativo da web Java EE. Mas, alguns anos depois, o Struts2 (ou Struts versão 2) chegou, e era uma estrutura de aplicativo da web completamente diferente e altamente aprimorada. Ele abordou alguns problemas que foram percebidos como deficiências na versão inicial. Agora, Struts2 está sendo usado fortemente para desenvolver aplicativos Java EE no mundo.
O que é Struts?
A estrutura Struts (Struts 1) foi uma das estruturas iniciais de aplicativos da web para o desenvolvimento de aplicativos da web Java EE. O framework Struts incentiva o uso da arquitetura MVC (Model-View-Controller). É uma extensão da API Java Servlet. Craig McClanahan é o criador original do Struts. Inicialmente era conhecido como Jakaratha Struts e foi mantido sob o Projeto Jakarta da Apache Software Foundation. É lançado sob a licença Apache 2.0. A estrutura do Struts é chamada de estrutura baseada em solicitação e é composta por três componentes principais: um manipulador de solicitação, um manipulador de resposta e uma biblioteca de tags. URI padrão (Uniform Resource Identifier) é mapeado para um manipulador de solicitação. O manipulador de resposta é responsável por transferir o controle. Para criar aplicativos interativos com formulários, os recursos oferecidos pela biblioteca de tags podem ser utilizados. Struts oferece suporte a aplicativos REST e várias tecnologias, como SOAP, AJAX, etc.
O que é Struts2?
A estrutura do Struts foi percebida como contendo certas limitações (principalmente a falta de separação entre a camada de apresentação, a camada de tratamento de solicitação e o modelo) pelos desenvolvedores Java EE naquela época e, conseqüentemente, alguns anos depois, o Struts2 chegou. Na verdade, Struts2 era completamente diferente de Struts. Na verdade, eles nem mesmo compartilhavam a mesma base de código porque o Struts2 foi simplesmente o resultado da renomeação do framework WebWork 2.2 (ou seja, as comunidades WebWork e Struts que trabalharam separadamente por algum tempo finalmente deram as mãos para criar o Struts2). Sua versão estável atual é a versão 2.2.3, lançada em maio de 2011.
Qual é a diferença entre Struts e Struts2?
Um dos muitos problemas do framework Struts era a necessidade de programação para abstrair classes em vez de interfaces. Isso foi resolvido pelo framework Struts2. Por exemplo, o framework Struts requer que as classes Action sejam estendidas das classes base abstratas, mas Struts2 Actions pode implementar uma interface Action. Devido às diferenças no modelo de encadeamento entre as duas versões, os problemas de segurança de encadeamento que surgiram na estrutura do Struts em relação aos objetos de ação não ocorrem na estrutura do Struts2. O motivo é que os objetos Struts2 Action são instanciados para cada solicitação, enquanto uma Action no framework Struts tem apenas uma instância para lidar com todas as solicitações para aquela Action. Ao contrário da estrutura Actions in Struts, Struts2 Actions não depende da API Servlet.
A testabilidade do framework Struts2 é comparativamente maior do que o framework Struts. Você pode testar as Ações do Struts2 simplesmente seguindo as três etapas: instanciação, configuração de propriedades e invocação de métodos. A coleta de entrada é mais fácil na estrutura do Struts2, pois as propriedades de ação são usadas como propriedades de entrada, sem ter que manter um segundo objeto de entrada. Além do suporte para integração JSTL (que está presente no Struts), o framework Struts2 pode usar OGNL (Object Graph Notation Language) mais poderoso e expressivo. Para conversão de tipo, Strut e Strut2 usam Commons-Beanutils e OGNL, respectivamente. Por causa dessas melhorias, a estrutura Struts2 é considerada uma estrutura altamente madura e é muito popular entre os programadores Java EE. Por outro lado, o framework Struts agora é considerado obsoleto.