Buscar

Estrutura de Aplicações Web Java - MVC

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Continue navegando