Академический Документы
Профессиональный Документы
Культура Документы
APLICAÇÕES DO MODELO 2
Nota
A publicação entitulada Applications Programming in Smalltalk-80(TM): How to
use Model-View-Controller (MVC) por Steve Burbeck, Ph.D, fala sobre o padrão
MVC. Você pode encontrá-la em http://st-www.cs.uiuc.edu/users/smarch/st-
docs/mvc.html.
Uma função trivial similar pode usar mais de uma action. Por exemplo,
adicionar um produto poderia requerer duas actions:
1. Mostrar o formulário “Adicionar Produto”, para entrar com as
informações do produto.
2. Salvar o dado em uma base de dados.
Como mencionado acima, você usa a URI para informar ao controlador
qual action invocar. Por exemplo, para fazer com que a aplicação envie o
formulário “Adicione Produto”, você deverá usar a seguinte URI:
http://domain/appName/Product_input.action
Para fazer com que a aplicação salve o produto, a URI poderia ser:
http://domain/appName/Product_save.action
O controlador verifica cada URI para decidir qual action invocar. Ele
também armazena o objeto action em um local que possa ser acessado pela
apresentação, tal que valores do lado do servidor possam ser mostrados no
navegador. Finalmente, o controlador usa um objeto RequestDispatcher,
para encaminhar a requisição à camada de apresentação (JSP). No JSP,
você pode usar custom tags para mostrar o conteúdo de um objeto action.
Nas próximas duas seções, eu apresento duas aplicações simples do
Modelo 2. A primeira usa um servlet como o controlador e a segunda usa
um filtro.
package app01a;
import java.io.Serializable;
A Classe ControllerServlet
A classe ControllerServlet (apresentada na Listagem 1.2) estende a
classe javax.servlet.http.HttpServlet. Ambos os métodos, doGet e doPost,
chamam o método process, que é o cérebro do controlador servlet. Sei que
é um pouco estranho que a classe para um controlador servlet deva ser
chamada ControllerServlet, mas estou seguindo a convenção que diz que
todas as classes de servlet devam terminar com Servlet.
CAPÍTULO 1 – APLICAÇÕES DO MODELO 2 7
package app01a;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
product.setDescription(
request.getParameter(“description”));
product.setPrice(request.getParameter(“price”));
// executa o método action
product.save();
// armazena action numa variável de escopo para a cama-
da de apresentação
request.setAttribute(“product”, product);
}
Nota
A extensão.action em cada URI é a extensão default usada em Struts 2 e, portanto,
usada aqui.
CAPÍTULO 1 – APLICAÇÕES DO MODELO 2 9
As Camadas de Apresentação
A aplicação utiliza duas JSPs para as camadas de apresentação da
aplicação. O primeiro JSP, ProductForm.jsp, é exibido se a action for
Product_input.action. A segunda página, ProductDetails.jsp, é mostra-
da para Product_save.action. ProductForm.jsp é dado na Listagem 1.3
e ProductDetails.jsp, na Listagem 1.4.
<html>
<head>
<title>Add Product Form</title>
<style type=”text/css”>@import url(css/main.css);</style>
</head>
<body>
<div id=”global”>
<h3>Add a product</h3>
<form method=”post” action=”Product_save.action”>
<table>
<tr>
<td>Product Name:</td>
<td><input type=”text” name=”productName”/></td>
</tr>