Introdução ao Struts 1.x – Parte II

Hoje, depois de muito tempo sem postar nada no blog,  estava estudando e testando um projeto com Struts para entender melhor seu fluxo de controle e resolvi escrever este post explicando mais ou menos como ele funciona.

Como o Struts funciona

Agora que já sabemos com o Struts é organizado, fica mais fácil entender como ele funciona. Uma das coisas mais importantes é entender que uma Action Servlet não é a mesma coisa que uma Action. Toda aplicação possui apenas uma Action Servlet, que recebe todas as requisições feitas para a nossa aplicação. Essas requisições sempre vêm acompanhadas de uma Action, a qual informa a Action Servlet se possui um Form ou não. Caso a Action possua um Form, a Action Servlet executa o método validate() do Form e através deste método é feita a validação do formulário (saber se algum campo veio nulo, se não respeita a quantidade mínima de caracteres, etc). Caso este formulário encontre algum erro, ele informa a Action Servlet, que a encaminha para uma view onde serão exibidas as mensagens de erro. Se nenhum erro for encontrado, ou se a Action não possui um Form, a Action Servlet executa o método execute() da Action. Ao final deste método, é retornado para a Action Servlet qual o próximo destino, o que pode ser uma simples página de view, como outra Action.

Esta troca de informações entre a Action e a Action Servlet é feita através do struts-config.xml, mostrarei em um post futuro as principais tags dele.

Podemos resumir a maneira como o Struts trabalha assim:

A – Request chega na Action Servlet

B – Action Servlet verifica no struts-config se esta Action possui um Form.

C – Método validate() do Form é executado, caso ocorra algum erro, retorna para a view determinada no XML.

D – Método execute() da Action é executado e retorna qual o destino da Action.

E – Vai para a view.

Pode parecer um pouco confuso, mas quando começamos a mexer com o Struts entendemos rapidamente como ele funciona. Para quem quiser saber mais sobre o Struts, estou indicando este link do site oficial.

Introdução ao Struts 1.x – Parte I

Decidi que antes de começar com Hibernate ou JSF, seria interessante começar pelo framework mais popular entre aplicações do passado. Apesar de parecer inútil, conhecer como funciona o Struts é uma boa oportunidade para entrar no mundo dos frameworks. O fator que mais pesou na minha escolha é o fato de que o Struts é realmente simples comparado a outros frameworks. Gostaria de lembrar que não sou nenhum especialista em Struts e que tudo que estou escrevendo aqui é o que aprendi nestes últimos dias.

Mas o que é um framework?

Framework é um conjunto de classes que foram desenvolvidas para resolver determinado problema. Entre esses problemas podemos destacar a manutenção de aplicações complexas, persistência de dados, realização de testes unitários, enfim tudo que você possa imaginar possui um framework.

Como o Struts é organizado

O Struts é formado pelos seguintes componentes:

Action Servlet: É o cérebro do Struts, é ele que controla todo o fluxo da aplicação, lifecycle dos objetos, tudo. Existe apenas um para a aplicação inteira e não precisa ser escrito, apenas declarado no web.xml.

Form Beans: Todos os formulários da aplicação possuem seu próprio Form Bean. Ele possui como atributo os campos do formulário, os quais são preenchidos pela Action Servlet utilizando os parâmetros passados pelos forms HTML. Para isto acontecer é necessário que os atributos do Form Bean possuam o mesmo nome dos parâmetros HTML. O Form Bean possui um método chamado validate() e é através dele que o Struts faz a validação dos campos.

Action: Cada Action é responsável por uma simples função de um caso de uso, como por exemplo cadastrar um usuário, remover um usuário, etc. Possuem um método chamado execute(), que é o local ideal para realizar chamadas à classes responsáveis pelas regras de negócio.

Struts-config.xml: É o arquivo responsável pelo mapeamento de toda a aplicação, é aqui que indicamos qual Form Bean pertence a cada Action, qual arquivo é responsável pelos textos que aparecem na aplicação, mapeamos uma Action para uma view, ou para outras Actions. Enfim é aqui que organizamos toda a aplicação.

Por enquanto é isso, até!

response.sendRedirect() X RequestDispatcher.forward()

Para quem está começando a estudar Servlets, é comum ter a dúvida sobre qual a diferença entre utilizar sendRedirect() e forward(). Basicamente a diferença é que o Redirect é tratado pelo browser , enquanto o RequestDispatcher é tratado pelo servidor. Mas no que isto implica?

RequestDispatcher é comumente utilizado para passar o controle da request para outro servlet. Ele envia os HTTPServletRequest  e HTTPServletResponse originais, e pode se comunicar com o servlet destino adicionando atributos na request. Outro fato curioso é que o RequestDispatcher não altera a URL do browser, pois o browser nunca fica sabendo que outra servlet foi chamada, ele apenas recebe uma response e a exibe. Porém isto pode trazer alguns problemas, pois se o usuário atualizar o browser(F5) o que será executado será o servlet que realizava alguma ação e não a página para visualização que foi enviada ao browser.

O Redirect trabalha diretamente com o browser, ele envia para o browser uma resposta que contém o endereço para onde o browser deve enviar uma nova requisição. A única maneira de se comunicar com o servlet/página destino é adicionando atributos na sessão ou através de parâmetros web(url?parametro=valor), já que é utilizado uma nova request.

A maneira mais fácil de saber quando usar cada um é pensar no seguinte: “Eu recebi uma requisição. Se estou passando esta requisição para outra pessoa me ajudar com ela, então estou fazendo um RequestDispatcher. Porém se eu não sei como lidar com esta requisição, eu peço para o meu cliente pedir a outra pessoa, o que seria um Redirect.”

No modelo de MVC, toda vez que o Controller deseja chamar uma View é utilizado um RequestDispatcher, onde ele envia atributos que a View necessita para ser exibida corretamente.

Acredito que sejam essas as principais diferenças entre o response.sendRedirect() e o RequestDispatcher.forward().

Até o próximo post.

CategoriasJava EE, Servlets

O primeiro post a gente nunca esquece…

Bem, hoje finalmente decidi criar um blog. Me inspirei no fato de que as aulas estão acabando e vou ter tempo para começar a estudar mais sobre J2EE. Pretendo escrever no blog sobre o que eu for estudando, o que vai me ajudar a consolidar o conhecimento e ainda vou poder ajudar outras pessoas que estejam com dificuldades para aprender determinados assuntos.

É isso, estou bem empolgado e só esperando as férias para começar a estudar.

CategoriasGeral
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.