Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para a Web Alexandre Meslin meslin@inf.puc-rio.br 2 Ementa � Tecnologias Web � JSP � Cookies � JavaBeans � Banco de Dados � Servlets � Hibernate 3 Referências � Bibliografia � Web Development with Java Server Pages Fields/Kolb Manning � Use a cabeça! Servlets & JSP Brian Basham, Kathy Sierra e Bert Bates Altabooks � Na Internet � http://www.inf.puc-rio.br/~meslin/Web � http://www.apache.org � http://jcp.org/en/home/index � http://www.jguru.com/index.jsp � http://www.jspbrasil.com.br � http://www.macromedia.com 5 Sistema de Avaliação � G1: 2 trabalhos práticos � G2: 2 trabalhos práticos � PF: 1 prova teórica � Obs.: � Não aceito trabalhos entregues depois do prazo � A PF funciona como 2a chamada para um dos trabalhos (apenas UM). Se necessário, servirá também como PF 6 Plano de Aula � Introdução � Java Server Page � Elementos de script � Tags � Declarações de variáveis e métodos � Diretivas � Objetos Implícitos � Session � Application � Trabalhando com cookies � JavaBeans � JDBC � Construindo uma aplicação � Persistência com Hibernate 7 Por que Java? 8 Por que JSP/Servlet (Java)? Fonte: http://w w w .tiobe.com 9 Por que JSP/Servlet (Java)? Fonte: http://w w w .tiobe.com 10 Perguntas? 11 Parte 1 � Introdução 12 Usos de JSP � Mecanismo de criação de páginas com conteúdo dinâmico na Web � Aplicações � Contadores de acesso � Livros de visitantes � Banners aleatórios � Envio de correspondência (email) � Interface com banco de dados 13 Suporte à JSP � Tomcat (http://www.apache.org) � Freeware � JRun (http://www.macromedia.com) � Trial � Não vou usar (e não conheço ninguém que use) 14 Instalação do ambiente de trabalho � Instale Java � Instale servidor Web � Instale container JSP � Instale o ambiente de desenvolvimento (IDE) � Em um futuro próximo � Instale o conector do banco de dados � Instale o Hibernate 15 Instalação de Java � (espero que você já tenha feito isto há muito tempo!) � Faça download da última versão do J2SE em http://java.sun.com � Este material foi desenvolvido utilizando-se JDK 6 � Instale o pacote utilizando o método NNF 16 Instalação de Java � Inicie a instalação 17 Instalação de Java � Leia atentamente os termos da licença e somente os aceite se concordar plenamente! � Clique em Accept 18 Instalação de Java � Selecione o que deve se instalado � Para economizar espaço, podem ser retirados � Demos � Source Code � Clique Next 19 Instalação de Java � Espere (muito!!!) 20 Instalação de Java � Selecione os itens que você deseja para a máquina virtual � Clique Next 21 Instalação de Java � Espere muito novamente... 22 Instalação de Java � Clique Finish (até que enfim!!!) 23 Instalação do Apache Tomcat � Instalou Java? � Agora instale Apache+Tomcat � Para dar suporte a JSP 2.0 é necessário Tomcat 5 ou mais recente � O Tomcat é composto por: � Catalina: um container para servlets � Coyote: conector HTTP � Jasper: compilador JSP para Java � Você pode instalar de duas formas: � Como serviço (primeiro exemplo) � Instalação manual (segundo exemplo) 24 Instalação do Apache Tomcat como Serviço (primeira opção) � No site http://www.apache.org (ou em http://tomcat.apache.org), faça download da última versão do Tomcat � Instale o pacote através de NNF, apenas verificando o que você gostaria que fosse instalado � A seguir, exemplo de instalação da versão 6 25 Instalação do Apache Tomcat versão 6 � Inicie a instalação 26 Instalação do Apache Tomcat � Clique Next 27 Instalação do Apache Tomcat � Leia atentamente os termos da licença e somente os aceite se concordar plenamente! � Clique em I Agree 28 Instalação do Apache Tomcat � Selecione os itens que devem ser instalados � Para economizar espaço, podem ser excluidos � Start Menu Itens � Documentation � Examples � Webapps � Clique Next 29 Instalação do Apache Tomcat � Selecione a pasta de instalação (pode usar a padrão) � Clique Next 30 Instalação do Apache Tomcat � Escolha a porta do serviço � 8080, se houver outro servidor web instalado (ex.: IIS) � 80, caso seja o único servidor web � Entre com o User Name e Password para o administrador do sistema � Obs.: � Não esqueça o User Name e Password � Lembre-se que a senha será armazenada em texto livre!!! � Clique Next 31 Instalação do Apache Tomcat � Informe a pasta onde está o JRE � Clique em Install 32 Instalação do Apache Tomcat � Espere… 33 Instalação do Apache Tomcat � Espere mais um pouco… 34 Instalação do Apache Tomcat � Espere mais um pouco…’tá quase lá... 35 Instalação do Apache Tomcat � Clique Finish Instalação do Apache Tomcat Manualmente (segunda opção) � Faça download do arquivo ZIP de acordo com o seu sistema operacional (32 ou 64 bits) � Descompacte em algum diretório � E... acabou! 36 37 Configuração do Apache-Tomcat (para desenvolvimento APENAS!!!) � No arquivo web.xml, habilite a opção de browse no diretório através de navegador � Somente faça isto para facilitar a localização dos seus itens durante o desenvolvimento � Pode representar um risco para sites de produção <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> 38 Verificação da Instalação do Apache Tomcat � Abra o Monitor Tomcat em Start�All Programs �Apache Tomcat 6.0 � Monitor Tomcat 39 Verificação da Instalação do Apache Tomcat � No System Tray, clique como botão direito do mouse no ícone do monitor e selecione Configure... 40 Verificação da Instalação do Apache Tomcat � Clique em Start 41 Verificação da Instalação do Apache Tomcat � E espere... 42 Verificação da Instalação do Apache Tomcat � Tenha certeza que o serviço foi iniciado corretamente... 43 Verificação da Instalação do Apache Tomcat � Abra o browser � Digite: � http://localhost:8080 � Você deve obter uma página semelhante a esta 48 Instalação do Eclipse � http://www.eclipse.org � Procure pelo eclipse WTP (Web Tools Platform) � Eclipse Helios (WTP 3.6.1) � Eclipse Galileo (WTP 3.1) � Eclipse Ganymed (WTP 3.0.5) 49 Configuração do Eclipse � Para instalar o Eclipse, extraia o conteudo do arquivo ZIP dentro de Arquivos de programas ou Program files ou na raiz do seu disco 50 Configuração do Eclipse 51 Configuração do Eclipse � Selecione o local para ser o seu workspace � (a pasta onde serão criados os seus projetos) � Clique OK 52 Configuração do Eclipse � Verifique se a instalação reconheceu o JRE correto � Clique em: � Windows � Preferences... 53 Configuração do Eclipse � Clique em: � Java � Instaled JREs � Selecione o JRE ou � Adicione o JRE correto 54 Configuração do Eclipse � Clique em: � Java � Compiler � Selecione o nível correto de conformidade do compilador (6.0) � Clique em OK 55 Configuração do Tomcat no eclipse � Clique em � Server � Runtime Environment � Clique em Add... 56Configuração do Tomcat no eclipse � Expanda o item Apache � Selecione a versão correta (Apache Tomcat v6.0, no nosso caso) � Clique Next 57 Configuração do Tomcat no eclipse � Informe o diretório de instalação do Apache Tomcat � Informe o JRE que você configurou previamente � Clique Finish 67 Perguntas? 68 Parte 2 � Criando um novo projeto 69 Criando um Novo Projeto Web � Clique em: � File � New � Dynamic Web Project 70 Criando um Novo Projeto Web � Em Project name: informe o nome do projeto � Verifique se o “Target runtime” é o Apache Tomcat que você criou anteriormente � Clique em Next 71 Criando um Novo Projeto Web Dynamic web module version Valor Descrição 2.2 J2EE 1.2 2.3 J2EE 1.3 2.4 J2EE 1.4 2.5 J2EE 5 3.0 J2EE 6 72 Criando um Novo Projeto Web � Adicione, edite e/ou remova folders, caso necessário (normalmente não é) � Clique Next 73 Criando um Novo Projeto Web � Modifique o nome público do projeto, caso necessário (aqui, normalmente também não precisamos mexer) � Modifique o nome do diretório de conteúdo (idem) � Clique Finish 74 Criando um Novo Projeto Web � A esta altura, deve ter sido criada a árvore mostrada ao lado � Estrutura de pastas criada: � WebContent: HTML, CSS, JSP, etc. � src: arquivos fontes em Java (javabeans e servlets) � WEB-INF/classes: .class (javabeans e servlets) � WEB-INF/lib: .jar � WEB-INF: arquivos sem acesso direto pelo cliente � work: servlets convertidos a partir de páginas JSP 75 Criando uma Nova Pasta em um Projeto Web � Crie uma nova pasta para organizar os itens (opcional) � Selecione o projeto � Clique em: � File � New � Folder 76 Criando uma Nova Pasta em um Projeto Web � Informe a localização da pasta (dentro de WebContent do seu novo projeto) � Informe o nome da pasta � Clique Finish 77 Criando um Arquivo JSP em um Projeto Web � Selecione: � File � New � Other 78 Criando um Arquivo JSP em um Projeto Web � Em Web, selecione JSP � Clique Next 79 Criando um Arquivo JSP em um Projeto Web � Selecione o diretório correto (aquele que você acabou de criar) � Informe o nome do arquivo no formato: nome.jsp � Clique Next 80 Criando um Arquivo JSP em um Projeto Web � Selecione o modelo de acordo com a saída desejada � HTML � XHTML � XML � Clique Finish 81 Criando um Javabean em um Projeto Web � Selecione: � File � New � Other 82 Criando um Javabean em um Projeto Web � Em Java, selecione Class � Clique Next 83 Criando um Javabean em um Projeto Web � Entre com o nome do pacote � Entre com o nome da classe � Clique Finish � (lembre-se que este nome também será o nome do arquivo .java) � Obs.: de preferência inicie o pacote com letra minúscula e a classe com letra maiúscula 84 Instalação de uma Biblioteca Externa � Clicar com o botão direito no projeto � Selecionar Build Path � Clicar em Add libraries... 85 Instalação de uma Biblioteca Externa � Selecionar User Library � Clicar em Next 86 Instalação de uma Biblioteca Externa � Clicar em User Libraries... 87 Instalação de uma Biblioteca Externa � Clicar em New 88 Instalação de uma Biblioteca Externa � Informar o nome da nova biblioteca 89 Instalação de uma Biblioteca Externa � Clicar em Add JARS... 90 Instalação de uma Biblioteca Externa � Navegar até o .JAR desejado � Clicar OK 91 Instalação de uma Biblioteca Externa � Adicione quantos jar’s forem necessários � Clicar em OK quando terminar de adicionar os jar’s 92 Instalação de uma Biblioteca Externa � Clicar em Finish 93 Instalação de uma Biblioteca Externa � Verifique em “Problems” se a biblioteca será exportada (caso seja necessário) 94 Instalação de uma Biblioteca Externa � Caso a biblioteca deva ser publicada junto com a aplicação, clique com o botão direito na advertência e selecione “Quick Fix” 95 Instalação de uma Biblioteca Externa � Selecione “Mark the associated raw classpath entry as a publish/export dependency.” � Selecione os projetos que devem conter a biblioteca � Clique em Finish 96 Publicando um site de um Projeto Web � Clique com o botão da direita no projeto � Selecione Export 97 Publicando um site de um Projeto Web � Em Web, selecione WAR file � Clique Next 98 Publicando um site de um Projeto Web � Verifique se o nome do projeto está correto � Informe o nome do arquivo WAR (com a path!) � Lembre-se de marcar “Export source files” (mas somente durante o curso, e nunca depois) � Clique Finish 99 Publicando um site de um Projeto Web � Você sabia... � Que o arquivo .WAR é na verdade um arquivo ZIP com alguns arquivos descrevendo como deve ser publicado � Que você pode (e deve) abrir o arquivo WAR com um programa de manipulação de arquivos ZIP � Dica: antes de publicar (ou de entregar o seu trabalho), abra o arquivo para ver se está tudo certo! 100 Problemas conhecidos e suas “soluções” � Problema: � Site não encontrado � Solução: � Clique com o botão direito do mouse sobre o servidor Tomcat na aba “Servers” � Selecione “Clean...” � Reinicie o servidor 101 Problemas conhecidos e suas “soluções” � Problema: � Classe não pode ser carregada mas foi incluída como biblioteca do usuário � Solução: � Selecione a aba “Problems” � Clique com o botão direito sobre a biblioteca que não está sendo exportada � Selecione “Quick fix” � Selecione exportar a biblioteca � Reinicie o servidor 102 Problemas conhecidos e suas “soluções” � Sintoma: � Erro ao importar javax.servlet.* � Problema: � Faltando biblioteca do Apache Tomcat em “Java Resources: src” dentro do “Project Explorer” � Solução: � Clique com o botão direito no seu projeto � Em “Build Path”, selecione “Configure Build Path…” � Na aba “Libraries”, clique em “Add Library…” � Selecione Server Runtime na janela “Add Library” � Clique Next � Selecione “Apache Tomcat vX.X” (o X.X vai depender da versão instalada do seu Tomcat) � Clique Finish e depois clique em OK Problemas conhecidos e suas “soluções” � Problema � Faltando alguma biblioteca ou classe � Solução � Incluir a biblioteca ou JAR que está faltando 103 Problemas conhecidos e suas “soluções” � Problema � Nome do runtime já em uso quando um novo projeto Web Dinâmico está sendo criado � Solução � Reiniciar o eclipse (fechar e abrir) ??? 104 105 Perguntas? 106 Parte 3 � IP � TCP � HTTP � HTML 107 Um pouco de TCP/IP 108 HTTP em TCP 109 HTTP em IP 110 Arquitetura Web � Baseada em HTTP � Protocolo simples de transferência de arquivos. � Sem estado (não mantém sessão aberta). � Funcionamento (simplificado): 111 Cliente e Servidor HTTP � Servidor HTTP � Gerencia sistema virtual de arquivos e diretórios � Mapeia pastas do sistema de arquivos local (ex: c:\htdocs) a diretórios virtuais (ex: /) acessíveis remotamente (notação de URI - Uniform Resource Identifiers) � Papel do servidor HTTP � Interpretar requisições HTTP do cliente (métodos GET, POST, ...) 112 Cliente e Servidor HTTP � Cliente HTTP � Navegadores (IE, Netscape, Mosaic, Chrome, Opera, Safari, Firefox, etc.) � Papel do cliente HTTP � Enviar requisições HTTP (GET, POST, HEAD, ...) a um servidor. � Requisições contém URI do recurso remoto e, opcionalmente, dados (se método HTTP for POST) �Processar respostas HTTP recebidas (interpretar cabeçalhos, identificar tipo de dados, interpretar dados ou repassá-los. 113 Página Alo Mundo (AloMundo.html) <HTML> <HEAD> <TITLE>Alo Mundo em HTML</TITLE> </HEAD> <BODY> Alo mundo!!! </BODY> </HTML> 114 Página Alo Mundo (AloMundo.html) 115 Flags TCP � CWR - Congestion Window Reduced � ECE - Explicit Congestion Notification echo � URG – Urgent � ACK – Acknowledgement � PSH – Push � RST – Reset � SYN – Synchronize � FIN - Finished 116 Página com imagem (Imagem.html) <html> <head> <title>Página com imagem</title> </head> <body> Imagem: <img src="java.jpg"> </body> </html> 117 Página com imagem (Imagem.html) 118 Página com imagem (Imagem.html) 119 Página com cookie GET /Exemplos/html/Cookies.html HTTP/1.1 Accept: */* Referer: http://setembro:8080/Exemplos/html/ Accept-Language: pt-br UA-CPU: x86 Accept-Encoding: gzip, deflate If-Modified-Since: Sat, 09 Aug 2008 15:08:07 GMT If-None-Match: W/"225-1218294487705" User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322) Host: setembro:8080 Connection: Keep-Alive Cookie: nomeDoCookie=COMIDA HTTP/1.1 200 OK Server: Apache-Coyote/1.1 ETag: W/"225-1218294893537" Last-Modified: Sat, 09 Aug 2008 15:14:53 GMT Content-Type: text/html Content-Length: 225 Date: Sat, 09 Aug 2008 15:15:12 GMT <html> <head> <META HTTP-EQUIV="Set-Cookie" CONTENT="nomeDoCookie=COMIDA;expires=Wednesday, 19-Jan-38 3:14:07 GMT; path=/"> <title>Envia e recebe cookies</title> </head> <body> Usando cookies em html </body> </html> 120 Comparação entre tecnologias � Cliente-side � Javascript (Jscript) � VBScript � Applets Java � Server-side � CGI (Perl) � ASP � PHP � Servlets � JSP 121 HTML - HyperText Markup Language � Define a interface do usuário na Web � Pode ser usada para � Definir a estrutura do texto de uma página (que o browser posteriormente formatará com uma folha de estilos) � Incluir imagens numa página � Incluir vínculos a outras páginas � Construir uma interface com formulários para envio de dados ao servidor � Servir de base para aplicações rodarem dentro do browser (javascript, applets Java, plug-ins, vídeos, etc.) 122 CSS - Cascading Style Sheets � Linguagem usada para definir folhas de estilo que podem ser aplicadas a todo o site. � Cuida exclusivamente da aparência (forma) da página � Permite posicionamento absoluto de textos e imagens, manipulação com fontes, cores, etc. � Regras são colocadas em arquivo de texto .css: 123 Limitações � HTML e CSS são linguagens declarativas, interpretadas pelo browser, que definem apenas como a informação será organizada e apresentada. � Não oferecem recursos de programação. � Os formulários criados com HTML não fazem nada (eles precisam ser vinculados a uma aplicação) � Não é possível construir aplicações Web interativas utilizando apenas CSS e HTML � DHTML: solução para alguns problemas � apresentação + estrutura + interatividade 124 Tecnologias interativas � Lado-cliente � Linguagens de extensão: JavaScript, VBScript � Plug-ins e componentes (applets, activeX) � Soluções integradas: DHTML � Persistência de sessão cliente-servidor � Cookies � Lado-servidor � CGI, plug-ins do servidor e componentes � Linguagens de extensão: SAPIs, ASP, JSP, PHP 125 Tecnologias lado cliente � Estendem a funcionalidade básica do browser � Permitem criar uma interface do usuário dinâmica � Tratamento de eventos � Alteração dinâmica do conteúdo ou da apresentação � Realização de cálculos e computação � Disposição de recursos não disponíveis no browser � Principais tecnologias � Extensões do HTML (scripts): JavaScript, VBScript, linguagens proprietárias � Extensões do browser (componentes): Applets, ActiveX, Plug-ins 126 Scripts: extensões do HTML � Forma mais flexível de estender o HTML � Código geralmente fica visível na página: � Linguagens de roteiro (script) mais populares � VBScript (MSIE): baseado na sintaxe do VB. � JavaScript (Netscape)/JScript (MSIE): sintaxe semelhante a C � Código é interpretado diretamente pelo browser 127 Tecnologias lado servidor � Estendem as funções básicas de servidor HTTP: � CGI - Common Gateway Interface � APIs: ISAPI, NSAPI, Apache API, Servlet API, ... � Scripts: ASP, JSP, LiveWire (SSJS), Cold Fusion, PHP, ... � Rodam do lado do servidor, portanto, não dependem de suporte por parte dos browsers � Browsers fornecem apenas a interface do usuário � Interceptam o curso normal da comunicação � Recebem dados via requisições HTTP (GET e POST) � Devolvem dados através de respostas HTTP 128 CGI - Common Gateway Interface � Especificação que determina como construir uma aplicação que será executada pelo servidor Web � Programas CGI podem ser escritos em qualquer linguagem de programação. A especificação limita- se a determinar os formatos de entrada e saída dos dados (HTTP). � O que interessa é que o programa seja capaz de: � Obter dados de entrada a partir de uma requisição HTTP � Gerar uma resposta HTTP incluindo os dados e parte do cabeçalho � Escopo: camada do servidor � Não requer quaisquer funções adicionais do cliente ou do HTTP 129 Scripts de servidor � Alguns dos mais populares: � Microsoft Active Server Pages (ASP) � Sun JavaServer Pages (JSP) � PHP � A página geralmente possui uma extensão de nome de arquivo diferente para que o servidor a identifique como um programa � As página ASP, PHP, JSP, etc. são processadas e os roteiros são executados pelo servidor, que os consome � No browser, chega apenas a saída do programa: página HTML � Comandos % .. % ou similares nunca chegam no browser � Servidor envia cabeçalho Content-type: text/html (default) ou algum outro tipo texto (text/xml, text/plain) 130 Resumindo: Site Web x Aplicação Web Site Web Aplicação Web 131 Alo Mundo em HTML <HTML> <HEAD> <TITLE>Alo Mundo em HTML</TITLE> </HEAD> <BODY> Alo mundo!!! </BODY> </HTML> 132 Alo Mundo em JSP <html> <head> <title>Alo mundo em JSP</title> </head> <body> <%="Alo mundo!!! Funcionou!!! Ops... é óbvio..." %> </body> </html> 133 Alo Mundo Bean package aloMundo; public class AloMundo implements java.io.Serializable { Private String nome; public AloMundo() { this.nome = "mundo"; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } 134 Alo Mundo Bean <HTML> <HEAD> <TITLE>Alo mundo (versão Bean)</TITLE> </HEAD> <BODY> <jsp:useBean id="alo" class="aloMundo.AloMundo"/> <jsp:setProperty name="alo" property="nome" param="nome"/> Alo <jsp:getProperty name="alo" property="nome"/>!! </BODY> </HTML> 135 Perguntas? 136 Aula HTML � HTML 137 Arquivo HTML � O que é uma página web? � Uma página é um arquivo texto � (abra uma página qualquer e utilize "visualizar fonte") � Browser (navegador) � Interpreta o HTML � Exibe a página formatada � Ex. de uso médio em dezembro de 2010: � Internet Explorer (44,53%) � Firefox (29,56%) � Chrome (12,34%) � Safari (5,80%) � Opera (2,15%) � Móvel (4,10%) Fonte: http://en.w ikipedia.org/w iki/U sage_share_of_w eb_brow sers 138 HTML � Hypertext Markup Language (Linguagem de Marcação de Hipertexto) � Hipertexto: links dentro de uma página web � HTML não é uma linguagem de programação � HTML utiliza tags para realizar a marcação do texto das páginas web 139 Tags HTML � Tags de marcação HTML são chamadas simplesmente de tags HTML � TagsHTML são palavras chaves dentro de < e > como por exemplo <html> � Tags HTML geralmente aparecem aos pares como <b> e </b> � A primeira tag de um par é a tag de abertura e a segunda a tag de fechamento 140 Documento HTML = Página Web � Documentos HTML: � Descrevem páginas web � Contém tags HTML e texto puro � Também chamadas de páginas web � A finalidade de um browser é ler o documento HTML e o exibir como uma página web � O browser não mostra as tags HTML, mas as utiliza para interpretar o conteúdo da página 141 Documento HTML = Página Web <html> <body> <h1>Meu primeiro cabeçalho</h1> <p>Meu primeiro parágrafo</p> </body> </html> 142 Elementos HTML � Um elemento HTML é tudo desde a tag de abertura até a tag de fechamento Tag de abertura Elemento contido Tag de fechamento <p> Este é um parágrafo </p> <a href="pagina.html"> Este é um link </a> <br /> 143 Sintaxe dos elementos HTML � Um elemento HTML inicia com uma tag de abertura � Um elemento HTML termina com uma tag de fechamento � O elemento contido é qualquer coisa entre o início e o fim � Algumas tags HTML tem conteúdo vazio � Elementos vazios são fechados na tag de abertura � Algumas tags podem possuir atributos � Um elemento HTML inicia com uma tag de abertura � Um elemento HTML termina com uma tag de fechamento � O elemento contido é qualquer coisa entre o início e o fim � Algumas tags HTML tem conteúdo vazio � Elementos vazios são fechados na tag de abertura � Algumas tags podem possuir atributos 144 Elementos HTML Aninhados � A maior parte dos elementos HTML podem ser aninhados – podem conter outros elementos HTML � Um documento HTML consiste de elementos HTML aninhados <html> <body> <h1>Meu primeiro cabeçalho</h1> <p>Meu primeiro parágrafo</p> </body> </html> 145 Não esqueça a tag de fechamento! � A maior parte dos browsers irão exibir corretamente mesmo se você esquecer as tags de fechamento <p>Isto é um parágrafo <p>Isto é outro parágrafo � O exemplo acima irá funcionar na maioria dos browsers, mas não confine nisto. � Esquecer a tag de fechamento pode causar resultados inesperados ou erros em versões futuras de browsers � Obs.: versões futuras de HTML não permitirão que você não use as tags de fechamento 146 Elementos HTML vazios � Elementos HTML sem conteúdo são chamados de elementos vazios � Elementos vazios podem ser fechados na tag de abertura � <br> é um elemento que não possui uma tag de fechamento � Em XHTML, XML e versões futuras de HTML, todos os elementos deverão ser fechados � Utilize <... /> em tags vazias (sem conteúdo) - <br /> 147 Atributos HTML � Elementos HTML podem ter atributos � Atributos: � Fornecem informações adicionais sobre o elemento � Somente são especificados na tag de abertura � Aparecem em pares do tipo nome/valor: nome="valor" 148 Exemplo de atributo � Links HTML são especificados pela tag <a> � O endereço do link é fornecido como um atributo <a href='http://www.meslin.com.br'>Este é um link</a> 149 Utilize cotas para valores dos atributos � Os valores dos atributos devem ser escritos entre aspas " ou entre plics ' (aspas simples) <a href="http://www.meslin.com.br">Este é um link</a> <a href='http://www.meslin.com.br'>Este é um link</a> 150 Dica: utilize letras minúsculas � Tags HTML não diferenciam letras maiúsculas de minúsculas. � <P> e <p> significam a mesma coisa � W3C recomenda o uso de letras minúsculas em HTML 4 � Futuras versões de HTML e XHTML utilizarão somente tags com letras minúsculas � Nome do atributo e seu valor também não diferenciam maiúsculas de minúsculas � Da mesma forma, o uso de letras minúsculas para o nome do atributo é recomendável � Utilize também letras minúsculas para o valor do atributo, exceto quando o uso de letras maiúsculas for necessário 151 Cabeçalhos HTML � Cabeçalhos são definidos por tags de <h1> (maior letra) até <h6> (menor letra) � Exemplo: <html> <body> <h1>Este é um cabeçalho H1</h1> <h2>Este é um cabeçalho H2</h2> <h3>Este é um cabeçalho H3</h3> </body> </html> � Obs.: o browser adiciona uma quebra de linha antes e depois de um cabeçalho 152 Linhas em HTML � A tag <hr /> é utilizada para criar uma linha horizontal <html> <body> <h1>Este é um cabeçalho H1</h1> <hr /> <h2>Este é um cabeçalho H2</h2> <hr /> <h3>Este é um cabeçalho H3</h3> </body> </html> 153 Comentário HTML � Comentários devem ser incluídos nos códigos HTML para melhorar a legibilidade e o entendimento � Comentários são ignorados pelo browser – eles não são exibidos <!-- este é um comentário --> � Atenção: existe um ponto de exclamação no início da tag, mas não no final 154 Parágrafos � Parágrafos são definidos pela tag <p> <html> <body> <p>Isto é um parágrafo</p> <p>Isto é outro parágrafo</p> </body> </html> 155 Quebra de linhas � Utilize <br /> se você quiser quebrar uma linha sem começar um novo parágrafo <html> <body> <p>Isto é um parágrafo</p> <p>Isto é outro parágrafo</p> <p>Este é um <br /> pará<br /> grafo com quebra de linha</p> </body> </html> 156 Formatação 157 Atributo style � Utilize no lugar das seguintes tags: � <center> � <font> � <basefont> � <s> � <strikeout> � <u> � E dos seguintes atributos: � align � bgcolor � color 158 Exemplos de style � Cor do fundo: � Define uma cor de fundo para uma página: <body style="background-color:yellow"> � Tipo, cor e tamanho de fonte: � Define um estilo para um parágrafo <p style="font-family:courier new; color:red; font- size:20px"> � Alinhamento de texto: � Define um alinhamento para um cabeçalho <h1> <h1 style="text-align:center"> 159 Hiperlinks, âncoras e links � Hiperlink é uma referência a um recurso na web � Hiperlink pode apontar para qualquer recurso da web: � Uma página HTML � Uma imagem � Um arquivo de som � Um arquivo de filme � Âncora é o termo utilizado para o destino de um hiperlink dentro de um documento 160 Um link HTML � Sintaxe: <a href="url">texto do link</a> � Obs.: o "texto do link" não precisa ser um texto, pode ser uma imagem ou qualquer outro elemento HTML � O atributo href define o endereço destino do link <a href='http://www.meslin.com.br'>Meu site</a> � O código acima irá ser exibido em um browser da seguinte forma: Meu site 161 O atributo target � O atributo target define onde o documento referenciado deverá ser aberto <a href="http://www.meslin.com.br" target="_blank">Meu site</a> � O código acima irá abrir o documento em uma nova janela do browser 162 O atributo name � Quando o atributo name é utilizado, a tag <a> define uma âncora dentro de um documento HTML � Uma âncora é invisível para o usuário � Sintaxe: <a name="lugar">qualquer conteúdo (geralmente vazio)</a> � Um link para esta âncora dentro da mesma página: <a href="#lugar">o link</a> � Um link para esta âncora em outra página web <a href="pagina.html#lugar">o link</a> � Um link para esta âncora em outra página de outro site <a href="http://www.meslin.com.br/pagina.html#lugar">o link</a> 163 Imagens � Em HTML, uma imagem é definida por uma tag <img> � A tag <img> é vazia � O atributo src indica o endereço (url) da imagem � Sintaxe: <img src="url" /> � Exemplo: � Imagem no mesmo diretório do arquivo HTML <img src="imagem.gif"> � Imagem em outro diretório <img src="diretorio/imagem.gif" /> � Imagem em outro site <img src="http://www.meslin.com.br/diretorio/imagem.gif" /> 164 O atributo alt � Utilizado para definir um texto alternativo � Texto definido pelo autor � Ferramentasde acessibilidade utilizam este texto para descrever a imagem para deficientes visuais � O texto será mostrado � Se o endereço da imagem estiver errado � Se a imagem demorar a ser carregada � Se o usuário desabilitar a possibilidade do browser exibir imagem � Sintaxe: <img src="imagem.gif" alt="um texto alternativo"/> 165 Tabelas � Definição da tabela em si: <table> .... </table> � Atributos: � border = largura da borda em pixels � cellspacing = espaço entre as células � cellpadding = espaço entre o texto e as bordas � width = largura da tabela 166 Tabelas � Definição dos elementos da tabela: � <tr>....</tr> - Linha � <th>....</th> - Cabeçalho � <td>....</td> - Célula � Atributos: � valign = alinhamento vertical (TOP, MIDDLE ou BOTTOM) � align = alinhamento horizontal (LEFT, CENTER ou RIGHT) � rowspan = número de linhas ocupadas pela célula � colspan = número de colunas ocupadas pela célula � width = largura da célula � height = altura da célula � bgcolor = cor de fundo � nowrap 167 Tabelas � Aplicando cores na tabela: � bgcolor pode ser usado dentro de � <table> � <tr> � <td> 168 Exemplos de tabelas <html> <body> <table border="1"> <tr> <td>linha 1, célula 1</td> <td>linha 1, célula 2</td> </tr> <tr> <td>linha 2, célula 1</td> <td>linha 2, célula 2</td> </tr> </table> </body> </html> 169 Tabela com cabeçalho <html> <body> <table border="1"> <tr> <th>Cabeçalho</th> <th>Outro Cabeçalho</th> </tr> <tr> <td>linha 1, célula 1</td> <td>linha 1, célula 2</td> </tr> <tr> <td>linha 2, célula 1</td> <td>linha 2, célula 2</td> </tr> </table> </body> </html> 170 Tabela com célula vazia <html> <body> Uma tabela <table border="1"> <tr> <td>linha 1, célula 1</td> <td>linha 1, célula 2</td> </tr> <tr> <td>linha 2, célula 1</td> <td></td> </tr> </table> Outra tabela <table border="1"> <tr> <td>linha 1, célula 1</td> <td>linha 1, célula 2</td> </tr> <tr> <td>linha 2, célula 1</td> <td> </td> </tr> </table> </body> </html> 171 Listas não numeradas � <ul type="circle" | "disc" | "square"> <li type="circle" | "disc" | "square" value="numero"> </ul> 172 Listas não numeradas <ul> <li> Correio Eletrônico </li> <li> Telnet </li> <li> FTP </li> </ul> � Obs: � Listas podem ser aninhadas � </li> é opcional atualmente, mas devemos nos lembrar de colocar 173 Listas Numeradas <ol start="numero" type="A" | "a" | "I" | "i" | "1"> <li type="circle" | "disc" | "square" | "A" | "a" | "I" | "i" | "1" value="numero"> </ol> 174 Listas numeradas <ol> <li> Correio Eletrônico </li> <li> Telnet </li> <li> FTP </li> </ol> 175 Listas usando estilo � <ol style="list-style-type: tipo;"> � tipo: � decimal – números decimais começando de 1 � decimal-leading-zero – números decimais começando com zero (ex: 01, 02, 03, ..., 98, 99). � lower-roman: algarismos romanos minúsculos � upper-roman : algarismos romanos maiúsculos � hebrew: números hebraicos tradicionais � georgian: números "Georganos" tradicionais(an, ban, gan, ..., he, tan, in, in-an, ...). � armenian: números armenianos tradicionais � cjk-ideographic: números plenamente ideograficos � hiragana: a, i, u, e, o, ka, ki, ... � Katakana: A, I, U, E, O, KA, KI, ... � hiragana-iroha: i, ro, ha, ni, ho, he, to, ... � katakana-iroha: I, RO, HA, NI, HO, HE, TO, ... 176 Exemplo de listas Lista não ordenada <ul> <li> Correio Eletrônico </li> <li> Telnet </li> <li> FTP </li> </ul> Lista ordenada <ol> <li> Correio Eletrônico </li> <li> Telnet </li> <li> FTP </li> </ol> Romano Minúsculo <ol style="list-style-type: lower-roman;"> <li> Este é o primeiro item.</li> <li> Este é o segundo item.</li> <li> Este é o terceiro item.</li> </ol> Decimal <ol style="list-style-type: decimal;"> <li> Este é o primeiro item.</li> <li> Este é o segundo item.</li> <li> Este é o terceiro item.</li> </ol> Romano Maiúsculo <ol style="list-style-type: upper-roman;"> <li> Este é o primeiro item.</li> <li> Este é o segundo item.</li> <li> Este é o terceiro item.</li> </ol> Alfabético minúsculo <ol style="list-style-type: lower-alpha;"> <li> Este é o primeiro item.</li> <li> Este é o segundo item.</li> <li> Este é o terceiro item.</li> </ol> Alfabético minúsculo <ol style="list-style-type: upper-alpha;"> <li> Este é o primeiro item.</li> <li> Este é o segundo item.</li> <li> Este é o terceiro item.</li> </ol> 177 Formulários � Um formulário é uma área onde são colocados os elementos de um formulário � Elementos de um formulário permitem ao usuário entrar com informações � Um formulário é definido pela tag <form> <form> Elementos de entrada </form> 178 Formulários: Codificação Básica <form method="post|get" action="URL do CGI"> . . . definição dos ítens do formulário . . . </form> � Para enviar o formulário por e-mail: <form action="mailto:nome@servidor" enctype="text/plain"> 179 Campo de Texto Conta:<input type="text" name="conta" size="20" maxlength="20" /> Senha:<input type="password" name="senha" size="20" maxlength="20" /> 180 Área de Texto Comentários:<br /> <textarea name="texto" rows="3" cols="40"> Digite aqui um texto qualquer. </textarea> 181 Menus � Sexo: <select name="sexo"> <option selected>Masculino</option> <option>Feminino</option> </select> 182 Botões "Sim ou Não" � Áreas de interesse: <br /> <input type="checkbox" name="b1" value="v1" />Redes<br /> <input type="checkbox" name="b2" value="v2" />Bancos de Dados<br /> 183 Botões de Rádio � Sexo: <input type="radio" name="sexo" value="M" />Masculino <input type="radio" name="sexo" value="F" />Feminino 184 Outros Campos � Campo escondido <input type="hidden" name="nome" value="valor" /> � Campo de upload de arquivo <input type="file" name="nome" value="valor" /> 185 Botões de Envio � <input type="submit" value="Envia" /> <input type="reset" value="Limpa" /> 186 Tabelas � Com tabelas, podemos facilmente dividir uma página em colunas e células 187 Frames � Com frames, podemos mostra mais do que um documento HTML na mesma janela do browser � Cada documento HTML se localiza em um frame � Os frames são independentes � Problemas: � Vários documentos HTML � Pode gerar dificuldades com a impressão 188 A tag <frameset> � Define como a janela será dividida em frames � Cada <frameset> define um conjunto de linhas OU colunas 189 A tag <frame> � Define o documento HTML que irá ocupar o frame � Exemplo: � Um conjunto de duas colunas � A primeira com 25% da largura � O documento frameA.html ocupará a primeira coluna enquanto o documento frameB.html a segunda <frameset cols="25%,*"> <frame src="frameA.html" /> <frame src="frameB.html" /> </frameset> � Obs.: o tamanho da coluna pode ser especificado em pixels 190 Exemplo <html> <frameset rows="50%,50%"> <frame noresize="noresize" src="frame_a.htm" name="FrameA"> <frameset cols="25%,75%"> <frame noresize="noresize" src="frame_b.htm" name="FrameB"> <frame noresize="noresize" src="frame_c.htm" name="FrameC"> </frameset> </frameset> </html> 191 Exemplo de uso de <iframe> <html> <body> <iframe src="default.asp"/> <p>Some older browsers don't support iframes.</p> <p>If they don't, the iframe will not be visible.</p> </body> </html> 192 Modificando fontes � A tag <font> é desaconselhada � Devemos utilizar o atributo style <html> <body> <h1 style="font-family:verdana">Cabeçalho</h1> <p style="font-family:courier">Parágrafo</p> </body> </html> � Tamanho de fontes <html> <body> <h1 style="font-size:150%">Cabeçalho</h1><p style="font-size:80%">Parágrafo</p> </body> </html> 193 Mais fontes � Cor do texto <html> <body> <h1 style="color:blue">Cabeçalho</h1> <p style="color:red">Parágrafo</p> </body> </html> � Combinando tudo... <html> <body> <p style="font-family:verdana;font-size:80%;color:green"> Este é um parágrafo em verdana, com 80% do tamanho na cor verde. </p> </body> </html> 194 Mais sobre estilos � Uso de uma folha de estilos externa: <head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head> � Uma folha de estilos interna <head> <style type="text/css"> body {background-color: red} p {margin-left: 20px} </style> </head> � Estilos inline <p style="color:red; margin-left:20px">Parágrafo</p> 195 Caracteres especiais 196 Elementos de um cabeçalhos � Dentro das tags <head></head> podemos encontrar: � <base> : define a base para os links neste documento � <link> : define uma referência para recursos � <meta> : define meta-informações � <title> : define o título do documento � <style> : define um estilo � <script> : permite a criação de scripts 197 Tag <meta> � Descrição da página: <meta name="description" content="Free Web tutorials on HTML, CSS, XML, and XHTML" /> � Definição de palavras chaves: <meta name="keywords" content="HTML, DHTML, CSS, XML, XHTML, JavaScript" /> � Outros atributos de meta (???) <meta name="security" content="low" /> 198 Links � Um link tem o seguinte formato: esquema://[host].domínio:[porta][/caminho][/arqu ivo] � esquema: tipo de serviço � host: nome da máquina � domínio: domínio onde está a máquina � porta: número da porta � caminho: pasta ou diretório � arquivo: o arquivo propriamente dito 199 Alguns esquemas 200 Exemplos � Acesso a newsgroup <a href="news:alt.html">HTML Newsgroup</a> � Download via ftp <a href="ftp://ftp.meslin.com.br/ftp/winzip.exe">Download WinZip</a> � Enviando email <a href="mailto:alguem@correio.com.br">Enviar email para alguém</a> � Link para uma outra página em outro site: <a href='http://www.outrosite.com.br/diretorio/arquivo'>O link</a> 201 Exemplos � Link para uma outra página no meu site: <a href='/diretorio/arquivo'>O link</a> � Equivalente a <a href='http://www.meusite.com.br/diretorio/arqui vo'>O link</a> � Link para um arquivo no mesmo diretório <a href='arquivo.html'>O link</a> � Para mudar de protocolo href='https://www.meusite.com.br/diretorio/arqui vo'>O link</a> 202 Scripts (em javascript, é óbvio!) � Não confunda Java com Javascript! <html> <body> <script type="text/javascript"> document.write("Alo mundo!"); </script> </body> </html> 203 Eventos � Eventos relativos a janelas � Somente válidos em body e em frameset 204 Eventos � Eventos relativos a formulários � Somente válidos em elementos de formulários 205 Eventos � Eventos de teclado 206 Eventos � Eventos relativos a mouse 207 Perguntas? 208 Parte 4 � Java Server Page � Elementos de script � Tags � Declarações de variáveis e métodos 209 JSP - Java Server Page � Tecnologia para desenvolvimento de aplicações WEB semelhante ao Microsoft Active Server Page (ASP). � Usada para servir conteúdo dinâmico para o usuário, usando lógica e dados no lado do servidor. � Permite ao desenvolvedor de sites produzir aplicações que permitam: � o acesso a banco de dados ou a arquivos texto, � a captação de informações através de formulários ou sobre o visitante e sobre o servidor, � o uso de variáveis e loops, entre outras coisas. 210 Vantagens do JSP � Portabilidade de plataforma. � Em conjunto com Java Servlets e Java Beans pode ser usada para desenvolver aplicações web eficientes, escaláveis e seguras rapidamente. � Codificação simples, facilitando assim a elaboração e manutenção da aplicação. � Permite separar a programação lógica (conteúdo dinâmico) da programação visual (conteúdo estático). 211 Arquitetura de Aplicação Java para Web JSP Application Server Browser Servlet Classes Java / EJB HTTP / HTML Banco de Dados 212 Um página JSP � É um documento texto composto por duas partes: � dados de template estáticos, que podem ser expressos em qualquer formato baseado em texto (HTML, XML e similares); � e elementos JSP, construindo conteúdo dinâmico. 213 Funcionamento � A página JSP é requisitada pelo cliente através do browser; � Esta página é executada pelo servidor; � É gerada uma página HTML que será enviada de volta ao browser do cliente. 214 Tags JSP � As tags em HTML são processadas pelo navegador do cliente para mostrar a página. � As tags no JSP são usadas pelo servidor WEB para gerar conteúdo dinâmico. � Tags do tipo script � <% %> � ! � = � @ 215 Tags JSP � Tags do tipo XML � Case-sensitive � Self-container � <jsp:xxxxx /> � Container � <jsp:xxxxxx> yyyyyyy </jsp:xxxxxx> 216 Elementos de Script � Scriptlets <% %> � Declarações <%! %> � Expressões <%= %> � Comentários <%-- --%> � Diretivas <%@ %> 217 Scriptlets � <% scriptlet %> � São blocos de código Java embutidos numa página JSP. � O código do scriptlet é inserido literalmente no servlet gerado pela página. � Sintaxe: <% bloco com vários comandos %> � Exemplo: (Alo mundo! no próximo slide) 218 Elementos de Scripts: scriptlets <HTML> <HEAD> <TITLE>Alo mundo!!!</TITLE> </HEAD> <BODY> <% String visitante = request.getParameter("nome"); if (visitante == null) visitante = "mundo"; %> Alo <%=visitante%>! </BODY> </HTML> package org.apache.jsp.AloMundo; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class AloMundo_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory; private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() { return _jspx_dependants; } public void _jspInit() { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName()); } public void _jspDestroy() { } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; try { response.setContentType("text/html"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("<HTML>\r\n"); out.write("<HEAD>\r\n"); out.write("<TITLE>Alo mundo!!!</TITLE>\r\n"); out.write("</HEAD>\r\n"); out.write("<BODY>\r\n"); String visitante = request.getParameter("nome"); if (visitante == null) visitante = "mundo"; out.write("\r\n"); out.write("Alo "); out.print(visitante); out.write("!\r\n"); out.write("</BODY>\r\n"); out.write("</HTML>\r\n"); } catch (Throwable t) { if(!(t instanceof SkipPageException)){ out = _jspx_out; if (out != null && out.getBufferSize() != 0) try { out.clearBuffer(); } catch (java.io.IOException e) {} if (_jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finally { _jspxFactory.releasePageContext(_jspx_page_context); } } } 219 Declarações � São usadas para definir variáveis de classe e métodos específicos para uma página JSP. � Os métodos e variáveis podem então ser referenciados por outros elementos de criação de scriptlets na mesma página. � Sintaxe: � <%! Declaração %> � <jsp:declaration>declarações</jsp:declaration> � Exemplo � <%! int i = 0; double d; %> � <%! Cliente c = new Cliente("Francesca");%> 220 Declaração de variáveis de classe <html> <head> <title>Variáveis</title> </head> <body> <%!int a; %> <%int b; %> </body> </html> package org.apache.jsp.AloMundo; … public final class Variaveis_jsp extends ... { int a; public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { … out.write("<html>\n"); out.write("<head>\n"); out.write("<title>Variáveis</title >\n"); out.write("</head>\n"); out.write("<body>\r\n"); out.write('\n'); int b; out.write("\n"); out.write("</body>\n"); out.write("</html>"); … 221 Declaração de Métodos <%! public long fatorial (long x) { if (x == 0) return 1; return x * fatorial (x-1); } %> � Por que tem que ser uma declaração e não pode ser um scriptlet? 222 Declarações <html> <head> <title>Página inicial</title> </head> <body> Criando as variáveis x, y e unidades com os respectivos valores 0, 1, "metros" <%! private int x = 87, y = 52; private String unidades="metros"; %> <% int z = 8752; %> <p> x = <%=x++ %><br> y = <%=y-- %><br> unidades = <%=unidades %><br> z = <%=--z %><br> </body> </html> 223 Manipulando eventos com ciclo de vida <%! public void jspInit() { // código de inicialização } public void jspDestroy() { // código de "destruição" } %> 224 Manipulando eventos com ciclo de vida <%@ page import="java.util.Date" %> <html> <head> <title>jspInit & jspDestroy</title> </head> <body> <% Date data = new Date(); %> Último acesso em: <%=data.getHours()%>:<%=data.getMinutes()%>:<%=data.getSeconds()%> <%! public void jspInit() // código de inicialização { Date data = new Date(); System.out.println("***Iniciando a página em " + data.getHours() + ":" + data.getMinutes() + ":" + data.getSeconds() + "***"); } public void jspDestroy() // código de "destruição" { Date data = new Date(); System.out.println("***Terminando a página em " + data.getHours() + ":" + data.getMinutes() + ":" + data.getSeconds() + "***"); } %> </body> </html> 225 Expressões � Contém uma expressão válida da linguagem Java, que é avaliada, convertida para String e inserida na página JSP. � Não é usado ponto-e-vírgula para terminar a expressão. � Essa avaliação é feita em tempo de execução (quando a página é solicitada), permitindo fácil e rápido acesso à informação que foi requisitada. 226 Elementos de Script: expressões � Sintaxe: � <%= expressão %> � <jsp:expression>expressão</jsp:expression> � Equivalente a: � <% out.print(expressão); %> � Exemplo: <%= a+b+c %> <%= itens[i] %> 227 Alo Mundo (2) em JSP <HTML> <HEAD> <TITLE>Alo mundo!!!</TITLE> </HEAD> <BODY> <% String visitante = request.getParameter("nome"); if (visitante == null) visitante = "mundo"; %> Alo <%=visitante%>! </BODY> </HTML> 228 Comentários � Existem dois tipos de comentários que podem ser usados em uma página JSP: � Comentários de Conteúdo: Esses comentários são transmitidos de volta para navegador como parte da resposta de JSP e são visíveis na visualização do código da página. � <!-- comentário --> � Cometários JSP: Não são enviados para o cliente e são visíveis apenas nos arquivos fonte JSP originais. O corpo do comentário é ignorado pelo container JSP. � <%-- comentário --%> � <% /* comentário */ %> � <% // comentário %> 229 Parte 4,5 � Diretivas � page � include � taglib 230 Diretivas � São usadas para fornecer informações especiais ao container JSP sobre a página JSP quando esta é compilada para servlet. � Sintaxe: � <%@ diretiva atributo1="valor1" atributo 2="valor2" ... %> � <jsp:directive.diretiva atributo1="valor1" atributo 2="valor2" ... /> 231 Diretivas � Não produz saída visível para o cliente. � Existem três tipos de diretivas: � page: define atributos que são aplicados a todo o arquivo JSP e a todos os seus arquivos incluídos estaticamente. � include: permite que sejam incluídos arquivos na hora em que a página JSP é traduzida no servlet. � taglib: definem um modelo de tags personalizadas 232 Diretiva page � info � language � contentType � extends � import � session � buffer � autoFlush � isThreadSafe � errorPage � isErrorPage 233 Diretiva page: info � Informações sobre documentação � Utilizado por programas de documentação � <%@ page info="Informações sobre esta página" %> � Normalmente incluir: � Autor � Versão � Copyright � <%@page info="e-Comércio, Copyright 2005, Alexandre Meslin" %> 234 Diretiva page: info <%@ page info = "Alo mundo, copyright by Meslin" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Alo mundo!</TITLE> </HEAD> <BODY> <h1>Alo mundo!!!</h1> e só... </BODY> </HTML> 235 Diretiva page: info 236 Diretiva page: info 237 Diretiva page: language � Utilizado para especificar a linguagem de script de servidor utilizada na página � Java, por padrão � <%@ page language="java" %> 238 Diretiva page: language <%@ page info = "Alo mundo, copyright by Meslin" language="java" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML><HEAD> <TITLE>Exemplo de escolha de linguagem</TITLE> </HEAD> <BODY> <h1>Alo mundo!!!</h1> e só... </BODY></HTML> 239 Diretiva page: contentType � Especifica o conteúdo da resposta a ser enviada � <%@page contentType="text/html; charset=ISO-8859-1" %> � <%@page contentType="text/xml" %> � <%@page contentType="text/plain" %> � <%@page contentType="image/gif" %> � <%@page contentType="image/jpeg" %> � <%@page contentType="application/msword" %> 240 Diretiva page: contentType <%@ page contentType="application/vnd.ms-excel"%> <HTML><HEAD><TITLE>Planilha Excel</TITLE></HEAD><BODY> <TABLE> <TR ALIGN="left" VALIGN="middle"> <TH>Mes</TH> <TH>Filial 1</TH> <TH>Filial 2</TH> <TH>Filial 3</TH> <TH>Filial 4</TH> <TH>Filial 5</TH> </TR> <TR ALIGN="left" VALIGN="middle"> <TD>1</TD> <TD>1</TD> <TD>2</TD> <TD>3</TD> <TD>4</TD> <TD>5</TD> </TR> <TR ALIGN="left" VALIGN="middle"> <TD>2</TD> <TD>1</TD> <TD>2</TD> <TD>3</TD> <TD>4</TD> <TD>5</TD> </TR> <TR ALIGN="left" VALIGN="middle"> <TD>3</TD> 241 Mime types � application/msword doc � application/pdf pdf � application/vnd.ms-excel xls � application/vnd.ms- powerpoint ppt � application/x-shockwave- flash swf � image/bmp bmp � image/gif gif � image/jpeg jpeg jpg jpe � image/png png � video/mpeg mpeg mpg mpe � application/zip zip � text/xml xml dtd xsl � text/html shtml html htm � text/css css � image/tiff tiff tif � audio/x-wav wav � audio/midi mid midi kar � audio/mpeg mpga mp2 mp3 � application/postscript ai eps ps � video/quicktime qt mov 242 Mime types � application/andrew-inset ez � application/mac-binhex40 hqx � application/mac-compactprocpt � application/mathml+xml mathml � application/octet-stream bin dms lha lzh exe class so dll � application/oda oda � application/ogg ogg � application/rdf+xml rdf � application/smil smi smil � application/srgs gram � application/srgs+xml grxml � application/vnd.mif mif � application/vnd.mozilla.xul+xml xul � application/vnd.wap.wbxml wbxml � application/vnd.wap.wmlc wmlc � application/vnd.wap.wmlscriptc wmlsc � application/voicexml+xml vxml � application/x-bcpio bcpio � application/x-cdlink vcd � application/x-chess-pgn pgn � application/x-cpio cpio � application/x-x509-ca-cert .crt � application/xhtml+xml xhtml xht � application/xml xml xsl � application/xml-dtd dtd � application/xslt+xml xslt � audio/basic au snd � audio/x-aiff aif aiff aifc � audio/x-mpegurl m3u � audio/x-pn-realaudio ram rm � audio/x-pn-realaudio-plugin rpm � audio/x-realaudio ra � chemical/x-pdb pdb � chemical/x-xyz xyz � image/cgm cgm � image/ief ief � image/svg+xml svg � image/vnd.djvu djvu djv � image/vnd.wap.wbmp wbmp � image/x-cmu-raster ras � image/x-icon ico � image/x-portable-anymap pnm � image/x-portable-bitmap pbm 243 Diretiva page: extends � <%@ page extends="pacote1.pacote2.Classe" %> 244 Diretiva page: import � <%@ page import="java.util.List" %> � <%@ page import="java.util.List, java.text.*" %> 245 Diretiva page: import <%@ page info="eu já vi isto antes..." language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" import="java.util.Date" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <TITLE>Dia & Hora</TITLE> </head> <body> <h1>Dia e Hora</h1> <% Date data = new Date(); %> Ao sinal serão... <%=data.getDate()%>/<%=data.getMonth()+1%>/<%=data.getYear()+1900%> - <%=data.getHours()%>:<%=data.getMinutes()%> </body> </html> 246 Diretiva page: session � Informa se a página deve participar ou não da sessão � true por padrão � <%@ page session="false" %> � <%@ page session="true" %> 247 Diretiva page: session <%@ page info="Copyright: Alexandre Meslin" language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" session="true" %> <html> <head> <title>Sessão</title> </head> <body> <% int cont=Integer.parseInt(session.getAttribute("cont")==null?"0":sessio n.getAttribute("cont").toString()); session.setAttribute("cont", new Integer (++cont)); %> Bem vindo visitante <%= cont %> </body> </html> 248 Diretiva page: buffer � Informa o tamanho do buffer de saída � <%@ page buffer="none"%> � <%@ page buffer="128kb"%> � O valor padrão depende do servidor utilizado � Normalmente igual ou maior que 8 kbytes 249 Diretiva page: autoFlush � Verdadeiro: o buffer é enviado quando cheio � Falso: é levantada uma exceção quando o buffer estiver cheio � <%@ page autoFlush="true"%> � <%@ page autoFlush="false"%> � Obs.: o valor falso é inválido para buffer="none" 250 Diretiva page buffer & autoFlush <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" buffer="128kb" autoFlush="false" %> <html> <head> <title>Flush e Buffer (128k)</title> </head> <body> <% out.flush(); %> Início da página... <% Thread.sleep(20*1000); // tempo em milisegundos out.flush(); Thread.sleep(20*1000); // tempo em milisegundos %> <p>Fim da página... </body> </html> 251 Diretiva page: isThreadSafe � Indica se a thread pode ser executada em paralelo a outras instâncias dela <%@ page isThreadSafe="true"%> <%@ page isThreadSafe="false"%> � Default: true � Veja exemplo no próximo slide de um código não seguro 252 Diretiva page: isThreadSafe � Exemplo de código não seguro <%@ page language="java" isThreadSafe="false" %> <html> <head> <title>Thread Unsafe</title> </head> <body> <%! private int idNum = 0; %> <% String userID = "userID" + idNum; out.println("Seu ID é " + userID + "."); idNum = idNum + 1; %> </body> </html> 253 Diretiva page: isThreadSafe � Exemplo de código seguro <%@ page language="java" isThreadSafe="true" %> <html> <head> <title>Thread Safe</title> </head> <body> <%! private int idNum = 0; %> <% synchronized(this) { String userID = "userID" + idNum; out.println("Seu ID é " + userID + "."); idNum = idNum + 1; } %> </body> </html> Péssima idéia usar “this” para sincronizar 254 Diretiva page: errorPage � Importância de uma página de erro (veja o próximo slide) � Não substitui o conjunto try-catch � Mensagem de erro ao usuário deve ser clara e procurar minimizar o problema � Deve apresentar alternativas ou forma eficiente de contato para solucionar o problema 255 Diretiva page: errorPage 256 Diretiva page: errorPage 257 Diretiva page: errorPage 258 Diretiva page: errorPage 259 Diretiva page: errorPage � <%@ page errorPage="/dir/erro.jsp"%> <%@page errorPage="Erro.jsp" %> <HTML> <HEAD><TITLE>Cálculo de Velocidade</TITLE></HEAD> <BODY> <h1>Calculando a velocidade</h1> <%! private double toDouble (String valor) { return Double.valueOf(valor).doubleValue(); } %> <% double distancia = toDouble (request.getParameter("dist")); double tempo = toDouble (request.getParameter("tempo")); double vel = distancia/tempo; %> <ul> <li>Distância = <%=distancia%> <li>Tempo = <%=tempo%> <li>Velocidade = <b><%=vel%> km/h</b> </ul> </BODY> </HTML> 260 Diretiva page: isErrorPage � <%@ page isErrorPage= "true" %> <%@page import="java.io.*" isErrorPage="true" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Arquivo de erro de velocidade</TITLE> </HEAD> <BODY> <h1><font color=red>Erro ao calcular velocidade</font></h1> Ocorreu o seguinte erro em Velocidade.jsp: <%=exception%>. <p> Este erro ocorreu na seguinte parte do código (esta mensagem abaixo, em vermelho, você não está vendo!): <pre> <font color="red"> <% exception.printStackTrace(new PrintWriter (out)); %> </font> </pre> </BODY> </HTML> Obviamente, isto é apenas um exemplo, ninguém vai imprimir a stack para o usuário 261 Diretiva page: isErrorPage � Mesma página sem isErrorPage... <%@page import="java.lang.Exception,java.io.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Arquivo de erro de velocidade</TITLE> </HEAD> <BODY> <h1><font color=red>Erro ao calcular velocidade</font></h1> Ocorreu o seguinte erro em Velocidade.jsp: <%="Não tenho o objeto exception"%>. <p> Este erro ocorreu na seguinte parte do código: <% // exception.printStackTrace(new PrintWriter (out)); %> </BODY> </HTML> 262 Diretiva include � É processada quando a página JSP é traduzida para uma classe de servlet. � O efeito da diretiva é inserir o texto contido em outro arquivo - conteúdo estático ou outra página JSP - na página JSP inclusiva. � Sintaxe � <%@ include file="URLlocal" %> � Exemplo (no próximo slide) � Rodape.jsp � Pagina.jsp 263 Diretiva include – exemplo � Pagina.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Página com include</TITLE> </HEAD> <BODY> <h1>Exemplo de include</h1> Esta página tem um include que inclui um arquivo chamado Rodape.jsp. Este arquivo realiza um contador de acessos. <p>Veja logo a seguir o efeito: <p> <%@include file="Rodape.jsp" %> <p> Voltei!!! Será? </BODY> </HTML> 264 Diretiva include – exemplo � Rodape.jsp <!-- note a ausência de cabeçalho html --> <%@page import="java.util.Date"%> <%! private int contador = 0; privateDate data = new Date (); private String host = "nenhum acesso anterior"; %> Esta página foi acessada <%=++contador%> vezes desde que o conteiner foi reiniciado.<br> E foi acessada a última vez por <%=host%> em <%=data%>. <% host = request.getRemoteHost(); data = new Date(); %> 265 Contador com arquivo <%@page language="java"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Contagem permanente</TITLE> </HEAD> <BODY> <h1>Exemplo de include</h1> Esta página tem um include que inclui um arquivo chamado RodapeArquivo2.jsp. Este arquivo realiza um contador de acessos onde o nome do arquivo é passado como parâmetro para o arquivo de contagem. <p>Veja logo a seguir o efeito: <jsp:include page="RodapeArquivo2.jsp" flush="true"> <jsp:param name="arquivo" value="contador.txt" /> </jsp:include> </BODY> </HTML> 266 Contador com arquivo � Rodapé: arquivo RodapeArquivo2.jsp <!-- note a ausência de cabeçalho html --> <%@ page import="java.io.*"%> <% String arquivo = new String ("C:\\Documents and Settings\\meslin\\My Documents\\Cursos\\JSP\\auxiliar\\"+request.getParameter("arquivo")); int contador; try { BufferedReader entrada = new BufferedReader(new FileReader(arquivo)); contador = Integer.parseInt(entrada.readLine()); entrada.close(); } catch (IOException e) { contador = 0; } catch (Exception e) { contador = 0; } contador++; BufferedWriter saida = new BufferedWriter(new FileWriter(arquivo)); saida.write(String.valueOf(contador)); saida.close(); %> <hr>Esta página foi acessada <%=contador%> vezes desde que o container foi criado. 267 Diretiva taglib � <%@ taglib uri="URIBiblioteca" prefix="Prefixo"%> � <jsp:directive.taglib uri="URIBiblioteca" prefix="Prefixo" /> 268 Diretiva taglib – Arquivo AloMundo.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <%@ taglib uri="AloMundo.tld" prefix="alo" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title><alo:mundo />JTLB</title> </head> <body> <h1><alo:mundo /></h1> </body> </html> 269 Diretiva taglib – Arquivo AloMundo.tld <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web- jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>alo</shortname> <info>TabLib de Alo Mundo!!!</info> <tag> <name>mundo</name> <tagclass>tagLib.AloMundo</tagclass> <info>Devolve Alo Mundo</info> <bodycontent>EMPTY</bodycontent> </tag> </taglib> 270 Diretiva taglib – Arquivo AloMundo.java package tagLib; import java.io.IOException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class AloMundo extends TagSupport { private static final long serialVersionUID = 1L; public int doStartTag() { JspWriter saida = pageContext.getOut(); try { saida.print("Alo mundo!!!"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } } 271 Diretiva taglib – Arquivo AloMundos.jsp <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <%@ taglib uri="AloMundo.tld" prefix="alo" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title><alo:mundos vezes='3' /> JTLB</title> </head> <body> <h1><alo:mundos vezes ='5' /></h1> </body> </html> 272 Diretiva taglib – Arquivo AloMundo.tld <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web- jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>alo</shortname> <info>TabLib de Alo Mundo!!!</info> <tag> . . . </tag> <tag> <name>mundos</name> <tagclass>tagLib.AloMundos</tagclass> <info>Devolve Alo Mundo Mundo Mundo...</info> <bodycontent>EMPTY</bodycontent> <attribute> <name>vezes</name> <required>false</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib> 273 Diretiva taglib – Arquivo AloMundos.java package tagLib; import java.io.IOException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; public class AloMundos extends TagSupport { private static final long serialVersionUID = 1L; private int vezes=0; public int getVezes() { return vezes; } public void setVezes(int vezes) { this.vezes = vezes; } public int doStartTag() { JspWriter saida = pageContext.getOut(); try { saida.print("Alo"); for (int i = 0; i < vezes; i++) saida.print(" Mundo"); saida.print("!!!"); } catch (IOException e) { e.printStackTrace(); } return SKIP_BODY; } } 275 Perguntas? 276 Exercícios 1 277 Exercícios em conjunto 1. Faça uma página HTML que escreva “Alo mundo!”. 2. Converta a página do exercício anterior para JSP 3. Mude o valor estático da frase do exercício anterior para uma string JSP 278 Exercícios individuais � Faça uma página que mostre o valor de uma variável � Algoritmo: � Crie uma variável � Atribua um valor a esta variável � Mostre o valor da variável em um browser 279 Exercícios individuais � Faça uma página que some dois números inteiros (2 e 3) utilizando variáveis e mostre o resultado no formato: 2 + 3 = 5 � Algoritmo: � Crie 3 variáveis � Atribua 2 e 3 às duas primeiras variáveis � Some as duas variáveis e armazene o resultado na terceira variável � Mostre o resultado no formato pedido 280 Exercícios individuais � Faça uma página que escreva os números de 0 até 9, um número em cada linha. 0 1 2 3 4 5 6 7 8 9 281 Exercícios individuais � Faça uma página que imprima números de 0 até 99 (10 em cada linha). 282 Exercícios individuais � Faça uma página que mostre um tabuleiro de xadrez (8x8) 283 Exercícios individuais 1. Faça uma página que mostre o dia e a hora do servidor no formato: dd/mm/aaaa – hh:mm. 2. Refaça a página anterior para mostrar a data por extenso em português. Sábado, 25 de setembro de 2004 284 Exercícios individuais � Faça uma página JSP que imprima uma tabela HTML de conversão Celsius-Fahrenheit com valores de temperatura entre -40 e 100 graus Celsius em incremento de 10 em 10. A equação é: F = 9/5 C + 32 285 Exercícios individuais � Faça uma página que possua um contador de acesso. 286 Exercícios individuais 1. Faça uma página JSP que gere um conteúdo no formato texto 2. Modifique o exercício anterior para gerar um conteúdo no formato documento do MS- Word 287 Parte 5 � Objetos Implícitos 288 Objetos Implícitos � page � config � request � response � out � session � application � pageContext � exception 289 pageContext � Usado em servlets para obter informações de contexto de JSP � Classe: � javax.servlet.jsp.PageContext 292 pageContext.forward(url) � Desvia para a página especificada pela url relativa <%@ 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> <title>Página não vista</title> </head> <body> <h1>Esta página irá desviar para outra página</h1> (em 10 segundos!) <% //out.flush(); // com flush o forward não funciona! Thread.sleep(10 * 1000); pageContext.forward("final.jsp"); %> </body> </html> 293 pageContext.include(url) � Inclui a página especificada pela url relativa <%@ pagelanguage="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>Página original</title> </head> <body> <h1>Texto na página original!</h1> <%pageContext.include("paginaIncluida.jsp"); %> <h2>Novamente, texto na página original</h2> </body> </html> 294 page � Representa a própria página � Interface: � javax.servlet.jsp.HttpJspPage � Descrição: Instância de servlet da página. � Equivalente ao “this”. 295 config � Recupera parâmetros de inicialização � Interface: javax.servlet.ServletConfig. � Descrição: Dados de configuração de servlet. � Raramente utilizado � Enumeration config.getInitParameterNames() � String config.getInitParameter(String nome) � ServletContext config.getServletContext() � String config.getServletName() 297 request � Interface: � javax.servlet.ServletRequest. � Descrição: Dados de solicitação, incluindo parâmetros. 298 request - atributos � Atributos � Object request.getAttribute(String nome) � Valor do atributo por nome � Enumeration request.getAttributeNames() � Nome dos atributos � void request.setAttribute(String nome, Object valor) � Modifica valor do atributo por nome � void request.removeAttribute(Object nome) � Remove atributo Exemplo no próximo slide 299 request - atributos <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %> <html> <head> <title>Cria atributos</title> </head> <body> <h1>Cria atributos...</h1> <% request.setAttribute("atributo1", "valor1"); request.setAttribute("atributo2", "valor2"); request.setAttribute("atributo3", "valor3"); RequestDispatcher proximo = request.getRequestDispatcher("Request.jsp?campo=banana&campo 1=abacaxi&campo2=abacate"); proximo.forward(request, response); %> </body> </html> request – atributos <HTML> <BODY> <H1>Objeto Request</H1> <H2>Métodos</H2> <TABLE BORDER> <TR> <TH COLSPAN="2">Atributos</TH> </TR> <TR> <TD>request.setAttribute(nome,valor)</TD><TD><%request.setAttribute("nome","valor");%></TD> </TR> <TR> <TD>request.getAttribute(nome)</TD><TD><%=request.getAttribute("nome")%></TD> </TR> <TR> <TD>request.getAttribute("atributo1")</TD><TD><%=request.getAttribute("atributo1")%></TD> </TR> <TR> <TD>request.getAttributeNames()</TD> <TD><%=request.getAttributeNames()%> <% Enumeration<String> atributos = (Enumeration<String>)request.getAttributeNames(); while (atributos.hasMoreElements()) { out.println ("<br>|" + atributos.nextElement() + "|"); } %> </TD> </TR> <TR> <TD>request.removeAttribute(nome)</TD><TD><%request.removeAttribute("nome");%></TD> </TR> </TABLE> </BODY> </HTML> 301 request � Codificação � String request.getCharacterEncoding() � Obtém a página de código � void request.setCharacterEncoding(String código) � Especifica a página de código � Obrigatoriamente, um valor válido de página de código Exemplo no próximo slide 302 request <% request.setCharacterEncoding("ISO-8859-1"); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Character Encoding</title> </head> <body> O tipo de codificação desta página é: <%= request.getCharacterEncoding() %> </body> </html> 303 request � Transferência � int request.getContentLength() � Obtém o tamanho da transferência � String request.getMethod() � Método da requisição (post/get) � String request.getContentType() � Obtém o tipo de dado transferido � String request.getQueryString() � Query String (!) � String request.getContextPath() � Endereço do contexto Exemplo no próximo slide 304 request (transferência) <html> <head> <title>Transferência</title> </head> <body> <h1>Transferência</h1> <b><%= request.getContentLength() %></b> bytes transferidos<br> O método da transferência é <b><%=request.getMethod() %></b><br> O tipo da transferência foi <b><%= request.getContentType() %></b><br> A querystring é <b><%= request.getQueryString() %></b><br> O contexto está em <b><%= request.getContextPath() %></b><br> <hr> <form action="<%= request.getRequestURL() %>?campo=valor" method="post"> <input type="text" name="campo" value="valor"> <input type="submit" value="Envia"> </form> </body> </html> 305 request � Parâmetros � String request.getParameter(String nome) � Obtém o valor do campo do formulário pelo nome � String[] request.getParameterValues(String nome) � Obtém os valores do campo do formulário pelo nome � Enumeration request.getParameterNames() � Obtém o nome dos campos do formulário � Map request.getParameterMap() Exemplo no próximo slide 306 request (parâmetros) <%@ page import="java.util.*" %> <html><head><title>Parâmetros</title></head> <body> <h1>Parâmetros</h1> Parametro "campo": <%= request.getParameter("texto") %><br> <% String nome="texto"; String nomes[] = request.getParameterValues("caixa"); Enumeration lista = request.getParameterNames(); %> <p> Valores do checkbox:<br> <% if (nomes != null) for (int i=0; i<nomes.length; i++) out.println(i + ": " + nomes[i] +"<br>"); else out.print("***Não há parâmetros \"checkbox\""); out.println("<p>Nome dos campos<br/>"); while (lista.hasMoreElements()) out.println((String)lista.nextElement() +"<br>"); %> � Continua 307 request (parâmetros) � Continuação <form action="<%=request.getRequestURL() %>" method="post"> <input type="text" name="texto" value="valor do texto"><br> <% for (int i = 0; i < 10; i++) { out.println("<input type='checkbox' name='caixa' value='checkbox" + i + "' checked>"); } %> <br> <input type="submit" name="envia"> </form> </body> </html> 308 request � Transporte � String request.getAuthType() � String request.getProtocol() � String request.getScheme() � String request.getServerName() � boolean request.isSecure() � String request.getRequestURI() � RequestDispatcher request.getRequestDispatcher(String path) � String request.getRequestURL() 309 request � Transporte � String request.getServerName() � Nome do servidor � int request.getServerPort() � Porta do servidor � String request.getRemoteAddr() � Endereço IP do cliente � String request.getRemoteHost() � Nome ou endereço IP do cliente � String request.getLocalAddr() � Endereço IP do servidor � String request.getLocalName() � Nome do servidor Exemplo no próximo slide 310 request <html> <head> <title>Informações do Cliente</title> </head> <body> Detalhes do computador cliente:<br> Endereço IP: <%=request.getRemoteAddr()%><br> Nome do computador: <%=request.getRemoteHost()%><br> Detalhes do computador servidor:<br> Endereço IP: <%=request.getLocalAddr()%><br> Nome do computador: <%=request.getLocalName()%><br> Nome do servidor: <%=request.getServerName() %><br> Porta do servidor: <%=request.getServerPort() %> </body> </html> 311 request � Local � String request.getLocale() � Local do browser � Enumeration request.getLocales() � Lista de locais do browser 312 request – Localidade <html> <head> <title>Localidade</title> </head> <body> Localidade: <%=request.getLocale() %><br> Todas as localidades: <% java.util.Enumeration lista = request.getLocales(); while (lista.hasMoreElements()) out.println(lista.nextElement()); %> </body> </html> 313 request � Cookies & Sessão � Cookie request.getCookies() � HttpSession request.getSession() � HttpSession request.getSession(boolean create) � boolean request.isRequestedSessionIdValid()
Compartilhar