Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Cadastro jsp java, Notas de estudo de Cultura

cadastro de dados em java

Tipologia: Notas de estudo

2012

Compartilhado em 23/09/2012

carlos-brasil-14
carlos-brasil-14 🇧🇷

1 documento

Pré-visualização parcial do texto

Baixe Cadastro jsp java e outras Notas de estudo em PDF para Cultura, somente na Docsity! UNIÃO EDUCACIONAL MINAS GERAIS S/C LTDA FACULDADE DE CIÊNCIAS APLICADAS DE MINAS Autorizada pela Portaria no 577/2000 – MEC, de 03/05/2000 BACHARELADO EM SISTEMAS DE INFORMAÇÃO DESENVOLVIMENTO DE UM SISTEMA DE VENDAS NA WEB UTILIZANDO JSP RAFAEL FERREIRA BARALE Uberlândia 2007 RAFAEL FERREIRA BARALE DESENVOLVIMENTO DE UM SISTEMA DE VENDAS NA WEB UTILIZANDO JSP Trabalho de Final de curso submetido à UNIMINAS como parte dos requisitos para a obtenção do grau de Bacharel em Sistemas de Informação. Orientador: Prof. Msc. Silvio Bacalá Jr Uberlândia 2007 AGRADECIMENTOS Primeiramente a Deus, por estar ao meu lado iluminando os caminhos que passei até hoje. A minha família, meus pais, irmãos e minha namorada, por sempre estarem junto a mim, me apoiando e incentivando para que eu pudesse concluir o curso de Sistemas de Informação. A UNIMINAS, pela oportunidade de fazer o curso, conhecer tantos profissionais qualificados, e principalmente ao meu orientador, Prof. Silvio Bacalá Jr., pela paciência e dedicação de um mestre. RESUMO Este trabalho apresenta uma importante evolução na criação de web sites, a tecnologia JSP (Java Server Pages). É uma tecnologia utilizada para desenvolver sites com conteúdos dinâmicos, dentre as diversas tecnologias disponíveis atualmente no mercado, como: PHP, ASP, ColdFusion, Perl, entre outras. JSP possui suas principais características herdadas da própria linguagem Java, como: portabilidade, facilidade de programação, flexibilidade, eficiência e, não podendo esquecer, o fato de ser uma tecnologia gratuita, o que permite ao desenvolvedor usufruir todos os recursos disponíveis por ela. Antes de iniciar o estudo sobre JSP, são apresentadas algumas características e conceitos sobre a tecnologia Servlet. Entendendo o funcionamento da tecnologia Servlet fica mais prático estudar JSP. Também são apresentadas ferramentas necessárias na utilização da tecnologia JSP, alguns detalhes de suas instalações e configurações básicas para o desenvolvimento de projetos. Este trabalho é finalizado com o desenvolvimento de um projeto em JSP, um site que demonstra o funcionamento de uma loja virtual, contemplando o diagrama de casos de uso do projeto, as páginas que compõem o projeto e os códigos que implementam as funcionalidades do projeto. Palavras Chave: Internet, Servidor, Web, Servlet, Java Server Pages. ABSTRACT This work presents important tool on web sites creation, the JSP (Java Server Pages). Among several tools disposable us to PHP, ASP, ColdFusion and Perl, JSP technology is useful to aim sites development what have dynamics contents. The main JSP features are legacy of property Java language: portability, fixture feasible, flexibility and efficient. By the principal fact watch is free technology, JSP enable to use all disposable resources. Previously in the study, some features about the Servlet technology and concepts are presents, because the understanding about Servlet operation allow easy in JSP study. Subsequently, are presents require tools on JSP technology utilization us to anyhow installation and basic configuration to projects development. Finally, this work shows one project development by use JSP. The created site demonstrates e-commerce operation, by visualizing some diagram about project use event, its compound pages and implementer’s codes to functionality. Key word: Internet, Server, Web, Servlet, Java Server Pages. LISTA DE QUADROS Quadro 01: Diferença de Linguagens.................................................................................25 Quadro 02: Objetos Implícitos...........................................................................................34 Quadro 03: Métodos Objeto Config...................................................................................35 Quadro 04: Diretório do Apache Tomcat ...........................................................................41 LISTA DE ABREVIATURAS E SÍMBOLOS API – Application Program Interface ASP – Active Server Pages CGI – Common Gateway Interface DER – Diagrama Entidade Relacionamento EJB – Enterprise JavaBean HTML – HyperText Markup Language HTTP – HyperText Transfer Protocol IDE – Integrate Development Environment J2EE – Java 2 Enterprise Edition J2SDK – Java 2 Standard Development Kit JDBC – Java Data Base Connectivity JSP – Java Server Pages JVM – Java Virtual Machine PHP – HyperText Preprocessor SGBD – Sistema de Gerenciamento de Banco de Dados SQL – Structure Query Language URL – Universal Resource Locater WAR – Web Application Archive WWW – Word Wide Web SUMÁRIO 1 INTRODUÇÃO ....................................................................................................................................13 1.1 CENÁRIO ATUAL..............................................................................................................................13 1.2 IDENTIFICAÇÃO DO PROBLEMA .........................................................................................................14 1.3 OBJETIVOS DO TRABALHO ...............................................................................................................14 1.4 JUSTIFICATIVA PARA A PESQUISA .....................................................................................................14 1.5 ORGANIZAÇÃO DO TRABALHO .........................................................................................................15 2 SERVLET............................................................................................................................................17 2.1 ARQUITETURA DE UM SERVLET........................................................................................................17 2.2 HIERARQUIA SERVLET ....................................................................................................................18 2.2.1 Http Servlet ...........................................................................................................................19 2.2.2 Http Servlet Request.............................................................................................................19 2.2.3 Http Servlet Response..........................................................................................................20 2.3 CICLO DE VIDA DE UM SERVLET.......................................................................................................20 2.4 GERENCIAMENTO DE SESSÃO .........................................................................................................21 3 JAVA SERVER PAGES .....................................................................................................................23 3.1 FUNCIONAMENTO ...........................................................................................................................23 3.2 DIFERENÇA ENTRE LINGUAGENS SCRIPTS. .......................................................................................24 3.3 AÇÕES JSP ...................................................................................................................................25 3.3.1 <jsp:param>..........................................................................................................................25 3.3.2 <jsp:forward> ........................................................................................................................26 3.3.3 <jsp:include>.........................................................................................................................26 3.3.4 <jsp:plugin> ..........................................................................................................................27 3.3.5 <jsp:getProperty> .................................................................................................................28 3.3.6 <jsp:setProperty>..................................................................................................................28 3.3.7 <jsp:useBean>......................................................................................................................29 3.4 JAVA BEANS...................................................................................................................................30 3.5 PROPRIEDADES DE UM JAVA BEAN ..................................................................................................31 3.5.1 Propriedades indexadas. ......................................................................................................31 3.5.2 Propriedades booleanas.......................................................................................................31 3.6 DIRETIVAS......................................................................................................................................32 3.6.1 Include ..................................................................................................................................32 3.6.2 Page .....................................................................................................................................32 3.7 DECLARAÇÕES ...............................................................................................................................32 3.8 EXPRESSÕES. ................................................................................................................................33 3.9 SCRIPTLETS. ..................................................................................................................................33 3.10 OBJETOS IMPLÍCITOS ....................................................................................................................34 3.10.1 Objeto Page........................................................................................................................34 3.10.2 Objeto Config......................................................................................................................35 3.10.3 Objeto Request...................................................................................................................35 3.10.4 Objeto Response ................................................................................................................35 3.10.5 Objeto Out ..........................................................................................................................36 3.10.6 Objeto Session. ..................................................................................................................36 3.10.7 Objeto Application...............................................................................................................37 3.10.8 Objeto pageContext............................................................................................................37 3.10.9 Objeto Exception ................................................................................................................38 4 FERRAMENTAS PARA O DESENVOLVIMENTO DE APLICAÇÕES WEB UTILIZANDO JSP .....39 4.1 PRÉ- REQUISITOS ...........................................................................................................................39 4.2 INSTALAÇÃO DO J2SDK..................................................................................................................40 4.3 INSTALAÇÃO E CONFIGURAÇÃO DO APACHE TOMCAT ........................................................................41 4.4 INSTALAÇÃO DO ECLIPSE 3.2 ..........................................................................................................42 4.5 INICIANDO O APACHE TOMCAT.........................................................................................................42 4.6 INICIANDO O ECLIPSE......................................................................................................................43 14 1.2 Identificação do problema Com o aumento expressivo na quantidade de usuários da Internet nos últimos anos, percebeu-se a necessidade de uma interação mais ágil e flexível com estes usuários. Por este motivo surgiram os chamados “sites dinâmicos”. Os sites dinâmicos possuem capacidade de receber e processar as informações de seus usuários, reagindo às mesmas em tempo real. A fundamental diferença entre um site estático e um dinâmico é a capacidade adicional que o site dinâmico tem de interatividade. No site estático, o fluxo de informação segue apenas no sentido do servidor ao usuário; já no site dinâmico, o fluxo de informação ocorre em ambos sentidos. Se, no início, a Internet era composta, principalmente, de páginas estáticas com conteúdo institucional, hoje ela oferece uma infinidade de aplicações com conteúdo dinâmico e personalizado. 1.3 Objetivos do trabalho O objetivo deste trabalho é apresentar um estudo sobre a tecnologia Java Server Pages (JSP), que é utilizada para a criação de sites dinâmicos. Este trabalho também irá monstrar como utilizar ferramentas necessárias para o desenvolvimento de projetos em JSP, finalizando com o desenvolvimento de um projeto simples e eficaz, de um sistemas de vendas na web utilizando o Java Server Pages. 1.4 Justificativa para a pesquisa Atualmente existem diversas tecnologias no mercado que possibilitam o 15 desenvolvimento de sites dinâmicos, seja para construir um simples site com conteúdo dinâmico, ou mesmo um complexo sistema de comercialização, que utiliza ferramentas que possibilitam consulta a bancos de dados, integração com sistemas corporativos, entre outras inúmeras funcionalidades. Dentre estas tecnologias, o Java Server Pages oferece diversas vantagens em relação ao uso de outras tecnologias (como PHP, ASP e CGI). As principais vantagens são herdadas da própria linguagem Java, que tem como característica: •Portabilidade: a aplicação desenvolvida pode ser implantada em diversas plataformas, como por exemplo, Windows, Unix e Macintosh; •Facilidade de programação: a programação é orientada a objetos, simplificando o desenvolvimento de sistemas complexos. •Flexibilidade: o Java já se encontra bastante difundido, contando com uma enorme comunidade de desenvolvedores, ampla documentação e diversas bibliotecas e códigos prontos, dos quais o desenvolvedor pode usufruir. Além dessas vantagens, pode-se destacar também, a licença gratuita da tecnologia JSP, permitindo ao desenvolvedor usufruir todas as ferramentas e recursos necessários e disponíveis pela tecnologia. 1.5 Organização do Trabalho Este trabalho está dividido em seis capítulos: • Os capítulos 2 e 3 apresentam a fundamentação teórica do trabalho, utilizando-se da pesquisa bibliográfica onde são abordados conceitos sobre as tecnologias Servlet e Java Server Pages. • O capítulo 4 descreve quais ferramentas necessárias para desenvolver aplicações web utilizando a tecnologia Java Server Pages. 16 • O capítulo 5 demonstra o desenvolvimento de um projeto web, apresentado os resultados obtidos. • No capítulo 6 são apresentadas as conclusões do trabalho. 19 2.2.1 Http Servlet Esta classe estende a classe javax.servlet.GenericServlet, possuindo basicamente seis métodos que são chamados automaticamente conforme as requisições HTTP. Se o browser (navegador) faz uma solicitação através do método get, no Servlet irá ser chamado o método doGet(). Os seis métodos são: doPost(); utilizado para envio de dados ao servidor, uma única vez. doGet();utilizado para envio de dados ao servidor, repetidas vezes. doPut(); permite enviar um arquivo ao servidor. doDelete(); permite remover um documento ou uma página do servidor. doOption(); determina quais opções do HTTP são suportadas. doTrace(); fornece resposta com todos cabeçalhos enviados. Os métodos mais usados são: doGet() e doPost(). 2.2.2 Http Servlet Request As solicitações que o navegador envia através do usuário ao servidor, sendo informações importantes, tais como cookies1 e referenciador, são tratadas a partir do objeto HttpServletRequest passado a um método doGet ou doPost. Assim, são recuperados cabeçalhos e parâmetros passados ao servidor, entre outros. Seus principais métodos são: getHeaderNames(); - busca todos os nomes do cabeçalho. getHeader(); - busca todos os valores do cabeçalho. _____________ 1 Cookie é um arquivo texto (.txt) contendo informações pertinentes ao usuário enviados pelo servidor. 20 getQueryString(); - busca a Query String completa. getParameterName(); - busca todos os nomes dos parâmetros getParameterValues(); - recuperação de parâmetros de múltiplos valores getParameter(); recuperação de parâmetros simples. 2.2.3 Http Servlet Response A interface HttpServletResponse oferece diversos métodos específicos de protocolo. Sempre há necessidade de especificar a saída para o browser, através dos métodos setContentType, usado para definir o tipo de informação passada, e getWriter, utilizado para escrever textos. Abaixo segue um exemplo de código de utilização dos métodos setContentType e getWriter. Exemplo: response.setContentType(“text/html”); PrintWrite out = response.getWriter(); Com os métodos aplicados a essa interface, pode-se enviar cookies ao browser, manipular URLs2 enviados ao browser e até mesmo gerenciar sessões. 2.3 Ciclo de Vida de um Servlet. Em qualquer Servlet é preciso implementar direta ou indiretamente a interface javax.servlet.Servlet. O ciclo de vida de um servlet é determinado por três de seus métodos: init, service e destroy. Os servidores carregam e executam o servlet, que, por sua vez, aceita uma ou mais requisições de clientes e retornam dados para o mesmo. Os servidores podem também remover os servlets. A figura 03 ilustra o ciclo de vida de um servlet. _____________ 2 URL (Universal Resource Locator) – Código para Localização Universal, permite acessar um serviço na rede web. 21 Figura 03 - Ciclo de vida de um Servlet Carregar: Quando um servidor carrega um servlet, ele invoca o método init() do mesmo. Como a maioria dos servlets roda em servidores multi-thread3, não há concorrência durante a inicialização dos mesmos. Isto ocorre devido ao fato do servidor chamar somente uma vez o método init() quando carrega o servlet, e não o chamará de novo a não ser que o servlet seja recarregado. O servidor não pode recarregar um servlet até que o mesmo seja removido pelo método destroy(). Executar: Após o servidor carregar e inicializar o servlet, o mesmo está apto a receber requisições do usuário. Cada requisição possui uma chamada ao método run() em sua própria thread4 do servlet. O método recebe a requisição do usuário e envia a resposta. Os servlets podem executar vários métodos de serviços de uma vez. Remover: Os servlets permanecem em execução até que sejam removidos. Quando um servidor remove um servlet, ele executa o método destroy() do mesmo. O método é executado somente uma vez. O servidor não executará o método destroy() novamente até que o servlet seja recarregado e reinicializado. 2.4 Gerenciamento de Sessão O protocolo de rede que os servidores web e browsers cliente usam para se comunicar é o HTTP. Os servidores HTTP não mantêm qualquer informação a respeito dos navegadores que estão conectados a eles. As conexões HTTP são iniciadas por um browser _____________ 3 Servidores com mais de um fluxo de controle seqüencial. 4 Fluxo de controle seqüencial dentro de um programa. 24 verificado apenas se ocorreram ou não quaisquer mudanças; caso negativo, apenas o bytecode é chamado para gerar a página HTML. A figura 05 ilustra esse funcionamento. Figura 05 – Funcionamento JSP Vale lembrar que existe uma pequena lentidão no primeiro acesso a página JSP devido à compilação do JSP em Servlets (bytecode .class). A partir do segundo acesso, as páginas JSP executam com maior rapidez. JSP usa a linguagem Java como base para a sua linguagem de Scripts, aproveitando todo seu potencial, motivo pelo qual JSP apresenta-se muito mais flexível e robusto. 3.2 Diferença entre linguagens scripts. Existem várias linguagens scripts usadas para criar aplicações Web. Entre elas ASP, PHP, ColdFusion e Perl. O quadro 01 apresenta as principais diferenças entre essas linguagens. JSP ASP ColdFusion Perl PHP Sistemas Operaciona is Windows, Linux, Unix Windows Windows, Linux, Unix Windows, Linux, Unix, Mac OS Windows, Linux, Unix Servidores Apache, Sun One, Netscape PWS, IIS Apache, IIS, Sun One, Netscape Apache, IIS Apache, IIS Banco de Dados Oracle, DB2, Sybase, Informix Access, SQL Server, Oracle, DB2, Informix Access, SQL Server, Sybase, DB2, Oracle, Informix Access, MySQL, Oracle, DB2, Sybase, Informix Access, MySQL, Oracle, DB2, Sybase, Informix 25 JSP ASP ColdFusion Perl PHP Prós - Portabilidad e - Todos os recursos da linguagem Java - Gratuito - Grande base no mercado - Fácil aprendizad o - Sintaxe simples, parecida com HTML - Integração com produtos Macrome dia - Gratuito - Expansivo por meio de módulos - Gratuito - Sintaxe simples Contras - Exige conhecimen to Java - Só roda nativamen te no Windows - Base instalada pequena - Custo adicional com servidor - Sintaxe complexa - Não há suporte oficial, mas comunidade atuante presta ajuda - Não há suporte oficial, mas comunidad e atuante presta ajuda Quadro 01 – Diferença entre linguagens O quadro 01 apresenta também os prós e contras na utilização das linguagens. Deve- se levar em consideração que a linguagem JSP necessita de um único componente para que execute suas aplicações em diversas plataformas: a Máquina Virtual Java (JVM). A Máquina Virtual Java é responsável por traduzir o bytecode em código nativo, independente do sistema operacional utilizado. 3.3 Ações JSP As ações JSP executam diversas funções que estendem a capacidade de JSP. Na maioria das vezes são usadas para manipular JavaBeans (em 3.5 será visto). Existem sete tipos de ações, a seguir apresentadas. 3.3.1 <jsp:param> Esta ação, como o próprio nome diz, define um parâmetro. Sintaxe: <jsp:param name="nomeParâmetro" value="valor” /> 26 Exemplo: <jsp:param name=”total” value=”<%total%>”/> 3.3.2 <jsp:forward> A ação forward transfere os dados de uma solicitação contendo informações da requisição do usuário de uma página JSP para outro arquivo JSP, HTML ou Servlet, desde que façam parte de uma mesma aplicação. Sintaxe: <jsp:forward page = “(URL relativa | <%= expressão %>)”/> ou <jsp:forward page = “(URL relativa | <%= expressão %>)”/> <jsp:param name = “nome do parâmetro” value = “(valor do parâmetro | <%= expressão %>)”/> </jsp:forward> Exemplo: <jsp:forward page = “selecimg.jsp”> <jsp:param name = “totalimg” value = <%=totalimg%>”/> </jsp:forward> 3.3.3 <jsp:include> Este elemento permite incluir um arquivo estático ou dinâmico numa página JSP. O resultado de incluir um ou outro são diferentes. Se o arquivo é estático, seu conteúdo é incluído quando a página é compilada num servlet. Se for dinâmico, funciona como uma requisição para o arquivo e manda o resultado de volta para a página. Quando estiver terminada a ação do include continua-se processando o restante da página. Sintaxe: <jsp:include page = “ ( URL relativa | <%=expressão %>)” flush=”true”/> 29 3.3.7 <jsp:useBean> A ação “jsp:useBean” é responsável por localizar ou criar uma nova instância de um JavaBean. Esta ação possui as propriedades: id, scope e class, onde id é uma variável que identifica o bean, scope é o escopo no qual o bean existe e no qual a variável definida por id estará disponível, os valores da propriedade scope podem ser: page, request, session e application, a propriedade class cria uma instância de um bean a partir de uma class. Quando o valor da propriedade scope for “page”, o bean poderá ser usado dentro de uma página JSP que contenha o elemento jsp:useBean, caso o valor seja “request” o bean pode ser usado a partir de qualquer página JSP processando a mesma requisição, com o valor igual a “session” o bean existirá durante toda a sessão do usuário, já com o valor sendo application, o bean poderá ser usado a partir de qualquer página na mesma aplicação web da página que o criou. Sintaxe: <jsp: useBean id=”nome” scope=”page|request|session|application” class=”nome completo da classe”> . . . </jsp:usebean> Exemplo: <jsp:useBean id =”clientes” class =”Clientes” scope =”page”> <jsp:setProperty name =”clientes” property =”nome” value =”Jose”> <jsp:setProperty name =”clientes” property =”telefone” value=”3265-5687”/> </jsp:useBean> 30 3.4 Java Beans JavaBeans são, na verdade, classes Java reutilizáveis que seguem algumas regras bem definidas para nomeação de seus métodos e variáveis. A idéia por trás do uso desses JavaBeans em páginas JSP é que eles encapsulem a lógica da aplicação, separando-a do restante da página. Para efeitos de uso dessas classes em páginas JSP, é necessário seguir algumas regras básicas no desenvolvimento: 1- O construtor da classe, se declarado, não deve receber nenhum argumento. 2- Podem existir um ou mais métodos públicos para a definição de valores de propriedades do JavaBean; esses métodos são chamados de métodos setter. 3- Podem existir um ou mais métodos públicos para a obtenção de valores de propriedades do JavaBean; esses métodos são chamados de métodos getter. A figura 06 mostra um exemplo de classe JavaBean que implementa uma lógica básica. Figura 06 – Classe JavaBean 31 3.5 Propriedades de um Java Bean Os atributos são definidos como privados, com métodos get e set para acessá-los, que então serão públicos, conforme a sintaxe abaixo. Sintaxe: private String nome; public String getNome() {return nome;} public void setNome(String novo) {nome = novo;} Uma boa convenção de nome de propriedades é começar com letra minúscula e colocar em maiúscula a primeira letra de cada palavra subseqüente. Assim como nos métodos de ajuste, a palavra set ou get começa em minúscula e a primeira letra da propriedade será maiúscula. Exemplo: private String corCarro; public String getCorCarro( ); 3.5.1 Propriedades indexadas. É a propriedade que possui um conjunto de valores, por meio de métodos pode-se acessar o conjunto completo de valores ou mesmo acessar um elemento especifico. private String[ ] telefone; public String[ ] getTelefone(); public void setTelefone (int index); 3.5.2 Propriedades booleanas A propriedade booleana possui dois valores: verdadeiro e falso. Para as propriedades booleanas, pode-se substituir a palavra get por is. private boolean enabled; public Boolean isEnabled(); 34 3.10 Objetos Implícitos Como uma característica conveniente, o container JSP deixa disponíveis objetos implícitos que podem ser usados nos scriptlets e expressões, sem que o autor tenha que criá- los. Estes objetos instanciam classes definidas na API (Application Progam Interface) de Servlets. A seguir o quadro 02 mostra os principais objetos implícitos, suas classes e descrição destes objetos. Objeto Classe ou Interface Descrição Page javax.servlet.jsp.HttpJspPage Instância de servlet da pagina Config javax.servlet.ServletConfig Dados de configuração do servlet Request javax.servlet.http.HttpServletRequest Dados de solicitação incluindo parâmetros Response javax.servlet.http.HttpServletResponse Dados da resposta Out javax.servlet.jsp.JspWriter Fluxo de saída para o conteúdo da página Session javax.servlet.http.HttpSession Dados de sessão específicos de usuário application javax.servlet.ServletContext Dados compartilhados por todas as páginas de aplicação pageContext javax.servlet.jsp.PageContext Dados de contexto para execução da página Exception javax.lang.Throwable Erros não capturados ou de execução Quadro 02 – Objetos Implícitos 3.10.1 Objeto Page. O objeto page representa a própria página JSP ou, mais especificamente uma instância da classe de servlet na qual a página foi traduzida. Abaixo segue um exemplo utilizando o objeto implícito page: <%@ page info="Página de Teste" %> ..... <%= ((javax.servlet.jsp.HttpJspPage)page).getServletInfo() %> 35 3.10.2 Objeto Config. O objeto config armazena dados de configuração do servlet – na forma de parâmetros de inicialização - para a qual uma página JSP é compilada. O objeto config é uma intância da interface javax.servlet.ServletConfig. Estão listados abaixo os métodos fornecidos por esta interface. Métodos Descrição EnumerationgetInitParameterNames() Recupera o nome de todos os parâmetros de inicilização String getInitParameter(String name) Recupera o valor do parâmetro de inicilização a partir de um nome Quadro - 03 Métodos do objeto config. As páginas JSP raramente são escritas para interagir com parâmetros de inicialização, por isso, este objeto é pouco utilizado na prática. 3.10.3 Objeto Request O objeto request representa a solicitação que acionou o processamento da página atual. Para solicitações de protocolo HTTP, este objeto fornece acesso a todas as informações associadas à página, incluindo sua fonte, a URL solicitada e quaisquer cabeçalhos, cookies ou parâmetros associados com a solicitação. Exemplo: // Retorna o endereço de rede (IP) do host que enviou a solicitação. Seu IP é :<%= request.getRemoteAddr() %> // Retorna o nome totalmente qualificado do host que enviou a solicitação. Seu Host é :<%= request.getRemoteHost() %> 3.10.4 Objeto Response O objeto response representa a resposta que será enviada de volta para o usuário como resultado do processamento da página JSP. 36 Exemplo ... // Atribui o valor definido pela variável "value" ao cabeçalho especificado por "name" response.setHeader (String name, String value); 3.10.5 Objeto Out Este objeto implícito representa o fluxo da saída para a página, cujo conteúdo será enviado para o navegador como o corpo de sua resposta. Exemplo: ... //retorna à página a palavra UNIMINAS out.println(“UNIMINAS”); … 3.10.6 Objeto Session. Este objeto implícito representa a sessão atual de um usuário individual. Todas as solicitações feitas por um usuário são partes de uma única série de interações com o servidor web, ou seja, parte de uma sessão. Desde que novas solicitações por aquele usuário continuem sendo recebidas pelo servidor, a sessão persiste. Se, no entanto, um período de tempo passar sem que qualquer nova solicitação do usuário seja recebida, a sessão expira. O objeto session, então, armazena informações a respeito da sessão. Os dados específicos de aplicação são tipicamente adicionados à sessão através de atributos, usando os métodos de interface javax.servlet.http.HttpSession. O objeto session não está disponível para todas as páginas JSP. Seu uso é restrito às páginas que participam do gerenciamento da sessão, o que é indicado através do atributo session da diretiva page. O padrão é que todas as páginas participem do gerenciamento de sessão. Se o atributo estiver definido para false, o objeto não estará disponível e seu uso resultará em um erro de compilação quando o container JSP tentar traduzir a página para um servlet. 39 4 FERRAMENTAS PARA O DESENVOLVIMENTO DE APLICAÇÕES WEB UTILIZANDO JSP Atualmente existem ferramentas que auxiliam o desenvolvedor na criação de aplicações web e estas ferramentas têm o objetivo de agilizar o processo de desenvolvimento de uma aplicação, evitando que grandes trechos de códigos sejam implementados. As ferramentas utilizadas nos exemplos aqui mostrados possuem código livre, podendo ser utilizadas sem nenhum custo para o desenvolvedor. 4.1 Pré- requisitos O primeiro passo para desenvolver aplicações Web com Servlets e páginas JSP é a configuração de um ambiente básico para a implantação e execução dessas aplicações. Esse ambiente básico pressupõe a instalação de dois componentes principais: o Java 2 Standard Development Kit (J2SDK), utilizado para compilar aplicações Java, e um Servlet Container, que irá executar os Servlets e páginas JSP desenvolvidas. “o container é o componente responsável por dar suporte para as APIs de servlet e JSP .” (Caleum,2006) Alguns sistemas operacionais já possuem um J2SDK instalado. Caso ainda não se encontre instalado, é possível obtê-lo no site oficial do Java (http://java.sun.com). Neste site é possível selecionar entre as versões de J2SDK para as diversas plataformas de mercado tais como Windows, Linux, Solaris e outros. O Servlet Container será responsável por prover um framework básico para as diversas aplicações desenvolvidas, inicializando–as, distribuindo as requisições entre elas e tratando os resultados do processamento de cada aplicação. Existem diversos servidores disponíveis no mercado, como: IIS, Sun One, Netscape, 40 Apache, dentre outros. Nos exemplos aqui mostrados será usado o Apache Tomcat, disponível no site http://jakarta.apache.org. Esse servidor de aplicações atende às especificações mencionadas anteriormente e pode ser utilizado sem nenhum custo para o desenvolvedor. Um último componente utilizado para desenvolver Servlets e páginas JSP é um ambiente gráfico de desenvolvimento (IDE). Nos exemplos a seguir será utilizado o Eclipse 3.2 que pode ser encontrado no site oficial (http://www.eclipse.org). O Eclipse é um dos ambientes gráficos mais utilizados atualmente e não gera nenhum custo aos usuários. O Eclipse traz em sua instalação alguns plugins básicos para desenvolvimento, mas existem outros que facilitam muito o trabalho do desenvolvedor, como o Lomboz para trabalhar com JSP e Servlets, e o Sysdeo para interação com o Tomcat. Para desenvolvimento de aplicações Web com Servlets e páginas JSP, utilizando o Eclipse, serão utilizados dois plugin´s, um para interação do Eclipse com o Container que é o plugin Sysdeo, disponível no site http://www.sysdeo.com/eclipse/tomcatplugin, e o outro para gerar Servlets e JSP´s (Lomboz), disponível no site http://forge.objectweb.org/projects/lomboz . Para a utilização correta dos plugins, é necessário que possuam versão correspondente a do Eclipse. 4.2 Instalação do J2SDK A versão do J2SDK utilizada nos exemplos a seguir é a 5.0, para plataformas Windows XP e, como visto anteriormente, pode ser encontrada no site oficial do Java (http://java.sun.com). O processo de instalação do J2SDK é típico, uma vez iniciado, basta seguir corretamente as instruções do “assistente de ajuda”. O processo é simples e rápido. 41 4.3 Instalação e configuração do Apache Tomcat No site oficial do Apache Tomcat estão disponíveis versões do software com instaladores para os diversos sistemas operacionais. O processo de instalação é simples e um tutorial deste processo está disponível no site http://www.mhavila.com.br/topicos/java/tomcat.html. Uma vez finalizado, tem-se um servidor de aplicações pronto para produção. Para entender um pouco mais a fundo o funcionamento do Tomcat, deve-se examinar os diretórios criados durante o processo de instalação. Os principais diretórios criados podem ser vistos no quadro 04: Quadro 04 – Diretório do Apache Tomcat A figura 07 ilustra a estrutura de diretórios do Apache Tomcat. Figura 07 – Estrutura de diretórios do Apache Tomcat 44 Figura 12 - Alterando a workspace 4.7 Configurando o Ambiente do Eclipse Ao iniciar o desenvolvimento de um novo projeto no Eclipse, é necessário configurar o ambiente do mesmo, para possibilitar a comunicação do projeto com o Tomcat e desenvolver páginas JSP e Servlets. Para configurar o projeto com o Tomcat, deve-se acessar no menu “Window”, a opção “Preferences” (Figura 13). Figura 13 - Configurando o Tomcat no Eclipse Na tela Preferences, selecionar a opção Tomcat. Em “Tomcat version” selecionar a versão instalada do Tomcat, neste caso a 5.X. Em “Tomcat home” selecionar o diretório do Tomcat (“C:\Arquivos de programas\Apache Software Foundation\Tomcat 5.5”). A tela “Preferences” deve ficar da mesma forma como é mostrado na figura 14. 45 Figura 14 - Tela Preferences Na opção “Tomcat Manager App”, deve-se especificar o nome e a senha do administrador do Tomcat. Clicar no botão “Add user to tomcat-users.xml” e clicar em “OK”, observando que “administrador” e “senha” foram definidos anteriormente, no processo de instalação do Apache Tomcat. O segundo passo é configurar o Eclipse para que possa gerar páginas JSP e Servlets. Para isto, deve-se selecionar no menu “Window” a opção “Customize Perspective”, na qual mostrada na figura 15. Figura 15 - Configurando JSP no Eclipse Em “Shortcut Categories” selecionar a opção “web”, como mostra a figura 15. Na 46 aba “commands”, selecionar a opção “tomcat” e clicar em “OK”. Após realizar estes dois processos, o ambiente Eclipse está configurado para o desenvolvimento de um novo projeto. 49 Senha incorreta. 3.3) Sistema exibe mensagem “Senha inválida” 3.4) Voltar para o passo 2 do fluxo principal Caso de uso 2: Cadastrar usuário. Objetivo: Cadastrar novo usuário no sistema. Ator: Usuário. Prioridade: Essencial. Pré-condições: Usuário não cadastrado. Resultados: Usuário cadastrado no sistema. Fluxo de eventos Principal: Cadastrar usuário. 1) Sistema solicita dados do novo usuário 2) Usuário informa dados solicitados 3) Usuário solicita a gravação dos dados 4) Sistema valida dados 5) Sistema grava dados do novo usuário Fluxos Secundários: Usuário existente. 4.1) Sistema exibe mensagem “Usuário já cadastrado” 4.2) Voltar para o passo 2 do fluxo principal 4.3) Sistema exibe mensagem “Dados obrigatórios não informado” 4.4) Voltar para o passo 2 do fluxo principal Senha diferente da confirmação. 4.5) Sistema exibe mensagem “Senha digitada diferente da confirmada” 4.6) Voltar para o passo 2 do fluxo principal Caso de uso 3: Adicionar no carrinho. Objetivo: Adicionar produtos no carrinho. Ator: Usuário. Prioridade: Essencial. Pré-condições: Usuário logado no sistema Resultados: Produto adicionado no carrinho. Fluxo de eventos Principal: Adicionar produto no carrinho. 50 1) Sistema informa lista de produtos. 2) Usuário seleciona o(s) produto(s) e quantidade desejada 3) Sistema adiciona produtos ao carrinho 4) Sistema informa lista de produtos adicionados ao carrinho Fluxos Secundários: Produto não selecionado. 3.1) Sistema exibe mensagem “Nenhum produto selecionado” 3.2) Voltar para o passo 2 do fluxo principal Caso de uso 4: Remover do carrinho. Objetivo: Remover algum determinado produto do carrinho Ator: Usuário. Prioridade: Desejável. Pré-condições: Produto adicionado ao carrinho Resultados: Produto removido do carrinho. Fluxo de eventos Principal: Remover Produto do Carrinho de Compras. 1) Sistema informa lista de produtos adicionados ao carrinho 2) Usuário seleciona o produto que deseja remover 3) Sistema remove produto do carrinho 4) Sistema informa produtos existentes no carrinho Fluxos Secundários: Produto não selecionado. 3.1) Sistema exibe mensagem “Nenhum produto selecionado” 3.2) Voltar para o passo 2 do fluxo principal Caso de uso 5: Fechar Pedido. Objetivo: Salvar o pedido no banco de dados. Ator: Usuário. Prioridade: Essencial. Pré-condições: Produto adicionado ao carrinho Resultados: Pedido armazenado no banco de dados. Interface associada: Figura 20. Fluxo de eventos Principal: Fechar Pedido de Compras. 51 1) Sistema informa lista de produtos adicionados ao carrinho 2) Usuário solicita o fechamento do pedido 3) Sistema verifica produtos adicionados ao carrinho 4) Sistema grava os produtos ao pedido Fluxos Secundários: Produto não adicionado ao carrinho. 3.1) Sistema exibe mensagem “Nenhum produto no carrinho” 3.2) Voltar para o passo 2 do fluxo principal do caso de uso 3. Caso de uso 6: Visualizar Endereço. Objetivo: Permitir o usuário validar o endereço de entrega. Ator: Usuário. Prioridade: Importante. Pré-condições: Usuário cadastrado no sistema. Resultados: Endereço de entrega confirmado. Fluxo de eventos Principal: Confirmação do endereço de Entrega. 1) Sistema informa Endereço de entrega cadastrado 2) Usuário confirma o endereço de entrega do pedido 3) Sistema mantém armazenado o endereço de entrega do pedido Fluxo de eventos Alternativo: Alterar o endereço de entrega. 1) Usuário solicita a alteração do endereço. 2) Sistema disponibiliza a alteração do endereço. Caso de uso 7: Alterar Endereço Objetivo: Permitir ao usuário a alteração do endereço de entrega. Ator: Usuário. Prioridade: Desejável. Pré-condições: Usuário cadastrado no sistema. Resultados: Endereço de entrega alterado. Fluxo de eventos Principal: Alteração do Endereço de Entrega. 1) Sistema solicita dados do novo endereço de entrega. 2) Usuário informa dados solicitados. 54 5.4 Diagrama de navegabilidade. O diagrama de navegação mostra como os usuários navegarão através do site, este diagrama ilustra a seqüência das páginas em forma de árvore e os links existentes entre elas, a figura 20 representa o diagrama de navegabilidade do projeto. Figura 20 – Diagrama de Navegabilidade. 5.5 Implementação do código JSP 5.5.1 Fazer login no sistema O primeiro código a ser implementado é o código da interface efetuar login (figura 21). A figura 22 ilustra o código que implementa esta interface. E a figura 23 ilustra o diagrama de seqüência ao efetuar o login. 55 Figura 21 – Interface Efetuar login. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <center><b>Para logar-se, informe seu login e senha:</b></center><br/><br /> <form name="Login" method="post" action="Login.jsp"> <table width="20%" border="1" align="center"> <tr> <td colspan="2"> <div align="center"><b>Login</b></div> </td> </tr> <tr> <td width="8%">Email</td> <td width="92%"> <input type="text" name="email" size="50" maxlength="50"> </td> </tr> <tr> <td width="8%">Senha</td> <td width="92%"> <input type="password" name="senha" size="10" maxlength="10"> </td> </tr> </table> <p align="center"> <input type="submit" name="Login" value="Login"> <input type="reset" name="Limpar" value="Limpar"> </p> </form> <p align="center"><a href="Cadastro.jsp" target="_parent">Usuario nao cadastrado</a></p> </body> </html> Figura 22 – Código Interface Login. 56 Figura 23 – Diagrama de seqüência Efetuar Login. O sistema solicita as credencias necessarias para efetuar o login, e-mail e a senha. Caso seja o primeiro acesso, o usuário deve acessar o link “Usuário não cadastrado”, que direciona para a página de cadastro de cliente (figura 25), permitindo o usuário cadastrar-se ao sistema. A figura 24 implemeta o código que faz a autenticação do usuário, quando o mesmo efetua o login. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.sql.*"%> <%@ page errorPage="Erro.jsp" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <%//Recuperendo o email e a senha digitada String email = request.getParameter("email"); String senha = request.getParameter("senha"); //Estabelecendo a conexão com o banco de dados Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Rafael/Monografia/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"adm","1234"); //Confirmando se o usuário está cadastrado e se os dados foram digitados corretamente try { PreparedStatement pstmt = ligacao.prepareStatement(" select senha from Cliente where email = ?"); pstmt.setString(1, email); ResultSet rs = pstmt.executeQuery(); if ( !rs.next() ) { String msg = "Login inválido"; throw new Exception(msg); } else { String senhaBD = rs.getString("senha"); 59 <td align="center" colspan="2"><b>(*) Campos obrigatórios</td> </tr> </table> <p align="center"> <input type="submit" name="Gravar" value="Gravar"> <input type="reset" name="Limpar" value="Limpar"> </p> </form> </body> </html> Figura 26 - Código Interface Cadastro Cliente. Na figura 26 o sistema solicita todas as informações necessárias para efetuar o cadastro de novo cliente. Na opção “Gravar”, o sistema grava as informações no banco de dados, na opção “Limpar”, o sistema apaga todos os dados digitados nos campos. Na figura 27 segue o código que implementa opção “Gravar” e a figura 28 exibe o diagrama de seqüência cadastar cliente. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page errorPage="Erro.jsp" %> <%@ page import="java.sql.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <% /* Obtendo os campos do formulário */ String email = request.getParameter("email"); String nome = request.getParameter("nome"); String rua = request.getParameter("rua"); String bairro = request.getParameter("bairro"); String numero = request.getParameter("numero"); String complemento = request.getParameter("complemento"); String cep = request.getParameter("cep"); String senha = request.getParameter("senha"); String confSenha = request.getParameter("ConfSenha"); /* Confirmando os campos obrigatórios */ if ( email.trim().equals("") || nome.trim().equals("") || rua.trim().equals("") || bairro.trim().equals("") || numero.trim().equals("") || senha.trim().equals("") || confSenha.trim().equals("") ) { String msg = "Os campos marcados com (*) são obrigatórios."; throw new Exception(msg); } /*confirmando se a senha é igual a confirmação */ if ( !senha.equals(confSenha) ) { String msg = "Senha diferente da Confirmação"; throw new Exception(msg); else { //Colocando o email na sessão session.setAttribute("email", email); } /* Inserindo o novo cliente no banco de dados */ try { /* Conexão com banco de dados */ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Rafael/Monografia/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"adm","1234"); /* Obtendo um PreparedStatement preenchido com o codigo de inserir cliente */ 60 PreparedStatement ps = ligacao.prepareStatement(" insert into Cliente (email,nome,rua,bairro,numero,complemento,cep,senha)values(?,?,?,?,?,?,?,?)"); /* Setando os atributos do PreparedStatement */ ps.setString(1, email); ps.setString(2, nome); ps.setString(3, rua); ps.setString(4, bairro); ps.setString(5, numero); ps.setString(6, complemento); ps.setString(7, cep); ps.setString(8, senha); /* Executa o comando de atualização do PreparedStatement */ ps.executeUpdate();} catch (SQLException e) { String msg = e.getMessage() + " : ErrorCode = " + e.getErrorCode(); throw new Exception(msg);} catch (Exception e) { String msg = e.getMessage(); throw new Exception(msg);} //Caso o cadastro esteja preenchido corretamente, redireciona à pagina de Produtos response.sendRedirect("Produto.jsp"); %> </body> </html> Figura 27 – Código Cadastrar Cliente. Figura 28 – Diagrama de Seqüência Cadastrar Cliente. Com o código descrito na figura 27, o sistema recupera todas as informações solicitadas para o cadastramento de novo cliente, validando duas opções: campos obrigatórios digitados corretamente e senha digitada diferente da confirmada. Com os dados informados corretamente, o sistema inicia a sessão utilizando o atributo “e-mail” e estabelece conexão com o banco de dados. Após a conexão, o sistema salva todos os dados informados na entidade cliente e direciona o usuário para à página de produtos (figura 29). 61 5.5.3 Fazer Pedido. A figura 29 ilustra a interface que representa a lista de produtos disponíveis para compra. Figura 29 – Interface Lista de Produtos. Na figura 30, o sistema estabalece a conexão com o banco de dados e exibe uma lista dos atributos contidos na entidade produtos. Na lista de produtos à venda, o sistema solicita qual(is) produto(s) e quantidade o usuário deseja comprar. Com o(s) produto(s) e quantidade(s) selecionado(s), o usuário tem a opção de limpar produtos selecionados e adicionar produtos ao carrinho. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page import="java.sql.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <p align="center"><b>Lista de Produtos</b></p> <%//Instanciando o objeto para acessar o banco de dados Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Rafael/Monografia/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"adm","1234"); //Anulando o ResultSet e Statement ResultSet rset= null; Statement stmt=null; //Criando um Statement stmt=ligacao.createStatement(); //Executando Statement preenchido com o codigo selecionar produto rset=stmt.executeQuery("SELECT * FROM PRODUTO;"); %> <form name="produtos" method="post" action="AdicionarCarrinho.jsp"> 64 Figura 33 – Interface Visualizar Carrinho. A figura 34 ilustra o código que implementa a interface visualizar carrinho, e a figura 35 ilustra o diagrama de seqüência visualizar carrinho. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page errorPage="Erro.jsp" %> <%@page import="java.util.*" %> <%@page import="java.sql.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <p align="center"><b>Carrinho de Compras</b></p> <br> <table width="80%" border="1" align="center"> <tr> <td><div align="center"><b>Produto</b></div></td> <td><div align="center"><b>Preço</b></div></td> <td><div align="center"><b>Quantidade</b></div></td> <td><div align="center"><b>Remover</b></div></td> </tr> <%//Acessando o banco de dados Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Rafael/Monografia/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"adm","1234"); //Obtendo um PreparedStatement preenchido com o codigo sql seleção de produtos PreparedStatement pstmt = ligacao.prepareStatement("SELECT * FROM PRODUTO where codigo = ?;"); // Obtendo o carrinho de compras da sessão Hashtable carrinho = (Hashtable) session.getAttribute("carrinho"); //Casso o carrinho exista e possua valores if ( carrinho != null && !carrinho.isEmpty() ) { //Obtendo todos os códigos de produtos do carrinho Enumeration codigos = carrinho.keys(); // Passando por cada código while ( codigos.hasMoreElements() ) { //Obtendo cada código String codigo = (String) codigos.nextElement(); //Setando o código no PreparedStatement pstmt.setString(+ 1, codigo); //Executando a consulta do PreparedStatement ResultSet rs = pstmt.executeQuery(); //Verificando se houve retorno if ( rs.next() ) { //Obtendo a descrição e o preço do produto String descricao = rs.getString("descricao"); String preco = rs.getString("preco"); String quantidade = (String) carrinho.get(codigo); %> <tr> 65 <td> <div align="center"><%=descricao%></div> </td> <td> <div align="center">R$<%=preco%></div></td> <td> <div align="center"><%=quantidade%></div></td> <td><div align="center"> <a href="RemoverCarrinho.jsp?produto=<%=codigo%>">Remover</a></div> </td></tr> <%} } } %></table> <p align="center"><a href="FecharPedido.jsp">Fechar</a></p> </body> </html> Figura 34 – Código Interface visualizar Carrinho. Figura 35 – Diagrama de Seqüência Visualizar Carrinho. Com o código ilustrado pela figura 34, o sistema realiza a conexão com o banco de dados, obtêm o carrinho de compras da sessão e lista todos os produtos contidos no carrinho, dando a opção do usuário de remover algum determinado produto ou finalizar o pedido de compra. A figura 36, descreve o código responsável por executar a ação de remoção de um determinado produto do carrinho de compras. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@page import="java.util.Hashtable" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <%//Obtendo o código do produto String codigo = request.getParameter("produto"); //Obtendo o carrinho da sessão Hashtable carrinho = (Hashtable) session.getAttribute("carrinho"); 66 //Removendo o código do produto do carrinho carrinho.remove(codigo); //Redirecionando para o Carrinho.jsp response.sendRedirect("Carrinho.jsp"); %> </body> </html> Figura 36 – Código Remover Carrinho. Com o código implementado na figura 36, o sistema busca o carrinho da sessão e através do código do produto faz a remoção do mesmo, após realizado a remoção, o sistema direciona o usuário á página de visualização do carrinho de compras. A figura 37 ilustra o código responsável pelo fechamento do pedido de compras e a figua 38 exibe o diagrama de seqüência executada ao fechar o pedido. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page errorPage="Erro.jsp" %> <%@ page import="java.util.*" %> <%@ page import="java.sql.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body> <% //Criando um objeto Timestamp com a hora atual Timestamp dataPedido = new Timestamp(System.currentTimeMillis()); //Obtendo o email da sessão. String email = (String) session.getAttribute("email"); //Obtendo o carrinho de compras da sessão. Hashtable carrinho = (Hashtable) session.getAttribute("carrinho"); //Verificando se o email estava na sessão if ( email == null ) { String msg = "Para fechar o pedido é necessário efetuar Login"; throw new Exception(msg);} //Verificando se o carrinho estava na sessão if ( carrinho == null ) { String msg = "Nenhum produto foi inserido no carrinho"; throw new Exception(msg);} //Acessando o banco de dados try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/Rafael/Monografia/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"1234","1234"); //Gravando o pedido //Obtendo um PreparedStatement para inserir em Pedido PreparedStatement ps = ligacao.prepareStatement("insert into Pedido (data,email)values(?,?)"); //Setando os parâmetros do PreparedStatement ps.setTimestamp(1, dataPedido); ps.setString(2, email); //Executando o comando de atualização do PreparedStatement ps.executeUpdate(); //Gravando os itens do pedido // Obtendo um PreparedStatement para inserir em PedidoProduto PreparedStatement insertPedidoProduto = ligacao.prepareStatement("insert into PedidoProduto(email,dataPedido,codigoProduto,Preco,Quantidade)values(?,?,?,?,?)"); //Obtendo um PreparedStatement para pesquisar em Produto PreparedStatement selectProduto = ligacao.prepareStatement("select * from produto where codigo = ?"); //Obtendo todos os códigos do carrinho de compras 69 <tr> <td width="16%"><b>Rua:</b></td> <td width="84%"><%=rua %></td> <tr> <td width="16%"><b>Numero</b></td> <td width="84%"><%=numero %></td></tr> <tr> <td width="16%"><b>Bairro:</b></td> <td width="84%"><%=bairro%></td></tr> <tr> <td width="16%"><b>Complemento:</b></td> <td width="84%"><%=complemento%></td></tr> <tr> <td width="16%"><b>Cep:</b></td> <td width="84%"><%=cep %></td> </tr> <% } %> </table> <br> <table width=25%" border="0" align="center"> <tr> <td width="84%"><a href="CadastroEndereco.jsp" target="_parent">Alterar</a></td> <td width="15"><a href="FormaPagamento.jsp" target="_parent" align="center">Confirmar</a></td> <tr> </table> </body> </html> Figura 40 – Código Interface Visualizar Endereço. A interface visualizar endereço, permite o usuário visualizar o endereço cadastrado anteriormente. Através do código descrito pela figura 40, o sistema inicia a página obtendo o e-mail da sessão e estabelece a conexão com o banco de dados. Com o e-mail da sessão, o sistema exibe os dados referentes ao endereço do usuário e disponibiliza a opção de alterar ou confirmar este endereço. Caso seja necessário alterar o endereço de entrega, o sistema direciona o usuário à interface cadastro de novo endereço (Figura 41), se o usuário confirmar o endereço, o sistema direciona o mesmo para a página que exibe a forma de pagamento (figura 45). Figura 41 – Interface Alterar Endereço. 70 A figura 41 representa a interface alterar endereço de entrega. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> </head> <body bgcolor="#FFFFFF"> <div align="center"><b>Cadastrar Novo Endereço</b><br> </div> <form method="post" action="AlterarEndereco.jsp"> <table width=25%" border="1" align="center"> <tr> <td width="16%">Rua/Av</td> <td width="25%"><input type="text" name="rua" size="20" maxlength="20"> </td></tr> <tr> <td width="16%">Bairro</td> <td width="25"><input type="text" name="bairro" size="20" maxlength="20"> </td></tr> <tr> <td width="16%">Número</td> <td width="25%"><input type="text" name="numero" size="5" maxlength="5"> </td></tr> <tr> <td width="16%">Complemento</td> <td width="25%"><input type="text" name="complemento" size="50" maxlength="50"> </td></tr> <tr> <td width="16%">CEP</td> <td width="25%"><input type="text" name="cep" size="8" maxlength="8"> </td> </tr> </table> <p align="center"> <input type="submit" name="Alterar" value="Alterar"> <input type="reset" name="Limpar" value="Limpar"> </p> </form> </body> </html> Figura 42 – Código Interface Cadastrar Endereço. A figura 42 ilustra o código que implementa a interface alterar endereço de entrega, através do código o sistema solicita ao usuário os novos dados do endereço de entrega. Com os dados informados o sistema e permite o usuário gravar o novo endereço ou limpar os dados digitados. Na figura 43 segue o código que implementa a opção de gravar o novo endereço. <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ page errorPage="Erro.jsp" %> <%@ page import="java.sql.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Distribuidora Bebidas</title> 71 </head> <body> <% String email = (String) session.getAttribute("email"); /* Obtendo os campos do formulário */ String rua = request.getParameter("rua"); String bairro = request.getParameter("bairro"); String numero = request.getParameter("numero"); String complemento = request.getParameter("complemento"); String cep = request.getParameter("cep"); /* Verificando os campos obrigaatórios */ if (rua.trim().equals("") || bairro.trim().equals("") || numero.trim().equals("")) { String msg = "Os campos marcados com (*) são obrigatórios."; throw new Exception(msg); } /* Inserindo o novo cliente no banco de dados */ try { /* Instanciando o objeto para acesso ao banco de dados */ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String dsn = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/eclipse/Distribuidora/rbdist.mdb"; Connection ligacao = DriverManager.getConnection(dsn,"1234","1234"); /* Obtendo um PreparedStatement preenchido com o template "ALTERA ENDERECO" */ PreparedStatement stmt=ligacao.prepareStatement("UPDATE cliente SET rua =?,bairro =?,numero =?,complemento =?, cep =? where email like ?"); stmt.setString(1, rua); stmt.setString(2, bairro); stmt.setString(3, numero); stmt.setString(4, complemento); stmt.setString(5, cep); stmt.setString(6, "%"+email+"%"); stmt.executeUpdate(); } catch (SQLException e) { String msg = e.getMessage() + " : ErrorCode = " + e.getErrorCode(); throw new Exception(msg); } catch (Exception e) { String msg = e.getMessage(); throw new Exception(msg); } /* Redirecionando à página de Forma de Pagamento */ response.sendRedirect("ConfirmarEntrega.jsp"); %> </body> </html> Figura 43 – Código Alterar Endereço. Com o código descrito pela figura 43, o sistema inicialmente busca o e-mail da sessão e os dados informados pelo usuário. Com os dados obtidos, o sistema faz a confirmação do dados obrigatórios, se todos estiverem preenchidos corretamente, o sistema estabelece a conexão com o banco e armazena o novo endereço na entidade cliente. Feito isto, o usuário é redirecionado a interface visualizar endereço de entrega (Figura XXX) para que confirme novamente o endereço. A figura 44 ilustra o diagrama de seqüência executada na confirmação do endereço de entrega. 74 /* Redirecionando para o Login */ response.sendRedirect("Principal.jsp"); %> </body> </html> Figura 47 – Código Sair. 75 6 CONCLUSÃO 6.1 Considerações Finais Este trabalho apresentou um estudo sobre o desenvolvimento de sites dinâmicos, tendo como base a tecnologia JSP. Procurando ampliar a área de vendas com baixo custo ao próprietario de uma empresa do ramo atacadista, foram realizados estudos para definir que a melhor forma seria a criação de um site dinâmico, em que qualquer usuário da Internet pode ser cliente. Para obter produtividade e ganho de tempo no desenvolvimento do sistema web, foi usada a tecnologia JSP. Esta tecnologia é baseada na linguagem Java, que oferece ao desenvolvedor uma infra-estrutura de APIs e classes integrantes da linguagem, facilitando no desenvolvimento de uma aplicação. Os benefícios no uso da tecnologia JSP são muitos. Com esta tecnologia, as aplicações podem ser executadas em qualquer plataforma do mercado, os aplicativos Servlets permanecem carregados na memória do servidor, o que permite um fluxo de informações mais eficiente. A tecnologia JSP é de distribuição livre, tornando-se um fator fundamental na decisão de qual linguagem utilizar. Para que fosse possível a criação de um sistema simples de comércio eletrônico, foram elaboradas algumas funcionalidades importantes relativas ao processo de vendas. Por intermédio destas funcionalidades foi elaborado um projeto para a construção de um sistema web. Para o desenvolver o projeto utilizando a tecnologia JSP, exigiu conhecimentos básicos sobre as linguagens HTML, JAVA, além de noções de banco de dados. O desenvolvimento deste projeto foi realizado de forma simples em relação as diversidades que 76 a tecnologia JSP oferece, mas de forma minuciosa em relação as funcionalidades de um processo de vendas. Com a implantação do site, os produtos da empresa podem ser vendidos para qualquer usuário da Internet, levando a uma espectativa de aumento no faturamento da empresa na ordem de 40%. Com isso, pode-se concluir que o sistema web contribuirá com a ampliação da área de vendas, podendo aumentar a lucratividade da empresa. 6.2 Proposta de trabalhos futuros Futuramente, para melhorar ainda mais o sistemas web aqui desenvolvido, é proposto: - Incluir neste projeto o controle do pagamento de contas e a emissão de boleto bancário via web site. - Incluir o tratamento de cartões de crédito como forma de pagamento em uma loja virtual, abordando características de segurança. - Desenvolver outros projetos que utilizem aspectos de tecnologia JSP não contemplados neste estudo, tais como uso de filtros, beans, arquitetura MVC e uso de frameworks, tais como JSF, spring, struts e hibernate. - Fazer um estudo comparativo entre tecnologia JAVA e .net utilizadas no desenvolvimento para web.
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved