Arquitetura MVC para Aplicações Web

Embed Size (px)

DESCRIPTION

Arquitetura MVC para Aplicações Web com exemplo no NetBeans.

Citation preview

IFPA Curso de Tecnologia em Anlise e Desenvolvimento de Sistemas

Engenharia da WebDesenvolvimento de Software na Web - Arquitetura de Software - Padro Arquitetural MVC - Aplicao web com JSP e Servlet

Prticas em NetBeansProf. Cludio Martins [email protected]

Objetivos da Aula

Apresentar e empregar as tecnologias JSP e Servlet para desenvolvimento de aplicaes web com MVC, usando a IDE Netbeans.

2

Processamento de formulrio, para exibio de dados em todas as pginas Considere uma pgina de um formulrio de login.

Aps a identificao do nome do usurio, todas as pginas seguintes devem exibir esse nome.pag1 Homepage pag2

3

Mapa de Navegao

4

Viso arquitetnica MVC p/ Web/Java1 {nome} Controlador (servlet)

2

>

4> homepage.jsp

3usuario.bean

55

Cdigos (formulrio, Servlet e pgina homepage.jsp) Informe seu nome:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nomeUsuario = request.getParameter("nome"); request.getSession().setAttribute("USUARIO_NOME", nomeUsuario); request.getRequestDispatcher("homepage.jsp").forward(request, response); } // fim do mtodo Hello World! Bem vindo ${USUARIO_NOME}
Chama pgina 1
Chama pgina 2 6

Esteretipos UML para MVCO uso de esteretipos em UML pemite representar objetos com semntica prpria. Um esteretipo representado por um cone ou um texto entre

e

Boundary (fronteira) representam objetos que realizam a interfaceda fronteira entre o sistema com os atores de interao. So as pginas web contendo apenas controles de interao com o usurio.

Controller (controlador) representam objetos que realizam o controledo sistema, instanciando os objetos de dados e a navegao entre os objetos de fronteira. Na arquitetura Java (web) so os servlets. Podem ser pginas JSP contendo apenas comandos de controle, no existindo marcas HTML de sada.

Entity (entidade de dados) representam objetos que armazenamos dados processados no sistema. So os objetos java beans, contendo os dados manipulados na aplicao.7

Passos para construo no NetBeans

Para realizar o cdigo usando o IDE Netbeans, foi utilizado as seguintes verses:

Netbeans: 7.1 Tomcat: 7.x OBS: ao usar verses anteriores a essas, voc ter que observar alguns detalhes de configurao.

8

Passo 1: Escolher o tipo de projeto Web

Abra o Netbeans e escolha no menu: Arquivo Novo Projeto Em seguida, escolha o tipo do projeto: Java Web Aplicao Web

9

Passo 2: Definir o local (pasta) onde ficar o projeto

Defina o diretrio (pasta) onde ficar o projeto.

10

Passo 3: Definir o servidor web

Escolha o servidor web. Caso ele no esteja na lista, clique em Adicionar (deve estar instalado na sua mquina). Neste exemplo usaremo o Tomcat.

11

Passo 4: Definio de frameworks de apoio

Neste caso, no usaremos nenhum. Clique em Finalizar

12

Projeto gerado no NetBeans

Ao finalizar o projeto construdo (ver figura) e uma pgina inicial criada (index.jsp).

13

Executando (exibindo) a pgina index.jsp

Por padro criado no projeto web a pgina index.jsp. Ao executar o arquivo index.jsp a pgina exibida no browser que est definido como default do sistema.

Ou clique em RUN

Caso o projeto seja o Principal.

14

Exibio da pgina index.jsp

15

Definio do formulrioCrie um novo arquivo JSP ou aproveite o arquivo index.jsp para criar um formulrio como na figura a seguir.

Informe seu nome:

16

Criando a classe Servet (Controlador)

Utilize os atalho e siga os passos:

17

Nome e localizao do Servlet

O nome do Servlet Controlador Defina o pacote com nome de controle

18

Caso voc esteja usando uma especificao de servidor Tomcat 5, marque a opo Adicionar informao ao descritor...

Finalizando o processo de criao do Servlet

19

Exibindo o contedo do Servlet

O Netbeans gera um cdigo de teste para exibir ao executar o servlet.

20

Ajustando o cdigo do servlet

Para o nosso exemplo, delete o corpo do cdigo do mtodo processRequest e insira o cdigo (em azul):

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nomeUsuario = request.getParameter("nome"); request.getSession() .setAttribute("USUARIO_NOME", nomeUsuario); request.getRequestDispatcher("homepage.jsp") .forward(request, response); } // fim do mtodo21

Cdigo da pgina homepage.jsp

22

Cdigo das pginas pag1.jsp e pag2.jsp

23

Atividades Prticas

24

Atividade Prtica 21. Elaborar uma aplicao web, usando a arquitetura MVC (Modelo-Viso-Controle) para realizar um simulador financeiro, seguindo o cenrio:1. Um cliente de um banco virtual escolhe o tipo da aplicao (poupana ou renda fixa), informa o valor a investir e o tempo (em meses) de investimento. 2. A aplicao calcula e retorna ao cliente o resultado ms a ms dos rendimentos acumulados, considerando o tempo investido, o valor e a taxa mensal (fixar em 0.5% ao ms para a poupana e 0.8% ao ms para renda fixa).25

Navegao

26

Arquitetura da aplicao1 Simulador (servlet) {tipo_aplicacao, meses, valor}

simula.jsp

2

>

4>

3rendimento.bean

result.jsp

527

Etapas para a construo do Projeto1. Criar um projeto no Netbeans do tipo Aplicao web 2. Criar a classe servlet Simulador 3. Criar a classe Rendimento (que ser a base do objeto bean a ser exibido na pgina de resultado) 4. Criar as pginas JSP: simula e resultado

28

Classe Rendimento...Crie a classe Rendimento com os seguintes atributos (ver abaixo). Em seguida, gere os mtodos Get e Sets...

29

Codificando simula.jsp

Adicione o cdigo referente ao formulrio...

30

Continuao

Complete o cdigo da classe Servlet para tratar o recebimento dos dados (vindos do formlrio). Crie um objeto do tipo (classe) Rendimento, setando os valores vindos do formulrio Crie um mtodo na classe Rendimento para calcular os rendimentos mensais conforme o tipo de aplicao. No mtodo service (ou processRequest do Servlet), salve o objeto Rendimento como bean e chame a pgina de resultado (deve ser criada) A pgina de resultado deve exibir os dados calculados, obtidos a partir do bean anterior.31

Tratando o recebimento dos dados (vindos do formlrio) no Servlet.protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // recebendo os parmetros do formulrio. String tipoAplic = req.getParameter("aplicacao"); Float valor = Float.valueOf(req.getParameter("valor")); Integer meses = Integer.valueOf(req.getParameter("meses")); System.out.println("valores = " + tipoAplic + " v=" + valor + " meses="+ meses); // atribui os dados ao objeto "rend" Rendimento rend = new Rendimento(); rend.setMeses(meses); rend.setTipoAplicacao(tipoAplic); rend.setValor(valor); rend.calcularRendimentos(); // mtodo que calcula os rendimentos da aplicao // salva o objeto Vector com os rendimentos mensais (como bean de request). req.setAttribute("rendimento_bean", rend.getRendMensais()); // repassa para a pgina de resultado. req.getRequestDispatcher("result.jsp").forward(req, resp); }

32

Explicando o objeto Request HttpServletRequest req Ver em http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/http/HttpServletRequest.html

HttpServletRequest classe interface que fornece informaes da solicitao oriunda via HTTP, para o servlet tratar. req o nome dado ao objeto (instanciado) no cdigo. Normalmente, d-se o nome req, request, solicitacao, ou qualquer outro nome que lembre o objeto no mtodo da classe Servlet.

No caso de pginas JSP, esse objeto implcito e denominado request

33

Mtodos da classe HttpServletRequest getParameter(String nomeParametro) retorna um valorString Retorna o valor de um parmetro originado na solicitao como um String, ou null se o parmetro no existir.

setAttribute(String nomeBean, Object obj)Armazena (em memria) um objeto como atributo (bean) na solicitao corrente.

getRequestDispatcher(String pginaURL) retorna um objeto RequestDispatcher

Retorna um objeto RequestDispatcher que age como um wrapper para a localizao de um recurso definido na pginaURL. forward(ServletRequest request, ServletResponse response) Repassa uma solicitao de um servlet para outro recurso (servlet, JSP, ou pgina HTML) de um servidor.34

A classe RequestDispatcher prov o mtodo forward:

Mtodo para calcular os rendimentos mensais (na classe Rendimento)public void calcularRendimentos() { rendMensais = new Vector(); rendimentoFinal = valor; float taxa = 0; if (tipoAplicacao.equals("POUPANCA")) taxa = 0.05F; // 5% if (tipoAplicacao.equals("RENDA-FIXA")) taxa = 0.08F; // 8% for (int i = 0; i < meses; i++) { rendimentoFinal = rendimentoFinal * taxa + rendimentoFinal; rendMensais.addElement(new Float(rendimentoFinal)); } } // fim do mtodo35

Pgina result.jsp - exibe os dados calculados, obtidos a partir do bean rendimento_bean Resultado - Clculo 36

** fim da aula **

37