Plataforma para Desenvolvimento de Software em Ambiente WEB Prof. Dr. Sérgio Donizetti Zorzo UFSCar –junho/2001 Ambiente de Trabalho Servidor Web Páginas HTML Est JSP Servlets PHP ASP Cliente/ Browser Scripts Din Processamento JAVA C++ / C Delphi (não visual) Linux Windows HTML Netscape Explorer Banco de Dados Oracle MySQL dBase Tecnologia Cliente-Servidor Parâmetros REQUEST cliente CSB applet Servidor Servlet RESPONSE Resultados SSB Tecnologia Cliente-Servidor CLIENTE – CSB/ Client Side Building Processamento no cliente. Consome tempo de carregamento. Limitação de processamento do cliente. Linguagem dependente de browser. Linguagens disponíveis: JavaScript, Applets. SERVIDOR – SSB/ Server Side Building Processamento no servidor. Retorna ao cliente páginas HTML. Capacidade maior para armazenamento e processamento. Segurança para manipulação de informações (no servidor). Linguagens disponíveis: JSP, Servlets, PHP, PERL-CGI, ASP. Arquitetura de Sistemas na WEB Desenvolvimento de Sistemas em 3 Camadas: Camada de apresentação recebe informações do usuário, envia aos componentes de negócio para o processamento, recebe os resultados fornecidos pelos componentes de negócio, e apresenta-os ao usuário. Camada de lógica de negócio O processamento é especificado e as regras de negócios mantidas. Regras de negócios realiza a validação de dados, verificação de logins, busca em banco de dados e diversos algoritmos de transformação. Une a camada de apresentação com as camadas de dados. Camada de acesso a dados permite o acesso a uma variedade de fontes de informações, incluindo dados relacionais e não relacionais, e uma interface de programação fácil de usar que é independente de ferramenta e de linguagem. Configurações da Máquina Sistema Operacional Linux Windows Compiladores JDK PHP 4 Servidor Web APACHE (jakarta-tomcat) SGBD (SQL) MySQL ORACLE MS ACCESS Formulários – comunicação entre cliente e servidor <FORM name=“” action=“” method=“” enctype=“”> conteúdo do formulário... </FORM> name: identificador do formulário – action: nome do script que receberá os dados do formulário no servidor method: método de envio dos dados – get ou post Enctype: formato envio dos dados – default é urlencoded Existem vários tipos de campos de entrada no formulário, como: campos de entrada de texto menus de múltipla escolha ou escolha única botões sim-ou-não botões para submissão ou limpeza de formulário Formulários – métodos de comunicação: GET e POST GET - As informações do formulário são enviadas junto e ao final da URL ativada. POST - As informações são enviadas após a ativação da URL, ou seja, o servidor entende que novas informações serão enviadas pelo cliente. As informações do formulário serão tratadas na URL referenciada pelo tag ACTION, que será responsável por responder a solicitação do formulário. ACTION="/cgi-bin/post-query" para um script no seu servidor ACTION="http://www.comp.ufscar.br/~zorzo/resp.php" para o tratamento do formulário no servidor. O formulário terá a seguinte estrutura: <FORM ACTION=“exemplo.php“ METHOD="POST" > Marcações de campos de entrada e HTML em geral </FORM> Formulário <FORM METHOD = “POST” ACTION= “RESP.PHP” > Nome: <input type=“TEXT” name=“NOME” size=40> <p> Sexo: <input type=“RADIO” name=“SEXO” value=“MASC”> masc <input type=“RADIO” name=“SEXO” value=“FEM”> fem <p> Esportes de Interesse: <input type=“CHECKBOX” name=“fut” value=“X”> FUTEBOL <input type=“CHECKBOX” name=“vol” value=“X”> VOLEIBOL <input type=“CHECKBOX” name=“bas” value=“X”> BASQUETEBOL <p><TEXTAREA name=“sugestoes” rows=4 cols=64> Digite as suas sugestoes </ TEXTAREA> <p>Sistema Utilizado <SELECT name=“SISTEMA” size=1> <option value=“w98”> Windows 98 <option value=“unx”> Unix </SELECT> <input type=“RESET” value=“Limpar Campos”> <input type=“SUBMIT” value=“Enviar Formulario”> </FORM> Formulário PHP – “Personal Home Pages” 1994 - criada por Rasmus Lerdorf - uso pessoal 1995 - foi disponibilizada para outros programadores “Personal Home Page Tools” 1997 – PHP/FI – incorporado o Form Interpreter 1999 – passou a ser desenvolvido por um grupo de profissionais em 1999 – mais de 1 000 000 usuários PHP versão 4.0.4 – www.php.net - 11 / janeiro / 2001 Sintaxe Básica de PHP O Código PHP fica junto com o código html, ficando com o interpretador a responsabilidade de diferenciá-los. Usa-se as tags: <? comandos // primeiro exemplo – Teste1.php ?> <html> <?php <body> comandos ?> <?php print "Exemplo de código PHP"; <% comandos %> <script language=“php”> comandos </script> ?> </body> </html> Sintaxe Básica de PHP <html> <head><title>TESTE 2</title></head> <body bgcolor=yellow> <center> <font size="4">Aprendendo PHP- formulario </font><br></center> <form action="resp.php" method=post> <input type="text" name="entrada" value="0" size="10“ maxlength="8"> <input type="submit" name="enviar" value="ENVIAR"> </form> </body> </html> <html> <head><title>TESTE 2- resposta</title></head <body bgcolor=green> <center> <font size="4">Resposta de PHP </font> <br> </center> <? print “Resposta: ”; print $entrada ; ?> </body> </html> PHP Tipos de Dados • • • • • Inteiro Ponto Flutuante String Array Objeto Operadores • • • • • • • • Aritméticos (+ - * / % ) Concatenação de Strings ( . ) Atribuição (como na linguagem C++) ( = += -= *= /= %= .=) Bit a Bit ( & | ^ ~ << >>) Lógicos ( and or xor ! (não) && (e) || ) Comparação ( == != < <= > >= ) Expressão Condicional (Expressão1) ? (Expressão2) : (Expressão3) de incremento e de decremento ++ -- PHP – Estruturas de Comando Blocos { } Comandos de Seleção if (expressão) comando; if (expressão) comando; elseif (expr2) comando; else comando; if (expressão) comando; else comando; ... comando; endif; Comandos de Repetição while (expressão) while (expressão) do { comando; comando;....comando; comando; .... comando; endwhile; } while ( expressão ); for ( inicialização ; condição ; incremento ) comando; Comando break Comando continue PHP –Classes e Objetos class conta { var $saldo ; function saldo () { return $this->$saldo; } function credito ( $valor) { $this->$saldo += $valor; } function conta() { $this->$saldo =10; } } $contacorrente = new conta; $contacorrente - > saldo ( ); // retorna 10 $contacorrente - > credito (50); $contacorrente - > saldo ( ); //retorna 60 O construtor pode conter argumentos – que são opcionais PHP +Mysql (Exemplo de Consulta) <?php $conexao = mysql_connect ("localhost",“usuarioaluno",“senhapct2001"); mysql_select_db (“bancodedados",$conexao); $consulta = "SELECT * FROM tabzorzo WHERE numero=$entrada1"; $resultado = mysql_query ($consulta, $conexao); $entrada1 = mysql_fetch_array ($resultado); $nome = $entrada1[nome]; print $nome; echo "<br> <br>"; $numreg = mysql_num_rows ($resultado) + 1 ; echo ("Numero de Registros: "); print $numreg; ?> PHP +Mysql (Exemplo de Inserção) <?php $conexao = mysql_connect ("localhost",“usuarioaluno",“senhapct2001"); mysql_select_db (“bancodedados",$conexao); $INSERT="insert into tabzorzo (numero,nome,telefone) values (\“$numero\",“\$nome\“, \”$telefone\“ )"; $resp=mysql_query($INSERT,$conexao); echo "<br> <br>"; if($resp) { echo " Aluno cadastrado corretamente.";} else { echo " Cadastro nao efetuado.";} ?> Java - Aplicativos ou Programas Um programa em Java é a definição de uma classe que tem o método estático main( ), o qual será executado assim que for criado esta classe, e que ao ser executado poderá criar novas instâncias desta ou de outras classes. public class AloPessoal { public static void main(String args[]) { System.out.println("Primeiro Programa em Java!"); } } • Para compilar o programa Java: >javac AloPessoal.java • Para executar o interpretador Java que interpreta os bytecodes, da Java Virtual Machine. >java AloPessoal , e será exibido na tela: Primeiro Programa em Java! Java – Applets • São construídos para serem pequenos. • por questões de segurança, obedecem critérios rígidos para que sua execução seja possível pelos browsers. • e’ um programa em java, que é executado por um browser , quando é carregada a página que contém o applet. • É um programa que será transportado pela internet, como os documentos html. import java.applet.Applet; import java.awt.Graphics; public class alo extends Applet { public void paint (Graphics g) { g.drawString (“Alo a todos, Exercitanda Java”, 25,25); g.drawString (“Lembre-se de que o arquivo tem que ter o nome do applet”, 25,50); } } <html> <applet code="alo.class" width=300 height=80> </applet> </html> Linguagem Java – Funcionamento dos Applets • public void init() - esse método é chamado uma vez pelo appletviewer ou pelo browser quando um applet é carregado para execução - Ações Típicas: Inicializações de varíaveis, carregamento de sons para reproduzir ou imagens a exibir. public void start() - esse método é chamado assim que o init termina, e a cada vez que o usuário do navegador retorna para a página HTML em que o applet reside. public void paint(Graphics g) - esse método é chamado toda vez que o applet necessita atualizar sua exibição, que ocorre na primeira vez depois da execução do start ou quando a tela foi movimentada ou redimensionada e ai precisa ser redesenhado. public void stop() - esse método é chamado toda vez que o applet deixa de ser visível, ou seja, quando ocorre um rolamento da tela ou quando o applet fica encoberto por outra tela. (start e stop podem ocorrer inúmeras vezes no ciclo de vida dos applets) public void destroy() - esse método é chamado toda vez que o applet está sendo descarregado da página para que seja realizada a liberação final de todos os recursos utilizados durante a sua execução. É acionado quando o browser troca de páginas. Linguagem Java – Funcionamento dos Applets • // ex2.java - contagem de numero de execucao de um applet import java.awt.Graphics; // import class Graphics e Applet import java.applet.Applet; public class ex2 extends Applet { private int nroinits=0; private int nrostarts=0; private int nropaints=0; private int nrostops=0; public void init( ) { nroinits ++; } public void start( ) { nrostarts ++; } public void stop( ) { nrostops ++; } public void paint( Graphics g ) { nropaints++; g.drawString( "Init: "+ nroinits, 5, 15 ); g.drawString( "Start: "+ nrostarts, 5, 30 ); g.drawString( "Paint: "+ nropaints, 5, 45 ); g.drawString( "Stop: "+ nrostops, 5, 60 ); } Java – Servlets • é um componente que pode estender a funcionalidade dos servidores. • Por serem escritos em Java, são independentes de plataforma podendo ser criados, compilados e executados em plataformas diferentes. • É uma API Java que compilada atende requisições de páginas HTML e compatível com a plataforma Java. • Trabalha com o Servidor por multi-thread. • Trata coockies com muita segurança. • Implementa manipulador de sessão. • Possui estrutura orientada a objetos, o que aumenta a modularização do Sistema. Java – Servlets Applets x Servlets • Navegador (browser) deve suportar Java e na versão correta da Applet; • Demandam tempo de carregamento da página que contém o Applet; • Difícil comunicação com outro aplicativo Java ou Banco de Dados; CGI x Servlets • Sobrecarrega o servidor; • Tem funções limitadas; • Difícil programação; Java – Servlets PHP x Servlets • São limitados ao ambiente da página HTML; • Tipos de dados são variantes (complicador para a corretude); • Diferentes comandos para cada SGBD; ASP x Servlets • São limitadas à plataforma Windows; • Estrutura de código diferente da filosofia C++; • Difícil portabilidade para outros ambientes; • Dependência de plataforma Os servlets podem rodar em qualquer plataforma sem serem reescritos ou até mesmo compilados novamente. Funcionamento de Servlets Servidor HTTP Recebe Solicitação Container de Servlet Criação de Encadeamento Servlet Gera Resposta Envia Resposta Estrutura Básica de um Servlet • Importa os pacotes necessários • Declara a classe – cria o método init(); – cria o método doGet() e/ou doPost() - são chamados pelo método service() – cria o método destroy() Exemplo 1 package leilao; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Leilao extends HttpServlet { int valor; // método para inicializar o servlet public void init(ServletConfig ConfInicial) throws ServletException { super.init(ConfInicial); valor = 10; } Exemplo 1 - cont. // método chamado para atender uma solicitação de HTTP POST public void doPost(HttpServletRequest solicitacao, HttpServletResponse resposta) throws ServletException, IOException { int numero1 = Integer.parseInt(solicitacao.getParameter("numero")); PrintWriter saida = resposta.getWriter(); if (numero1 > valor) { valor = numero1; saida.println(“Você deu o maior lance até o momento!!!"); } else saida.println("Sinto muito, alguém deu um lance maior..."); } JSP- JavaServer Pages • Tecnologia baseada em Java para desenvolvimento de sites da Web dinâmicos • JSP é implementada através de servlets • JSP permite que você separe a parte dinâmica das páginas do HTML estático • JSP são arquivos de texto (.jsp) que substituem as páginas HTML tradicionais • Integração de Java com HTML Vantagens de JSP • Modelo de programação que enfatiza o design de aplicações centradas em componentes – JavaBeans é um exemplo de um modelo de programação de componentes escrito em Java – Um componente é um objeto independente que representa uma coleção de propriedades e comportamento – JSP possui tags especiais do tipo HTML para acessar JavaBeans em uma página, bem como para exibir e modificar suas propriedades – Design centrado em componentes favorece a reusabilidade Funcionamento de JSP Servidor HTTP Recebe Solicitação Container JSP Servlet Compilador de Página Servlet JSP Atual? Não Analisa JSP Sim Servlet JSP Carregado? Sim Gera Fonte de Servlet JSP Não Carrega Servlet Compila Servlet JSP Servlet de Página JSP Gera Resposta Envia Resposta TAGs JSP • Quatro principais categorias de tags de marcação fornecidas por JSP: – – – – Diretivas Elementos de criação de scripts Comentários Ações Exemplo 1 Usando Beans (Arquivo.java) public class AloBean { String nome; public HelloBean() { nome = “Mundo”; } public String getNome() { return nome; } public void setNome(String nome1) { nome = nome1; } } Exemplo 1 Usando Beans (Arquivo.jsp) <HTML> <BODY> <jsp:useBean id=“hello” class=“AloBean” /> <jsp:setProperty name=“hello” property=“nome” value=“pessoal de computação” /> Alô, <jsp:getProperty name=“hello” property=“nome1” /> </BODY> </HTML> Sérgio Donizetti Zorzo Universidade Federal de São Carlos Departamento de Computação [email protected]