Struts vs Struts2
O Struts (também conhecido como Apache Struts ou Struts 1) é uma estrutura de código aberto de plataforma cruzada escrita em Java, destinada ao desenvolvimento de aplicativos da Web Java EE. Foi uma das estruturas iniciais de aplicativos 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, o Struts2 está sendo muito utilizado no desenvolvimento de aplicativos Java EE no mundo.
O que é o Struts?
A estrutura Struts (Struts 1) foi uma das estruturas iniciais de aplicativos da web para o desenvolvimento de aplicativos da web Java EE. A estrutura do 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 no Jakarta Project 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ções, um manipulador de respostas e uma biblioteca de tags. O URI padrão (identificador uniforme de recursos) é mapeado para um manipulador de solicitações. O manipulador de respostas é responsável por transferir o controle. Para criar aplicativos interativos com formulários, os recursos oferecidos pela biblioteca de tags podem ser utilizados. Struts suportam aplicativos REST e várias tecnologias como SOAP, AJAX, etc.
O que é o Struts2?
Percebe-se que a estrutura do Struts contém certas limitações (principalmente a falta de separação entre a camada de apresentação, a camada de manipulação de solicitações e o modelo) pelos desenvolvedores do Java EE na época e, consequentemente, alguns anos depois o Struts2 chegou. Na verdade, o Struts2 era completamente diferente do Struts. Na verdade, eles nem sequer compartilharam a mesma base de código porque o Struts2 foi simplesmente o resultado de renomear a estrutura do WebWork 2.2 (ou seja, as comunidades WebWork e Struts que trabalharam separadamente por algum tempo finalmente se uniram para criar o Struts2). Seu lançamento 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 da estrutura do Struts era a necessidade de programar para abstrair classes em vez de interfaces. Isso foi resolvido pelo framework Struts2. Por exemplo, a estrutura do Struts exigia que as classes Action fossem estendidas a partir das classes base abstratas, mas o 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 surgidos na estrutura do Struts em relação aos objetos Action não ocorrem na estrutura do Struts2. O motivo é que os objetos Struts2 Action são instanciados para cada solicitação, enquanto uma estrutura do Action in Struts possui apenas uma instância para manipular todos os pedidos dessa ação. Diferente da estrutura Actions in Struts, as Struts2 Actions não dependem da API do Servlet.
A testabilidade da estrutura Struts2 é comparativamente maior que a estrutura 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 Action são usadas como propriedades de entrada, sem a necessidade de manter um segundo objeto de entrada. Além do suporte à integração JSTL (presente no Struts), a estrutura do Struts2 pode usar OGNL mais poderoso e expressivo (Object Graph Notation Language). Para conversão de tipo, Strut e Strut2 usam Commons-Beanutils e OGNL, respectivamente. Devido a essas melhorias, a estrutura do Struts2 é considerada uma estrutura altamente madura e é muito popular entre os programadores de Java EE. Por outro lado, o framework Struts agora é considerado obsoleto.