Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Programação Servidor Sistemas web Aplicação Web – Java JSP-Servlet-DAO Aplicação Web Java JSP – Servlet - DAO • Para ilustrar uma aplicação Web Java, em camadas, será utilizada uma entidade de nome produto que terá 3 atributos. • A estrutura em camada está representada pelos elementos abaixo: – produto.jsp – representa uma das visões apresentadas ao– produto.jsp – representa uma das visões apresentadas ao usuário. Apresenta ou captura dados de um produto. Submete ações à Produto Servlet.java. – ProdutoBean.java – representa o modelo de dados de um produto, com seus atributos:codigo, descrição e valor unitário. – ProdutoServlet.java – representa o controle de fluxo da aplicação, processando a ação do usuário. – ProdutoDAO.java – representa todo o controle e processamento de acesso aos dados, operando sobre o modelo (ProdutoBean). Aplicação Web Java (diagrama UML) • A página tem 3 elementos de caixa de texto (type=text) e dois botões no padrão submit (type=submit). • Cada caixa de texto tem um nome de qualificação que são variáveis que levarão os dados até o container web Java (Tomcat). produto.jsp produto.jsp <tr> <td >CÓDIGO:</td><td><input type="text" name="cpo_codigo" cpo_codigo cpo_descricao cpo_valorunit <form name="frmProdutos" method="post" action="produtos" > size="12" value="<%= v_codigo%>"/></td></tr> <tr> <td >DESCRIÇÃO:</td><td><input type="text" name="cpo_descricao" size ="45" value="<%=v_descricao%>"/></tr> <tr> <td >VALOR UNIT:</td><td><input type="text" name="cpo_valorunit" size="10“ alue="<%=v_valorunit%>"/></td></tr> <td><input type="submit" name="btn_acao" value="Incluir" /></td> <td><input type="submit" name="btn_acao" value="Consultar" /></td> • Dada a interface abaixo com os dados preenchidos, ao acionar o botão Incluir, um envio de dados na forma de POST é feito ao container web. produto.jsp (submit incluir) • O destino dos dados será a URL-padrão definida no action da JSP (action=“produtos”). • Os dados serão enviados em formato de POST HTTP: cpo_codigo=45&cpo_descricao=Placa+de+Video&cpo_valo runit=259.80&btn_acao=Incluir • O container web Java recebe 4 variáveis: cpo_codigo=45 cpo_descricao=Placa+de+Video cpo_valorunit=259.80 btn_acao=Incluir O objeto request e os parâmetros btn_acao=Incluir • As 4 variáveis passam a ser parâmetros inseridos dentro do objeto request criado pelo container web. • Esse objeto request poderá ser acessado por Servlet ou JSP no contexto da aplicação Web em execução. • No POST enviado a partir da página produto.jsp, a URL-padrão (URL-pattern) definida é action=“produtos”. • Essa URL-pattern está mapeada no arquivo web.xml que é o descritor de publicação (deployment descriptor) da aplicação Web. • Com base no descritor, o container Web define que Container Web e ação a ser executada • Com base no descritor, o container Web define que ação tomar. No caso é instanciar e executar uma ProdutoServlet. <servlet-mapping> <servlet-name>ProdutoServlet</servlet-name> <url-pattern>/produtos</url-pattern> </servlet-mapping> • A classe atuará como controlador do fluxo de ação do usuário. • Após realizar a ação deve selecionar uma visão a ser apresentada, seja de sucesso da operação ou de exceção que tenha ocorrido. • A Servlet não constrói HTML e nem formata qualquer ProdutoServlet • A Servlet não constrói HTML e nem formata qualquer mensagem de erro para o usuário. • Uma página JSP será selecionada de acordo com a resposta a ser retornada. • A classe que continuará o processo da ação Incluir é a classe ProdutoServlet.java. • Por conta do envio ser POST o método doPost será acionado pelo container web. • No método doPost, a primeira lógica aplicada é descobrir que ação será executada: Incluir ou ProdutoServlet descobrir que ação será executada: Incluir ou Consultar? • Para a tomada da decisão a Servlet precisa obter o valor do parâmetro btn_acao e com base nesse valor processar a ação a ser executada. Classe ProdutoServlet (doPost) protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String acao = request.getParameter("btn_acao"); //O conteúdo do atributo VALUE do submit btn_acao = Incluir if (acao.equals("Incluir")) incluirProdutoincluirProduto((requestrequest, , responseresponse);); //apresentar página - Ainda não implementado else {else { RequestDispatcher rd = request.getRequestDispatcher("naoImplementado.jsp"); rd.forward(request, response); } } catch (Exception objEx) { request.setAttribute("objExcecao", objEx); RequestDispatcher rd = request.getRequestDispatcher("paginaErro.jsp"); rd.forward(request, response); } } Classe ProdutoServlet (incluirProduto) private void incluirProduto (HttpServletRequest request, HttpServletResponse response) throws Exception { try { String strCodigo = request.getParameter("cpo_codigo"); int icodigo = Integer.parseInt(strCodigo); String strDescricao = request.getParameter("cpo_descricao"); String strValor = request.getParameter("cpo_valorunit"); float fvalor = Float.parseFloat(strValor); ProdutoBeanProdutoBean produto = produto = newnew ProdutoBeanProdutoBean((icodigoicodigo, , strDescricaostrDescricao, , fvalorfvalor););fvalorfvalor);); ProdutoDAO dao = new ProdutoDAO(); daodao..incluirProdutoDAOincluirProdutoDAO(produto);(produto); RequestDispatcher rd = request.getRequestDispatcher("cadastrado.jsp"); rd.forward(request, response); } catch (Exception objEx) { request.setAttribute("objExcecao", objEx); RequestDispatcher rd = request.getRequestDispatcher("paginaErro.jsp"); rd.forward(request, response); } Classe ProdutoBean (entidade – model) public class ProdutoBean { private int codigo; private String descricao; private float valorUnit; public ProdutoBean(int codigo, String descricao, float valorUnit) { this.codigo = codigo; this.descricao = descricao; this.valorUnit = valorUnit; } • Na classe ProdutoServlet, foi instanciado o objeto produto• Na classe ProdutoServlet, foi instanciado o objeto produto da classe ProdutoBean. Este objeto será passado ao método incluirProduto da classe ProdutoDAO. produto codigo=45 descricao=“placa de video” valorunit=259.80 ProdutoBeanProdutoBean produto = produto = newnew ProdutoBeanProdutoBean((icodigoicodigo, , strDescricaostrDescricao, , fvalorfvalor);); daodao..incluirProdutoDAOincluirProdutoDAO(produto);(produto); • O código abaixo mostra a estrutura do construtor e dos demais métodos. Classe ProdutoDAO import java.sql.*; public class ProdutoDAO { Connection conexao = null; public ProdutoDAO () throws Exception { try { conexao = FabricaConexao.abreConexaoMySQL(); } catch (Exception ex){} catch (Exception ex){ throw ex; } } public void incluirProdutoDAO (ProdutoBean objProd) throws Exception { } public ProdutoBean consultarProdutoDAO (int codigo) throws Exception { } public void alterarProdutoDAO (ProdutoBean objProd) throws Exception { } public void excluirProdutoDAO (int codigo) throws Exception { } } Classe ProdutoDAO public void incluirProdutoDAO (ProdutoBean produto) throws Exception Connection conexao = FabricaConexao.abreConexaoMySQL(); try { String insere = "INSERT INTO TBProdutos VALUES (?, ?, ?)"; produto codigo=45 descricao=“placa de video” valorunit=259.80 • O código abaixo mostra a implementação do método incluirProdutoDAO String insere = "INSERT INTO TBProdutos VALUES (?, ?, ?)"; PreparedStatement comandoSQL = conexao.prepareStatement(insere); comandoSQL.setInt(1, produto.getCodigo()); comandoSQL.setString(2, produto.getDescricao()); comandoSQL.setFloat(3, produto.getValorUnit()); comandoSQL.execute(); }catch (Exception e){ throw new Exception ("Erro inserir produto dao:"+e.getMessage()); } finally { conexao.close(); } }