Desenvolvimento Web com JSP/Servlets
Requisitos Linguagem Java; Linguagem SQL; Noções de HTML; Noções de CSS; Noções de Javascript;
Configuração do ambiente JDK APACHE TOMCAT MySQL
Instalando o JDK
Instalando o JDK
Configurando as variáveis de ambiente
Configurando as variáveis de ambiente
Configurando as variáveis de ambiente.;%java_home%\lib;%java_home%\lib\tools.jar;%java_home %\lib\dt.jar;%java_home%\lib\htmlconverter.jar;%java_home%\ jre\lib;%java_home%\jre\lib\rt.jar
Configurando as variáveis de ambiente ;%JAVA_HOME%\bin
TOMCAT
Eclipse
Configurando novo Servidor
MySQL
Como funciona a Web
Arquitetura da Internet MODELO OSI(Open Systems Interconnection) Modelo TCP/IP C4 c7 Aplicação HTTP,SMTP,POP3,IMAP,etc... REDE C3 c4 Transporte TCP,UDP,etc C2 c3 Internet IP C1 c2 Acesso a rede Ethernet,WiFi,etc...
URL (Uniform Resource Locator) Nome físico do servidor Recurso solicitado http://www.terra.com.br/index.html *DNS http://192.168.0.1:80 Endereço IP(Internet Protocol) Porta TCP *Domain Name System
Portas TCP (0 a 65.536) De 0 a 1023- Serviços já conhecidos 21- FTP (Transferência de arquivos); 23-Telnet (Protocolo cliente-servidor); 25-SMTP (Simple Mail Transfer Protocol); 37-Time; 443-HTTPS (HTTP + SSL/TLS); 80-HTTP; 23-POP3 (Post Office Protocol- Recebimento de mensagens);
Servidor Web Cliente Cliente Browsers Cliente
Recursos solicitados pelos clientes URLs
Recursos devolvidos para o Cliente
Servidor Web Enviam respostas para os browsers geralmente em HTML; A maioria das conversas entre servidores e clientes são mantidas através do protocolo HTTP (Protocolo de Transferência de Hipertexto); Solicitação http Conteúdo HTML Resposta http
Elementos do fluxo de SOLICITAÇÃO Solicitação http MÉTODO HTTP (a ação que será executada); A página (recurso) que será acessada (URL); Parâmetros de um formulário. Elementos do fluxo de RESPOSTA Resposta http Um código de status (solicitação bem sucedida); Tipo de conteúdo(texto, imagem, HTML,etc); O conteúdo real.
Solicitação HTTP Método HTTP Linha da solicitação Headers da solicitação GET /POST http://www.portalfotos.com.br/minhasfotos/213.jpg?user=123423 Host: www.wickedlysmart.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-us; rv:l.4) Gecko/20030624 Netscape/7.1 Accept: text/xml,application/xml,application/xhtml+xml,text/ html;q~0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/ gif;q=0.2,*/*;q~0.1 Accept-Language: en-us,en;q~0.5 Accept-Encoding: gzip,defiate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive
Método GET Servidor Me consiga a foto 213.jpg! Método GET 213.jpg
Método GET É possível enviar dados pelo método GET através da URL(separado por um? ); Ex: http://www.meusite.com/meuscript.php?nome=maria&id=123 O número de caracteres é limitado (255); Sem segurança para dados sigilosos;
Resposta HTTP Informações de header <html> <head> Página HTML <title>minha Aplicação</title> </head> <body> <h1>minhas Fotos</h1> <img src= fotos/foto1.jpg > </body> </html> Entra em modo de processamento de html Envia uma solicitação http
Informações de header Versão do protocolo Código de status HTTP/1.1 200 OK MIME type... Content-Type=text/html Content-Lenght: 397 Date: Wed, 19 Nov 2011 03:05:30 GMT Server: Apache-Coyote/1.1 Connection:close
Status Code 1xx: Informacional Requisição recebida, processo continua; 2xx: Sucesso A ação foi recebida, compreendida e aceita com sucesso; 3xx: Redirecionamento (Transitório) Deve haver ação consecutiva para que a requisição seja completada; 4xx: Erro Cliente A requisição enviada pelo cliente contém sintaxe errada ou não pode ser atendida; 5xx: Erro Servidor O servidor falhou em atender requisição aparentemente válida. Erros e exceções em programas CGI e servidores de aplicação para Web (Java,.NET, PHP etc.) são casos típicos de erros da série 500.
Códigos de retorno http
Método POST Formulário <form action="/cgi-bin/cadastro.php" method=post> <pre> Nome: <input name="nomeusuario" size=40> e-mail: <input name="mailusuario" size=40> Texto: <textarea rows=5 cols=34 name="texto"></textarea> <input type=submit value="enviar Formulário"> </pre> </form> Dados Dados cadastro.php
MIME type Informa que tipo de resposta o browser do Cliente está para receber HTTP/1.1 200 OK MIME type... Content-Type=text/html Content-Lenght: 397 Date: Wed, 19 Nov 2011 03:05:30 GMT Server: Apache-Coyote/1.1 Connection:close
MIME type
PÁGINAS DINÂMICAS
Página HTML estática Servidor! Guarde esses dados em um banco de dados!! Como???
Aplicação helper PHP SERVLETS ASP etc Banco Resposta como página estática Dados Cadastrados com sucesso!!
SERVLETS/JSP
J2EE Containers e Aplicações Web
O que o container oferece?? Suporte para comunicações: ServerSocket; Monitoramento de portas; Gerenciamento do protocolo
O que o container oferece?? Controle do Ciclo de Vida do Servlet Web Container Ciclo de vida do Servlet Carga Criação Inicialização Destruição
O que o container oferece?? Suporte a Multithread: Para cada request, cria uma nova thread; Provê segurança; Traduz código JSP em Java;
APACHE TOMCAT
Como trabalha o Container Container
Como trabalha o Container http://www.minhaaplicacao/ Container
Como trabalha o Container http://www.minhaaplicacao/ Container
Como trabalha o Container http://www.minhaaplicacao/ Container Servlet??
Como trabalha o Container Request do cliente http://www.minhaaplicacao/ Container HttpServletResponse HttpServletRequest Servlet???
Como trabalha o Container Request do cliente http://www.minhaaplicacao/ Container HttpServletResponse HttpServletRequest ServletA
Como trabalha o Container Request do cliente http://www.minhaaplicacao/servlet_a Container HttpServletResponse HttpServletRequest ServletA Thread ServletA
Como trabalha o Container Request do cliente http://www.minhaaplicacao/servlet_a Container HttpServletResponse HttpServletRequest ServletA Thread ServletA
Como trabalha o Container Request do cliente http://www.minhaaplicacao/servlet_a Container HttpServletResponse HttpServletRequest Método DoGet do Servlet Gera uma página dinâmica ServletA Thread ServletA
Como trabalha o Container Request do cliente http://www.minhaaplicacao/ Container HttpServletResponse HttpServletRequest Método DoGet do Servlet Gera uma página dinâmica ServletA Thread ServletA
Como trabalha o Container Request do cliente http://www.minhaaplicacao/ HttpResponse Container HttpServletResponse HttpServletRequest Método DoGet do Servlet Gera uma página dinâmica ServletA Thread ServletA
Como trabalha o Container HttpResponse Container HttpServletResponse HttpServletRequest Método DoGet do Servlet Gera uma página dinâmica ServletA
Servlets Classes java Respondem requisições HTTP,FTP,etc; Não possuem método Main. Estão sob controle do Container.
Exemplo de Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class CadastroServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException{ PrintWriter out =response.getwriter(); java.util.date datahoje = new java.util.date(); out.println( <html> + <body> + <h1>hora Atual</h1> + <br> + datahoje + </body> + </html> ); } }
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; Importação das classes necessárias
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; A maioria herda de HttpServlets) import java.util.*; public class Servlet_A extends HttpServlet { }
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class Servlet_A extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException{ O Servlet não possui o método Main Os métodos do Ciclo de Vida do Servlet são chamados pelo Container } }
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class Servlet_A extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException{ } } A maioria dos Servlets invocam ou o Método doget ou o Método dopost;
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class CadastroServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) Referências dos objetos request e response que o Container cria } }
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class CadastroServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException{ PrintWriter out =response.getwriter(); } Cria } um objeto do tipo PrintWriter baseado no PrintWriter do Objeto response (do Container)
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class CadastroServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws IOException{ PrintWriter out =response.getwriter(); java.util.date datahoje = new java.util.date(); out.println( <html> + <body> + <h1>hora Atual</h1> + <br> + datahoje + </body> + </html> ); } }
Como o Container encontra o Servlet certo?? Request do cliente http://www.minhaaplicacao/inicioboasvindas Container Servlet??? Servlet??? Servlet???
Mapeamento de Servlets O servlet pode ter 3 nomes: Nome do caminho para o arquivo físico(nome interno real da classe): classes/horaatual.class Nome de distribuição do Servlet; Nome público de URL (conhecido pelo cliente): MinhaHoraAtual
Estrutura de diretórios para o Servlet webapps MeuProjeto src classes etc HoraAtual.java web.xml
Porque usar um nome público para mapear o servlet? Manutenção: Flexibilidade na hora de reorganizar a sua aplicação; Segurança: impede que o cliente conheça a sua estrutura de servidor;
Deployment Descritor (DD) O DD é um arquivo chamado web.xml que tem os seguintes propósitos: Prover valores iniciais para parâmetros de Web Applications Exemplo: servidor de Banco de Dados, etc. Usado para inicializar qualquer valor que poderá mudar entre duas instalações Exemplo: não é um bom lugar para colocar a taxa de câmbio do dólar Permite configurar as aplicações sem alterar código e recompilar os servlets Definir servlets e JSPs Cada servlet e JSP usado pela aplicação deve ser descrito para permitir que seu deployment seja feito Especificar mapeamentos de servlets e JSPs Define como URLs que chegam do cliente serão mapeadas para servlets e JSPs Especificar MIME types usados por cada aplicação Especificar dados de segurança Pode especificar quais páginas precisam de um login, qual é a página de login, que papel o usuário deve ter para acessar a página, etc. Customizar páginas de boas vindas, páginas de erro, configuração de sessão, etc, sem tocar no código fonte.
web.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> <web-app>... <servlet> <servlet-name>servlethora</servlet-name> <servlet-class>aplic.horaatual</servlet-class> </servlet> <servlet-mapping> <servlet-name>servlethora</servlet-name> <url-pattern>/inicioboasvindas</url-pattern> </servlet-mapping>... <session-config> <session-timeout>30</session-timeout> </session-config> </web-app>
Como o Container encontra o Servlet certo?? Request do cliente http://www.minhaaplicacao/inicioboasvindas Container web.xml ServletHora
JSP (Java Server Pages) A geração de informação dinâmica pode ser feita de duas formas: Programaticamente (servlets) Através de templates (Java Server Pages ou JSP) JSP é uma extensão da tecnologia de servlets Uma página JSP contém código HTML (ou XML) Tags especiais ou "scriplets" especiais são embutidos no HTML para execução para produzir o conteúdo final Um exemplo de página JSP está aqui A página JSP é traduzida para um servlet automaticamente pelo servidor J2EE O servlet é compilado (apenas uma vez) A partir daí, o servlet é executado para gerar o conteúdo dinâmico Depois que a página JSP foi transformada em servlet, a situação é idêntica à execução de um servlet
JSP
Objetos Instanciados JSP
Declarações Utilizadas em JSP
Diretivas
Objeto Request
Exercícios em sala