Uma introdução rápida do Struts 2
1. Introdução
Apache Struts 2 é uma estrutura baseada em MVC para o desenvolvimento de aplicativos web Java corporativos. É uma reescrita completa da estrutura original do Struts. Possui uma implementação de API de código aberto e um rico conjunto de recursos.
In this tutorial, we will have a beginner’s introduction to different core components of the Struts2 framework. Além disso, mostraremos como usá-los.
2. Visão geral da estrutura do Struts 2
Alguns dos recursos do Struts 2 são:
-
Ações baseadas em POJO (objetos Java simples e antigos)
-
suporte a plugins para REST, AJAX, Hibernate, Spring, etc
-
convenção sobre configuração
-
suporte de várias tecnologias da camada de visualização
-
facilidade de criação de perfil e depuração
2.1. Diferentes componentes do Struts2
O Struts2 é uma estrutura baseada em MVC, portanto os três componentes a seguir estarão presentes em todos os aplicativos do Struts2:
-
Action class – que é uma classe POJO (POJO significa que não faz parte de nenhuma hierarquia de tipo e pode ser usado como uma classe independente); vamos implementar nossa lógica de negócios aqui
-
Controller – no Struts2, filtros HTTP são usados como controladores; eles basicamente realizam tarefas como interceptar e validar solicitações / respostas
-
View – é usado para apresentar dados processados; geralmente é um arquivo JSP
3. Projetando nosso aplicativo
Vamos prosseguir com o desenvolvimento de nosso aplicativo da web. É um aplicativo onde um usuário seleciona uma determinada marcaCar e é saudado por uma mensagem personalizada.
3.1. Dependências do Maven
Vamos adicionar as seguintes entradas aopom.xml:
org.apache.struts
struts2-core
2.5.10
org.apache.struts
struts2-junit-plugin
2.5.10
org.apache.struts
struts2-convention-plugin
2.5.10
A versão mais recente das dependências pode ser encontradahere.
3.2. Logíca de negócios
Vamos criar uma classe de açãoCarAction que retorna uma mensagem para um determinado valor de entrada. OCarAction tem dois campos -carName (usado para armazenar a entrada do usuário) ecarMessage (usado para armazenar a mensagem personalizada a ser exibida):
public class CarAction {
private String carName;
private String carMessage;
private CarMessageService carMessageService = new CarMessageService();
public String execute() {
this.setCarMessage(this.carMessageService.getMessage(carName));
return "success";
}
// getters and setters
}
A classeCarAction usaCarMessageService, que fornece a mensagem personalizada para uma marcaCar:
public class CarMessageService {
public String getMessage(String carName) {
if (carName.equalsIgnoreCase("ferrari")){
return "Ferrari Fan!";
}
else if (carName.equalsIgnoreCase("bmw")){
return "BMW Fan!";
}
else {
return "please choose ferrari Or bmw";
}
}
}
3.3. Aceitando entrada do usuário
Vamos adicionar umJSP, que é um ponto de entrada em nosso aplicativo. Este é um conteúdo do arquivoinput.jsp:
A tag <form> especifica a ação (em nosso caso, é um URI HTTP para o qual a solicitação GET deve ser enviada).
3.4. A parte do controlador
StrutsPrepareAndExecuteFilter é o controlador, que interceptará todas as solicitações de entrada. Precisamos registrar o seguinte filtro noweb.xml:
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts2
/*
StrutsPrepareAndExecuteFilter filtrará todas as solicitações recebidas, pois estamos especificando o caractere curinga de correspondência de URL<url-pattern>/ *
3.5. Configurando o aplicativo
Vamos adicionar as seguintes anotações à nossa classe de açãoCar:
@Namespace("/tutorial")
@Action("/car")
@Result(name = "success", location = "/result.jsp")
Vamos entender a lógica dessas anotações. O@Namespace é usado para separação lógica do URI de solicitação para diferentes classes de ação; precisamos incluir esse valor em nossa solicitação.
Além disso, o@Action informa o ponto final real do URI de solicitação que atingirá nossa classeAction. A classe de ação consultaCarMessageServicee inicializa o valor de outra variável de membrocarMessage. Depois que o métodoexecute() retorna um valor,“success” em nosso caso, ele corresponde a esse valor para invocarresult.jsp
Finalmente, o@Result tem dois parâmetros. Primeiro,name, especifica o valor que nossa classeAction retornará; este valor é retornado do métodoexecute() da classeAction. This is the default method name which will be executed.
A segunda parte,location, diz qual é o arquivo a ser referenciado depois que o métodoexecute() retornar um valor. Aqui, estamos especificando que quandoexecute() retorna uma String com o valor “success“, temos que encaminhar a solicitação pararesult.jsp.
A mesma configuração pode ser alcançada fornecendo o arquivo de configuração XML:
/result.jsp
3.6. A vista
Este é o conteúdo deresult.jsp que será usado para apresentar a mensagem ao usuário:
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Hello example User
You are a
Há duas coisas importantes a serem observadas aqui:
-
em<@taglib prefix=”s” uri=”/struts-tags %> estamos importando a bibliotecastruts-tags
-
em<s:property value=”carMessage”/> estamos usando a bibliotecastruts-tags para imprimir o valor de uma propriedadecarMessage
4. Executando o aplicativo
Este aplicativo da web pode ser executado em qualquer contêiner da web, por exemplo, no Apache Tomcat. Estas são as etapas necessárias para sua realização:
-
Depois de implantar o aplicativo da web, abra o navegador e acesse a seguinte URL:http://www.localhost.com:8080/MyStrutsApp/input.jsp
-
Selecione uma das duas opções e envie a solicitação
-
Você será encaminhado para a páginaresult.jsp com mensagem personalizada com base na opção de entrada selecionada
5. Conclusão
Neste tutorial, mostramos um guia passo a passo sobre como criar nosso primeiro aplicativo da Web Struts2. Abordamos diferentes aspectos relacionados ao MVC no domínio Struts2 e mostramos como reuni-los para o desenvolvimento.
Como sempre, este tutorial pode ser encontradoover on Github como um projeto Maven.