2
���������������� ���������������������������� ������������
������� ����� ������������� �������������� ������� ������������ �������� ���������� �������� �� ���!"����#�
��� ����� ���� � ������#����� � �������������
�����
�������� �������� #��������������$��� �
��� � ����������������� ��% ��
�������� ��!"����� �" � ����������� �� ���&��
��������������������
'� ��������� ����� ������� ���� ����� � ����
����������� �(�����������������������
3
����������������
)���� ��������������� *��� ���� +��������� �,������
�������� ���������� ������ ���� � �� �� �
����������������������
-������� ��� ��� �������� �������� �������� ���� � ������������ ������������ ������������ ������������
4
���������������� ������������������������������ ��������������
����� � �������������������� �.�����.�����.�����.����� � �
���������� ����������������� � �� �� � �� ��� � �� �� � �� ��� � �� �� � �� ��� � �� �� � ��
������������� ��������� �� ������
/��/��/��/�� ����� ��������� ��� ���� �� ����� ������
�������������� ������������� ������������� ������������� ��������
5
������ !"� ������ ����������������� !"� ������ �����������
0�0�0�0��������(���������(���������(���������(�� ������������#�
��� ����� �� "!���#��� ����� �� "!���#��� ����� �� "!���#��� ����� �� "!���#����� ���� ������. �������
� ��� �������� ��% �� � �� �!��������� ���
$ ������ �� "����� �� "!���
����� �����������#����� �����������#����� �����������#����� �����������#���� � ��������� ����
" ��������#�.���������� ���-���� ������ �
��� $������ �������� ��������111
������. & �������������(����������(����������(����������(���� ��������� ���������������� ���������������� ���������������� ��������
6
��������#��������#����������������#��������#��������
0�� ������. ��0�� ������. ��0�� ������. ��0�� ������. �� � �� � � �� � � �� � � �� � � � ��� ������������������������������������������������������������ ���� ��������� "�������� ����
������ ��% �� � �� �������� �������*������������ �$(����� �� ������������,
2������� ���������������������������� ��� ���������� ���
� �� ���% ��� ��� ���������������������� � �
���� $ ������� ���������� �� ����� ������ �
.�����&���� ����"������������� �� ����� �������
7
���#� �#��$�����%�����%����������#� �#��$�����%�����%�������
•Implementado como Servlet•Recebe os dados do cliente•Instancia os beans da camada demodelo
•Processa as informações •Seleciona o visualizador adequado à resposta (JSP)
Controlador(Define comportamento da app)
•Implementado com JSP•Recebe os dados do cliente•Acessa o modelo para extrair as
informações•Formata a página de saída
Visualizador(Constrói e atualiza o modelo)
•Implementado como JavaBeans•Responde a consulta de estado•E criado pelo controlador quepreenche o seu conteúdo
Modelo(Encapsula o estado da
aplicação)
•Implementado como Servlet•Recebe os dados do cliente•Instancia os beans da camada demodelo
•Processa as informações •Seleciona o visualizador adequado à resposta (JSP)
Controlador(Define comportamento da app)
•Implementado como JSP•Recebe os dados do cliente•Acessa o modelo para extrair as informações
•Formata a página de saída
Visualizador(Constrói e atualiza o modelo)
•Implementado como JavaBeans•E criado pelo controlador quepreenche o seu conteúdo
Modelo(Encapsula o estado da
aplicação)
Página HTML
O atributo action da tag do form aponta para um Servlet que receberá as informações
FormHTML
1
Banco de Dados
Bean Funcional
2
Quando necessário a servlet usa o beanfuncional para armazenar ou recuperar as informações
3
A servlet instancia os beans do modelo ourecupera os já criados da sessão do usuário
4
Seleciona qual JSP fará a montagem da página JSP e faz o redirecionamento. Os obj do modelo podem ser passados através do objeto request ou da sessão do usuário
5
6A página é enviada ao cliente
A página JSP selecionada acessa os obj do modelo para extrair as informações que serão exibidas na tela
9
�����"�#��������������������� �������������"�#��������������������� ��������
��� ���������!"����������� ������������� � �.��.�� ������ ��� ����� � �� ���� ����������� � �������� �����
���������������� �� �����&�������������" ����� ���� ���������������� � ���� ��� � ������ #
� �� ����������� �� ���$������������������ ������� ������� ������� ������ ������!�������!�������!�������!�������"�����34� *��� ���5,
������������������� ����������� ������������� � ������������� � ������������� � ������������� � �� �.� ��� �.� ��� �.� ��� �.� ��*��� ���6,
10
���������������� &����� '���������������� &����� '
Páginas JSP(Visão + controle)
JavaBeans
Banco de Dados(Modelo)
Requisição
Resposta
Servlet(Controle)
Requisição
JavaBeans(Modelo)
Páginas JSP(Visão)
Banco deDados
SelecionaVisão
Atualiza
Resposta
Model 1
Model 2
Baseado no padrão arquitetural MVC
11
($��������#������'�����($��������#������'�����
Operacao
executar():abstract
OperacaoIncluir
executar()
<< Servlet >>ServletControlador
<< JSP >>paginaErro
<< JSP >>inclusaoOk
<< JSP >>alteracaoOk
<< JSP >>exclusaoOk
<< Form HTML >>index
<< BeanFuncional >>DAO
<< BeanNegocio >>Usuario
Model
View
Control
Pacotes
incluir/alterar/excluir
Padrão de Projeto chamado Command. Consiste em usar polimorfismo para construir objetos que encapsulam um comando e oferecer um único método executar() com a implementação do comando a ser executado
Padrão de Projeto chamado Command. Consiste em usar polimorfismo para construir objetos que encapsulam um comando e oferecer um único método executar() com a implementação do comando a ser executado
OperacaoAlterar
executar()
OperacaoExcluir
executar()
BD
executa
estende
Grava/recupera
despacha
usa
usa
depende
13
�#�$)*����#�$)*���
<html>
<head> <title>Demo MVC</title></head>
<body>
<form name="form1" method="POST" action="/exemplo_mvcweb/servlet/controle/Controlador">
Nome: <input name="nome" type="text" id="nome"> Idade:<input name="idade" type="text" id="idade"> CPF.: <input name="cpf" type="text" id="cpf">
<input name="cmd" type="submit" value="incluir">
<input name="cmd" type="submit" value="alterar">
<input name="cmd" type="submit" value="excluir">
</form>
</body>
</html>
14
+�� ���������,��)$���+�� ���������,��)$���
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi=""xsi:schemaLocation="web-app_2_4.xsd“ version="2.4">
<servlet><servlet-name>Controlador</servlet-name><servlet-class>controle.ServletControlador</servlet-class></servlet><servlet-mapping><servlet-name>Controlador</servlet-name><url-pattern>/servlet/controle/Controlador</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.htm</welcome-file><welcome-file>index.html</welcome-file>
</welcome-file-list><error-page>
<error-code>404</error-code><location>/error.jsp</location>
</error-page></web-app>
15
-��#./��0���)1�%�-��#./��0���)1�%�
package modelo;
public class Usuario {
private String nome;
private String cpf;
private String idade;
public Usuario() { }
public Usuario(String nome, String cpf, String idade) {
this.nome = nome; this.cpf = cpf; this.idade = idade;
}
public String getCpf() { return cpf; }
public void setCpf(String cpf) {this.cpf = cpf; }
public String getIdade() { return idade; }
public void setIdade(String idade){this.idade = idade; }
public String getNome() {return nome; }
public void setNome(String nome) {this.nome = nome;}
}
16
-��#2�# ��#��-��#2�# ��#��
public class DAO {
public static void alterarUsuario(Usuario usuario) {
// TODO Auto-generated method stub
}
public static void incluirUsuario(Usuario usuario) {
// TODO Auto-generated method stub
}
public static void excluirUsuario(Usuario usuario) {
// TODO Auto-generated method stub
}
}
3������#�������4���������������� ������3������#�������4���������������� ������
package controle;import javax.servlet.http.HttpServletRequest;/*** Esta classe define um método abstrato executar que deverá* ser implementado nas subclasses concretas*/public abstract class Operacao {
private String proxPagina="/exemplo_mvcweb/paginaErro.jsp?msg=Operação sem redirecionamento";
public Operacao() { }public Operacao(String pagina) { this.proxPagina = pagina;}//este método deve ser implementado pelas operações filhaspublic abstract void executar(HttpServletRequest request)
throws Exception;public String getProxPagina() { return proxPagina; }public void setProxPagina(String novaPagina) { proxPagina = novaPagina; }
}17
package controle;import javax.servlet.http.HttpServletRequest;import modelo.DAO;import modelo.Usuario;public class OperacaoIncluir extends Operacao {
public void executar(HttpServletRequest req) throws Exception {
try {// Instancia um usuário com as informações do formulárioUsuario usuario = new Usuario(req.getParameter("nome"),
req.getParameter("cpf"), req.getParameter("idade"));
// Utiliza o bean DAO para acessar o bancoDAO.incluirUsuario(usuario);// Indica a próxima página a ser apresentadasetProxPagina("/inclusaoOk.jsp");request.setAttribute("usuario", usuario);
} catch(Exception e) {setProxPagina("/exemplo_mvcweb/paginaErro.jsp?msg="
+ e.getMessage());} }
}
3������#�������4���������������� ������3������#�������4���������������� ������
18
package controle;import javax.servlet.http.HttpServletRequest;import modelo.DAO;import modelo.Usuario;public class OperacaoAlterar extends Operacao {
public void executar(HttpServletRequest req) throws Exception {
try {// Instancia um usuário com as informações do formulárioUsuario usuario = new Usuario(req.getParameter("nome"),
req.getParameter("cpf"), req.getParameter("idade"));
// Utiliza o bean DAO para acessar o bancoDAO.alterarUsuario(usuario);// Indica a próxima página a ser apresentadasetProxPagina("/alteracaoOk.jsp");request.setAttribute("usuario", usuario);
} catch(Exception e) {setProxPagina("/exemplo_mvcweb/paginaErro.jsp?msg="
+ e.getMessage());}}
}
3������#�������4���������������� ������3������#�������4���������������� ������
19
package controle;import javax.servlet.http.HttpServletRequest;import modelo.DAO;import modelo.Usuario;public class OperacaoExcluir extends Operacao {
public void executar(HttpServletRequest req) throws Exception {
try {// Instancia um usuário com as informações do formulárioUsuario usuario = new Usuario(req.getParameter("nome"),
req.getParameter("cpf"), req.getParameter("idade"));
// Utiliza o bean DAO para acessar o bancoDAO.excluirUsuario(usuario);// Indica a próxima página a ser apresentadasetProxPagina("/exclusaoOk.jsp");request.setAttribute("usuario", usuario);
} catch(Exception e) {setProxPagina("/exemplo_mvcweb/paginaErro.jsp?msg="
+ e.getMessage());}}
}
3������#�������4���������������� ������3������#�������4���������������� ������
20
package controle;. . .public final class ServletControlador extends HttpServlet {// O conjunto de operações disponíveis neste controlador fica// armazenado em um HashMapprivate HashMap mapOperacoes = new HashMap();private ServletContext contexto;
/*** Este método é usado para cadastrar as operações do * controlador. A cada operação associa um nome no HashMap* que será usado mais tarde para realizar uma busca*/public void init(ServletConfig config) throws ServletException{
super.init(config);contexto = config.getServletContext();mapOperacoes.put("incluir", new OperacaoIncluir());mapOperacoes.put("alterar", new OperacaoAlterar());mapOperacoes.put("excluir", new OperacaoExcluir());
}
���%�����#��������&�5����%�����#��������&�5�
21
public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String strOp = request.getParameter("cmd");Operacao operacao = null;if (strOp == null) {
redireciona("/exemplo_mvcweb/paginaErro.jsp?msg=Atividade não encontrada", request, response);
}// Tenta localizar a atividade correspondente ao // comando recebido e executá-lotry {
operacao = getOperacao(strOp);operacao.executar(request);
} catch (Exception e) {// redireciona para a página de errothis.redireciona("/exemplo_mvcweb/paginaErro.jsp
?msg=“ + e.getMessage(), request, response);}
// caso esteja tudo certo, redireciona para a página apropriadathis.redireciona(operacao.getProxPagina(), request, response);
}}
���%�����#��������'�5����%�����#��������'�5�
22
// Método utilizado para localizar uma operação no HashMap
public Operacao getOperacao(String strOp) throws Exception {
if (strOp == null) {
throw new Exception("String null recebida");
}
Operacao objOp = (Operacao) mapOperacoes.get(strOp);
if(objOp == null) {
throw new Exception("Operação não definida");
} else return objOp;
}
private void redireciona(String pagina, HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// Transfere o controle para a página especificada na string // [pagina]
RequestDispatcher rd = contexto.getRequestDispatcher(pagina);
rd.forward(request, response);
}
���%�����#��������5�5����%�����#��������5�5�
23
24
�# �����46)1���# �����46)1��
<%@ page language ="java" %>
<%@ page import = "modelo.Usuario" %>
<html> <head><title>Inclusão</title></head>
<body>
<%--
<jsp:useBean id="usuario" scope="request" class="Usuario"/>
Inclusão do Usuário: <jsp:getProperty name="usuario" property = "nome"/> Ok.
--%>
<%--
<% Usuario usuario = (Usuario)(request.getAttribute("usuario"));%>
Inclusão do Usuário: <%= usuario.getNome()%> Ok.
--%>
<jsp:useBean id="usuario" scope="request" class="Usuario"/>
Inclusão do Usuário: ${usuario.nome} Ok.
</body></html>
Gera o mesmo resultado
24