Struts 2 - Exemplo de Hello World

Como você já aprendeu com a arquitetura do Struts 2, quando você clica em um hiperlink ou envia um formulário HTML em um aplicativo da web do Struts 2, a entrada é coletada pelo Controlador que é enviada para uma classe Java chamada Actions. Depois que a ação é executada, um resultado seleciona um recurso para processar a resposta. O recurso é geralmente um JSP, mas também pode ser um arquivo PDF, uma planilha do Excel ou uma janela de miniaplicativo Java.

Supondo que você já tenha construído seu ambiente de desenvolvimento. Agora, vamos prosseguir para a construção de nosso primeiroHello World Struts2projeto. O objetivo deste projeto é construir uma aplicação web que coleta o nome do usuário e exibe "Hello World" seguido do nome do usuário.

Teríamos que criar os seguintes quatro componentes para qualquer projeto Struts 2 -

Sr. Não Componentes e descrição
1

Action

Crie uma classe de ação que conterá lógica de negócios completa e controlará a interação entre o usuário, o modelo e a visualização.

2

Interceptors

Crie interceptores, se necessário, ou use interceptores existentes. Isso faz parte do controlador.

3

View

Crie um JSPs para interagir com o usuário para obter a entrada e apresentar as mensagens finais.

4

Configuration Files

Crie arquivos de configuração para acoplar Action, View e Controllers. Esses arquivos são struts.xml, web.xml, struts.properties.

Vou usar o Eclipse IDE, para que todos os componentes necessários sejam criados em um projeto da Web dinâmico. Vamos agora começar criando um Projeto Web Dinâmico.

Crie um projeto dinâmico da Web

Comece seu Eclipse e depois vá com File > New > Dynamic Web Project e insira o nome do projeto como HelloWorldStruts2 e definir o resto das opções conforme mostrado na tela a seguir -

Selecione todas as opções padrão nas próximas telas e, finalmente, verifique Generate Web.xml deployment descriptoropção. Isso criará um projeto da web dinâmico para você no Eclipse. Agora vá comWindows > Show View > Project Explorer, e você verá a janela do seu projeto como a seguir -

Agora copie os seguintes arquivos da pasta struts 2 lib C:\struts-2.2.3\lib para o nosso projeto WEB-INF\libpasta. Para fazer isso, você pode simplesmente arrastar e soltar todos os arquivos a seguir na pasta WEB-INF \ lib.

  • commons-fileupload-x.y.z.jar
  • commons-io-x.y.z.jar
  • commons-lang-x.y.jar
  • commons-logging-x.y.z.jar
  • commons-logging-api-x.y.jar
  • freemarker-x.y.z.jar
  • javassist-.xy.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

Criar classe de ação

A classe de ação é a chave para o aplicativo Struts 2 e implementamos a maior parte da lógica de negócios na classe de ação. Então, vamos criar um arquivo java HelloWorldAction.java emJava Resources > src com um nome de pacote com.tutorialspoint.struts2 com o conteúdo fornecido abaixo.

A classe Action responde a uma ação do usuário quando o usuário clica em um URL. Um ou mais métodos da classe Action são executados e um resultado String é retornado. Com base no valor do resultado, uma página JSP específica é renderizada.

package com.tutorialspoint.struts2;

public class HelloWorldAction {
   private String name;

   public String execute() throws Exception {
      return "success";
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

Esta é uma classe muito simples com uma propriedade chamada "nome". Temos métodos getters e setter padrão para a propriedade "name" e um método execute que retorna a string "success".

A estrutura do Struts 2 criará um objeto do HelloWorldActionclasse e chama o método executado em resposta à ação de um usuário. Você coloca sua lógica de negócios dentro desse método que finalmente retorna a constante String. Em outras palavras, para cada URL, você teria que implementar uma classe de ação e pode usar esse nome de classe diretamente como seu nome de ação ou pode mapear para algum outro nome usando o arquivo struts.xml conforme mostrado abaixo.

Criar uma vista

Precisamos de um JSP para apresentar a mensagem final, esta página será chamada pelo framework Struts 2 quando ocorrer uma ação pré-definida e este mapeamento será definido no arquivo struts.xml. Então, vamos criar o arquivo jsp abaixoHelloWorld.jspna pasta WebContent em seu projeto eclipse. Para fazer isso, clique com o botão direito na pasta WebContent no explorador de projetos e selecioneNew >JSP File.

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

A diretiva taglib diz ao recipiente Servlet que esta página usará o Struts 2 tags e que essas tags serão precedidas por s.

A tag s: property exibe o valor da propriedade da classe de ação "nome> que é retornado pelo método getName() da classe HelloWorldAction.

Criar página principal

Também precisamos criar index.jspna pasta WebContent. Esse arquivo servirá como a URL de ação inicial em que um usuário pode clicar para dizer à estrutura do Struts 2 para chamar um método definido da classe HelloWorldAction e renderizar a visualização HelloWorld.jsp.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

o helloa ação definida no arquivo de visualização acima será mapeada para a classe HelloWorldAction e seu método de execução usando o arquivo struts.xml. Quando um usuário clica no botão Enviar, isso fará com que a estrutura do Struts 2 execute o método execute definido na classe HelloWorldAction e, com base no valor retornado do método, uma visualização apropriada será selecionada e processada como uma resposta.

Arquivos de configuração

Precisamos de um mapeamento para vincular a URL, a classe HelloWorldAction (modelo) e HelloWorld.jsp (a visualização). O mapeamento informa à estrutura do Struts 2 qual classe responderá à ação do usuário (a URL), qual método dessa classe será executado e qual visualização renderizar com base no resultado String que o método retorna.

Então, vamos criar um arquivo chamado struts.xml. Já que o Struts 2 requer que o struts.xml esteja presente na pasta de classes. Portanto, crie o arquivo struts.xml na pasta WebContent / WEB-INF / classes. O Eclipse não cria a pasta "classes" por padrão, então você precisa fazer isso sozinho. Para fazer isso, clique com o botão direito na pasta WEB-INF no explorador de projetos e selecioneNew > Folder. Seu struts.xml deve ser semelhante a -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   
   <package name = "helloworld" extends = "struts-default">
     <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

Poucas palavras que precisam ser entendidas em relação ao arquivo de configuração acima. Aqui, definimos a constantestruts.devMode para true, porque estamos trabalhando em ambiente de desenvolvimento e precisamos ver algumas mensagens de log úteis. Então, definimos um pacote chamadohelloworld.

Criar um pacote é útil quando você deseja agrupar suas ações. Em nosso exemplo, nomeamos nossa ação como "olá", que corresponde ao URL/hello.action e é apoiado peloHelloWorldAction.class. oexecute método de HelloWorldAction.class é o método que é executado quando o URL /hello.actioné invocado. Se o resultado do método execute retornar "sucesso", então levamos o usuário paraHelloWorld.jsp.

O próximo passo é criar um web.xmlque é um ponto de entrada para qualquer solicitação ao Struts 2. O ponto de entrada do aplicativo Struts2 será um filtro definido no descritor de implantação (web.xml). Portanto, definiremos uma entrada da classe org.apache.struts2.dispatcher.FilterDispatcher em web.xml. O arquivo web.xml precisa ser criado na pasta WEB-INF em WebContent. O Eclipse já havia criado um arquivo web.xml esqueleto para você quando criou o projeto. Então, vamos modificá-lo da seguinte maneira -

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee" 
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee 
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">
   
   <display-name>Struts 2</display-name>
   
   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
   
   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

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

Especificamos index.jsp como nosso arquivo de boas-vindas. Em seguida, configuramos o filtro Struts2 para ser executado em todos os urls (ou seja, qualquer url que corresponda ao padrão / *)

Para ativar o log detalhado

Você pode ativar a funcionalidade de registro completa enquanto trabalha com Struts 2 criando logging.properties arquivo sob WEB-INF/classespasta. Mantenha as duas linhas a seguir em seu arquivo de propriedade -

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
   java.util.logging.ConsoleHandler

O padrão logging.properties especifica um ConsoleHandler para rotear o log para stdout e também um FileHandler. O limite de nível de log de um manipulador pode ser definido usando SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST ou ALL.

É isso aí. Estamos prontos para executar nosso aplicativo Hello World usando a estrutura Struts 2.

Procedimento para executar o aplicativo

Clique com o botão direito no nome do projeto e clique Export > WAR File para criar um arquivo de guerra.

Em seguida, implante esse WAR no diretório webapps do Tomcat.

Finalmente, inicie o servidor Tomcat e tente acessar o URL http://localhost:8080/HelloWorldStruts2/index.jsp. Isso lhe dará a seguinte tela -

Insira um valor "Struts2" e envie a página. Você deve ver a próxima página

Observe que você pode definir index como uma ação no arquivo struts.xml e, nesse caso, você pode chamar a página de índice como http://localhost:8080/HelloWorldStruts2/index.action. Verifique abaixo como você pode definir o índice como uma ação -

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "index">
         <result >/index.jsp</result>
      </action>

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>