Baixe o app para aproveitar ainda mais
Prévia do material em texto
����������� � ���� ����� ������������������ � ���� ����� ������� ��������� �� � ������� 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 de modelo •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 que preenche o seu conteúdo Modelo(Encapsula o estado da aplicação) •Implementado como Servlet •Recebe os dados do cliente •Instancia os beans da camada de modelo •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 que preenche 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 Form HTML 1 Banco de Dados Bean Funcional 2 Quando necessário a servlet usa o bean funcional para armazenar ou recuperar as informações 3 A servlet instancia os beans do modelo ou recupera 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 6 A 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 de Dados Seleciona Visã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 12 (�������� � ���� ����(�������� � ���� ���� 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 filhas public 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ário Usuario usuario = new Usuario(req.getParameter("nome"), req.getParameter("cpf"), req.getParameter("idade")); // Utiliza o bean DAO para acessar o banco DAO.incluirUsuario(usuario); // Indica a próxima página a ser apresentada setProxPagina("/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ário Usuario usuario = new Usuario(req.getParameter("nome"), req.getParameter("cpf"), req.getParameter("idade")); // Utiliza o bean DAO para acessar o banco DAO.alterarUsuario(usuario); // Indica a próxima página a ser apresentada setProxPagina("/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ário Usuario usuario = new Usuario(req.getParameter("nome"), req.getParameter("cpf"), req.getParameter("idade")); // Utiliza o bean DAO para acessar o banco DAO.excluirUsuario(usuario); // Indica a próxima página a ser apresentada setProxPagina("/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 HashMap private 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á-lo try { operacao = getOperacao(strOp); operacao.executar(request); } catch (Exception e) { // redireciona para a página de erro this.redireciona("/exemplo_mvcweb/paginaErro.jsp ?msg=“ + e.getMessage(), request, response); } // caso esteja tudo certo, redireciona para a página apropriada this.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
Compartilhar