SlideShare a Scribd company logo
1 of 76
Download to read offline
JSP e Servlets
Versão 1.0.0
Sumário
I Sobre essa Apostila 3
II Informações Básicas 5
III GNU Free Documentation License 10
IV JSP e Servlets 19
1 O que é JSP e o que são Servlets 20
2 Plano de ensino 21
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3 Iniciando em JSP e Servlets 24
3.1 Definições: JSP e Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Comparação de Java Server Pages com Servlets . . . . . . . . . . . . . . . . . . . . 25
3.3 Aplicações Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4 Instalações e Configurações 29
4.1 Instalações Necessárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Estrutura de Diretórios do Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Fundamentos da Orientação a Objeto 33
5.1 Classes, Objetos e Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2 Conceitos Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.5 Pacotes (Packages): . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.6 Uma Página em JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.7 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.8 Repetição(loop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6 TAGS JSP 40
6.1 TAGS - Expressões, Scriptlets e Declarações . . . . . . . . . . . . . . . . . . . . . . 40
6.2 TAGS - Diretivas e Comentários - e Ações . . . . . . . . . . . . . . . . . . . . . . . . 42
7 JSTL e Javabeans 46
7.1 Noções JavaBeans e EJB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2 JSTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8 Servlets: Criação e Ciclo 50
8.1 O que são Servlets? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.2 Criar o primeiro Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.3 Um Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.4 O Ciclo de Vida de um Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.5 Métodos de Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.6 Implementação e Publicação de servlets . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.7 HTML e Java - Servlets e JSPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.8 Mapear uma servlet para uma URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.9 Retornando ao cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.10 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
9 Servlets: API, Request e Response 63
9.1 Requisição e Resposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.2 Servlet - O “CGI de Java” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.3 CGI X Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
9.4 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
9.5 Interfaces do doGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
10 Usando Cookies e Controlando Sessões 69
10.1 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10.2 Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
11 Controle de Erros 72
11.1 Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
11.2 MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
2
Parte I
Sobre essa Apostila
3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.)
O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).
A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora.
Autores
A autoria deste é de responsabilidade de Júlio Cesar Júnior (julio@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que
vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e
utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades
no país.
Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da
home page da entidade, através da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
4
Parte II
Informações Básicas
5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-
ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.
Objetivo Específico
Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e
de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.
Guia do aluno
Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:
• Licenças para cópia de material disponível;
• Os 10 mandamentos do aluno de Educação a Distância;
• Como participar dos foruns e da wikipédia;
• Primeiros passos.
É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.
Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).
6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".
Os 10 mandamentos do aluno de educação online
• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é
pré-requisito para a participação nos cursos a distância;
• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-
tica é necessário para poder executar as tarefas;
• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-
cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores;
• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus
colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos;
• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais;
• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real;
• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre;
• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens
e descobertas;
• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é
ponto - chave na comunicação pela Internet;
• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.
Como participar dos fóruns e Wikipédia
Você tem um problema e precisa de ajuda?
Podemos te ajudar de 2 formas:
A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:
. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a
7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.
. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.
A segunda forma se dá pelas Wikis:
. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:
• Página principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:
• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;
• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;
• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;
• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.
Perfil do Tutor
Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:
• fornece explicações claras acerca do que ele espera e do estilo de classificação que irá
utilizar;
• gosta que lhe façam perguntas adicionais;
• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;
• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)
• dá uma ajuda complementar para encorajar um estudante em dificuldade;
• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;
• ajuda o estudante a alcançar os seus objetivos;
• é flexível quando necessário;
• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
• escreve todas as correções de forma legível e com um nível de pormenorização adequado;
• acima de tudo, devolve os trabalhos rapidamente;
9
Parte III
GNU Free Documentation License
10
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
(Traduzido pelo João S. O. Bueno através do CIPSGA em 2001)
Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi-
leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição
de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto,
nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.
This is an unofficial translation of the GNU General Documentation License into Brazilian Por-
tuguese. It was not published by the Free Software Foundation, and does not legally state the
distribution terms for software that uses the GFDL–only the original English text of the GFDL does
that. However, we hope that this translation will help Portuguese speakers understand the GFDL
better.
Licença de Documentação Livre GNU Versão 1.1, Março de 2000
Copyright (C) 2000 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas
não é permitido alterá-lo.
INTRODUÇÃO
O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no
sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo,
com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém
para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável
pelas modificações feitas por terceiros.
Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do
documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge-
ral (GNU GPL), que é um copyleft para software livre.
Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software
livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que
provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a
manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente
do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin-
cipalmente para trabalhos cujo propósito seja de introdução ou referência.
APLICABILIDADE E DEFINIÇÕES
Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo
detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença.
O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um
11
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
licenciado e é referida como "você".
Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento
ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra
língua.
Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex-
clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do
Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente
nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a
Seção Secundária pode não explicar nada de matemática).
Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci-
onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo.
As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como
sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença.
Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa
Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença.
Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica-
mente, representada num formato cuja especificação esteja disponível ao público geral, cujos
conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores
de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou
(para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de
servir como entrada a formatadores de texto ou para tradução automática para uma variedade
de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato
de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de-
sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é
"Transparente"é chamada de "Opaca".
Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim-
ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML
usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e
projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos
proprietários que podem ser lidos e editados apenas com processadores de texto proprietários,
SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam
disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com
finalidade apenas de saída.
A "Página do Título"significa, para um livro impresso, a página do título propriamente dita,
mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível,
o material que esta Licença requer que apareça na página do título. Para trabalhos que não
tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe-
minente do título do trabalho, precedendo o início do corpo do texto.
12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
FAZENDO CÓPIAS EXATAS
Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não
comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta
Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres-
cente nenhuma outra condição, quaisquer que sejam, às desta Licença.
Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de
cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com-
pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias,
você também precisa respeitar as condições da seção 3.
Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também
pode exibir cópias publicamente.
FAZENDO CÓPIAS EM QUANTIDADE
Se você publicar cópias do Documento em número maior que 100, e a nota de licença do
Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara
e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e
Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e
legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com-
pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar
outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas
preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia
exata em outros aspectos.
Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma
legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa
verdadeira, e continuar os outros nas páginas adjacentes.
Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você
precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia
Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente
completa do Documento acessível publicamente em uma rede de computadores, à qual o público
usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de
protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel-
mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar
que esta cópia Transparente vai permanecer acessível desta forma na localização especificada
por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta-
mente ou através de seus agentes ou distribuidores) daquela edição para o público.
É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de
redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você
com uma versão atualizada do Documento.
13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
MODIFICAÇÕES
Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se-
ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença,
com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição
e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além
disso, você precisa fazer o seguinte na versão modificada:
A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do-
cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados
na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se
o editor original daquela versão lhe der permissão;
B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá-
veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco
dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que
cinco);
C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor;
D. Preservar todas as notas de copyright do Documento;
E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às
outras notas de copyright;
F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público
o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico
abaixo;
G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de
Capa requeridos dados na nota de licença do Documento;
H. Incluir uma cópia inalterada desta Licença;
I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo
pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de
Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o
título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar
um item descrevendo a Versão Modificada, tal como descrito na sentença anterior;
J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma
cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu-
mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção
"Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado
pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira
der sua permissão;
K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da
14
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri-
buidores e/ou dedicatórias dados;
L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em
seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção;
M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão
Modificada;
N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro
título dado a uma Seção Invariante.
Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como
Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar
por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus
títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci-
sam ser diferentes de qualquer outro título de seção.
Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual-
quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por
exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a
definição oficial de um padrão.
Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente
, e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos
de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de
Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade.
Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por
você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode
adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que
adicionou a passagem antiga.
O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus
nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer
Versão Modificada.
COMBINANDO DOCUMENTOS
Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob
os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com-
binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste
todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença.
O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes
Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver
múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de
15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor
origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste
nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.
Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver-
sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine
quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as
seções entituladas como "Endosso".
COLETÂNEAS DE DOCUMENTOS
Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados
sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com
uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia
exata de cada um dos Documentos em todos os outros aspectos.
Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob
esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta
Licença em todos os outros aspectos relacionados à cópia exata daquele documento.
AGREGAÇÃO COM TRABALHOS INDEPENDENTES
Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se-
parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver-
são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela
compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros
trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim
compilados, e eles não são trabalhos derivados do Documento.
Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento,
então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa
do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado.
Senão eles precisarão aparecer nas capas de todo o agregado.
TRADUÇÃO
Tradução é considerada como um tipo de modificação, então você pode distribuir traduções
do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções
requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir
traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas
Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in-
clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a
16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
versão original em Inglês desta Licença, a versão original em Inglês prevalecerá.
TÉRMINO
Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres-
samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen-
ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos
sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta
Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total
acordo com esta Licença.
REVISÕES FUTURAS DESTA LICENÇA
A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen-
tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão
presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja
http://www.gnu.org/copyleft/.
A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar
que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você
tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão
posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o
Documento não especificar um número de Versão desta Licença, você pode escolher qualquer
versão já publicada (não como rascunho) pela Free Software Foundation.
ADENDO: Como usar esta Licença para seus documentos
Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença
no documento e ponha as seguintes notas de copyright e licenças logo após a página de título:
Copyright (c) ANO SEU NOME.
É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença
de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft-
ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da
Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li-
cença está inclusa na seção entitulada "Licença de Documentação Livre GNU".
Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de
dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de
Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os
Textos da Quarta Capa.
Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda-
mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre,
17
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
tal como a GNU General Public License, para permitir o seu uso em software livre.
18
Parte IV
JSP e Servlets
19
Capítulo 1
O que é JSP e o que são Servlets
JSP (Java Server Pages) e Servlets são tecnologias desenvolvidas pela Sun Microsystems
orientadas para criar páginas web com programação em Java que sejam executadas do lado do
servidor. JSP é semelhante ao Microsoft Active Server Pages (ASP), porém, por ser baseada
na linguagem Java, tem a vantagem da portabilidade de plataforma, podendo ser executado
em outros Sistemas Operacionais. Já servlets são, basicamente, classes java instanciadas e
executadas junto ao servidor web, atendendo requisições HTTP, como a dos browsers.
Em linhas gerais, JSP permite ao desenvolvedor de sites produzir aplicações que permitam
o acesso a banco de dados, o acesso a arquivos-texto, a captação de informações a partir de
formulários, a captação de informações sobre o visitante e sobre o servidor, o uso de variáveis
e loops entre outros. De um modo geral, permite produzir conteúdos dinâmicos que possam ser
reutilizados.
O curso tem base na distribuição Debian.
20
Capítulo 2
Plano de ensino
2.1 Objetivo
Capacitar o usuário para o uso autônomo dos recursos do JSP e dos Servlets.
2.2 Público Alvo
Em especial usuários do sistema operacional Linux que queiram fazer uso de JSP e dos
Servlets.
2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca da lógica de programação. Além disso, são necessários conhecimentos em
Java e HTML. Recomendamos o curso: “Java Básico” do CDTC.
2.4 Descrição
O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle
como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto
por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser
executadas de acordo com as instruções fornecidas. O material didático estará disponível on-line
de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do JDK para uso
do JSP é a JDK 5. Caso possua outra versão instalada, poderão ocorrer poucas diferenças.
Todo o material está no formato de lições, e estará disponível ao longo do curso. As lições
poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien-
tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado
anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de
cada semana e os exemplos disponibilizados para se preparar para prova.
21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deve ser
disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e
esclarecimentos.
2.5 Metodologia
O curso está dividido da seguinte maneira:
2.6 Cronograma
• Lição 1 - Iniciando em JSP e Servlets;
• Lição 2 - Instalações e Configurações;
• Lição 3 - Noções de POO e Comandos Java;
• Lição 4 - TAGS JSP;
• Lição 5 - JSTL e Javabeans;
• Lição 6 - Servlets: Criação e Ciclo;
• Lição 7 - Servlets: API, Request e Response;
• Lição 8 - Usando Cookies e Controlando Sessões;
• Lição 9 - Controle de Erros e MVC;
• Avaliação de Aprendizagem.
As lições contém o conteúdo principal. Elas poderão ser acessadas quantas vezes forem ne-
cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li-
ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja
menor do que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação final serão consideradas para a nota final. Todos os módulos ficarão visí-
veis para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos.
2.7 Programa
O curso de JSP e Servlets oferecerá o seguinte conteúdo:
• Introdução;
• Instalação;
22
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• Noções de Java;
• Conteúdo JSP;
• Conteúdo Servlets;
• Cookies e Controle de Sessões;
• JSTL, Erros e MVC.
2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:
• iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;
• capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.
Instrumentos de avaliação:
• participação ativa nas atividades programadas.
• avaliação ao final do curso.
• o participante fará várias avaliações referentes ao conteúdo do curso. Para a aprovação e
obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:
• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições.
• AF = Avaliações.
2.9 Bibliografia
Site official:
http://java.sun.com/products/jsp/
Outros:
http://www.criarweb.com/artigos/227.php
http://www.crieseuwebsite.com/apostilas/detalhes.php?categoria=JSP&arquivo=93
http://www.caelum.com.br
http://www.mundooo.com.br/
http://www.javafree.org/javabb/viewtopic.jbb?t=9127
http://arquivos.coinfo.cefetpb.edu.br/~fred/pweb/servlets/slides/04-Servlets.pdf
http://www.dpi.ufv.br/~alcione/proginter2001/ApostilaServletJSP.pdf
http://www.mhavila.com.br/topicos/java/tomcat_unix.html
23
Capítulo 3
Iniciando em JSP e Servlets
3.1 Definições: JSP e Servlets
JSP (Java Server Pages) é uma tecnologia utilizada na criação de aplicações para a web. É
uma linguagem relativamente nova, já que surgiu por volta do ano 2000 como uma estratégia
da Sun MicroSystems para combater linguagens emergentes como o ASP(Active Server Pages),
linguagem de autoria da Microsoft, e o PHP (Hypertext PreProcessor). Por ser baseada na lin-
guagem Java, tem a vantagem da portabilidade de plataforma, o que permite sua execução em
variados sistemas operacionais. Podemos escrever JSP com um editor de texto HTML/XML co-
mum, já que as páginas JSP estão compostas de cógido HTML/XML mesclado com etiquetas
para programar scripts de servidor em sintaxe Java. O motor das páginas JSP está baseado nos
servlets de Java.
Os arquivos JSP têm extensão ’.jsp’ , os quais, dentro das tags HTML, contém o código em
java a executar no servidor. Antes que os arquivos sejam funcionais, o motor JSP realiza uma
fase de tradução dessa página em um servlet, implementado em um arquivo class (Byte codes
de Java).
24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Servlets são componentes que disponibilizam ao programador java uma interface para o ser-
vidor web, através de uma API. Servlets ampliam a funcionalidade de servidores baseados em
requisições/respostas. Uma página criada com a tecnologia JSP, após instalada em um servidor
de aplicação compatível com a tecnologia Java EE, é transformada em um Servlet. Para ser
executado um servlet necessita de um container Web, isto é, um servidor onde são instaladas
servlets para tratar as requisições que o servidor receber. Existem vários containers web, mas
um dos mais usados é o Tomcat, por vários motivos entre eles por não ser pago e por ser o
container de servlets usado na referência oficial de implementação de JSP.
Para tirar um bom proveito de JSP e de Servlets são necessários conhecimentos em HTML e
java, já que são as duas bases sobre as quais JSP é moldado. Parte lógica do JSP envolve Java
Beans, Objetos JDBC, Enterprise Java Beans ( EJB ) entre outros componentes que interagem
com a plataforma Java. Portanto, alertamos aqueles que pretendem desenvolver uma aplicação
mais sofisticada que tenham, além de conhecimentos de HTML, que entendam de programação
em Java. Para os que ainda não estão familiarizados com o java, recomendamos o curso de
“Java Básico” do CDTC.
3.2 Comparação de Java Server Pages com Servlets
JSP e Servlets são bem parecidos, já que todo JSP é compilado em forma de Servlet. Os dois
são processados do lado do servidor e retornam apenas conteúdo HTML ao cliente. JSPs geram
essencialmente conteúdo HTML enquanto os servlets são usados para controle da aplicação,
mas o programador pode opcionalmente inverter esses papéis.
A principal diferença entre eles é que em JSP escreve-se Java no HTML e em servlets
escreve-se HMTL dentro do código java. Sabemos que servlets são classes java que forne-
cem serviço especial de ’server-side’. Basicamente, o que acontece é que é mais difícil escrever
código HTML em Servlets já que neles são necessárias várias linhas de código de impressão
(println) para gerar HTML, o que não acontece em JSPs.
25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
3.3 Aplicações Web
Estrutura Usual de APLICAÇÕES WEB Desenvolvidas Usando o Java
Aplicações web são aplicações que executam no servidor e que consistem de compontentes
como JSP, Servlets, HTML, etc. Uma das principais características de uma aplicação web é seu
relacionamento com o ServletContext. Um ServletContext serve basicamente para armazenar
informação relativa à aplicação como um todo. Em particular, o ServletContext é usado para:
• conter parâmetros de inicialização da aplicação;
• armazenar recursos associados à aplicação. Uma conexão de Banco de Dados um exem-
plo;
• armazenar qualquer atributo da aplicação como objeto;
• fornecer acesso à funcionalidade de logging.
Cada aplicação tem somente um único ServletContext. Este relacionamento é controlado pelo
container de servlet. Na grande maioria dos casos, o desenvolvimento dessas aplicações web
que usam o java como padrão procura seguir os passos seguintes:
1 - desenvolvimento e teste dos diversos Servlets, JSPs, necessários ao projeto da aplicação
web;
2 - escrita do ’descritor de aplicação’ (Web Application Deployment Descriptor). Geralmente é
um arquivo .xml e é usado pelo container ou servidor para a instalação da aplicação. Descreve-se
nele as variáveis de ambiente a serem usadas, os componentes e os requisitos de segurança.
Tem seu nome usual como ’web.xml’ e é localizado no diretório WEB-INF. Nesse arquivo, pode-
mos encontrar informações referentes a:
• Parâmetros de Inicialização do ServletContext;
• Configuração de Session;
• Definições de Servlet/JSP;
• Mappings de Servlet/JSP;
• Páginas de Erros;
• Segurança.
Exemplo de ’web.xml’:
<web-app>
<display-name>NomeAplicacao</display-name>
<session-timeout>30</session-timeout>
<servlet>
<servlet-name>Servlet1</servlet-name>
<servlet-class>com.nome.ServletNome1</servlet-class>
<load-on-startup>1</load-on-startup>
26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
<init-param>
<param-name>name</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
</web-app>
OBS: A criação de um web.xml será explicada detalhadamente adiante.
3 - compilação de todos os componentes web e das classes referenciadas por eles. Existem
algumas ferramentas para esse propósito, como o ’Ant’. O Apache Ant é uma ferramenta escrita
em java (está disponível em http://ant.apache.org/) que permite criar scripts para a realização
automática de tarefas como a compilação de programas java. Os scripts são definidos em XML;
4 - empacotamento da aplicação web. As aplicações web primeiramente são empacotadas
em um arquivo com a extensão ’.war’ (Web application Archive) e são então instaladas em um
container ou servidor. Embora esse processo seja opcional para a posterior instalação no contai-
ner , ele é recomendado, pois facilita o processo da instalação. Novamente o uso da ferramenta
Ant é muito útil para esta fase do desenvolvimento. A ferramenta JAR do JDK também pode criar
o WAR file com o seguinte comando:
jar cvf nome.war
Usando o Elipse, por exemplo, basta usar SeuProjeto / Exportar / WAR file.
OBS: JAR ou Java ARchive é um arquivo compactado usado para distribuir um conjunto de
classes Java. É usado para armazenar classes compiladas e metadados associados que podem
constituir um programa.Arquivos jar podem ser criados e extraídos usando o utilitário "jar"da JDK;
5 - instalação no container ou servidor. Já empacotada em ’.war’, somente é necessário copiar
o arquivo para o diretório ’webapps’ do Tomcat ou o diretório ’autodeploy’ do domínio desejado
no Servidor de Aplicações da Sun Microsystems. O servidor, então, fará a instalação automática;
6 - abrir o browser e apontar para a URL da aplicação, que normalmente é algo como:
http://localhost:8080/dir_da_aplicação.
A estrutura de diretórios de uma aplicação web é normalmente assim:
27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
DirRaiz/ diretório raíz da aplicação web
DirRaiz/index.html documento HTML
DirRaiz/index.jsp documento JSP
DirRaiz/imagens diretório onde se localizam as imagens da página
DirRaiz/META-INF/ diretório opcional, usado para se definir extensões
e outras informações relacionadas aos dados do pacote.
DirRaiz/WEB-INF/ diretório que contém os recursos relacionados
à aplicação como o web aplication deployment.
DirRaiz/WEB-INF/classes diretório que contém Servlets, JavaBens e demais
classes Java,todos compilados.
DirRaiz/WEB-INF/lib diretório que contém JAR files que a aplicação web tem
dependência, como um JAR de drive JDBC.
DirRaiz/WEB-INF/web.xml descritor de instalação ’web.xml’.
28
Capítulo 4
Instalações e Configurações
4.1 Instalações Necessárias
A primeira coisa a se fazer é instalar um servidor (container) JSP. Existem vários contai-
ners, dentre os quais podemos citar: JBoss, Weblogic e WebSphere. Neste curso escolhemos
e ensinaremos a configurar o Tomcat, do projeto Jakarta (http://tomcat.apache.org). Como ele
é inteiramente escrito em Java, necessita de uma Java Virtual Machine (JVM) - Máquina Virtual
Java - para ser executado. Ele é oficialmente endossado pela Sun como a Implementação de
Referência (RI) para as tecnologias Java Servlet e JavaServer Pages (JSP).
O Tomcat é um servidor de aplicações Java para web. É distribuído como software livre e
desenvolvido como código aberto dentro do conceituado projeto Apache Jakarta. O Tomcat é
robusto e eficiente o suficiente para ser utilizado mesmo em um ambiente de produção.
Para a instalação do Tomcat em ambiente de desenvolvimento - onde serão desenvolvidas
classes Java em geral, incluindo Servlets e páginas JSP -, deve-se utilizar o JDK (Java Develop-
ment Kit) completo. Se você não tiver ainda o JDK instalado, faça o download através do site da
Empresa Sun. (http://java.sun.com).
4.2 Estrutura de Diretórios do Tomcat
É importante que saibamos como é a estrutura de diretórios do Tomcat pois isto ajuda a ter
maior controle sobre as aplicações, além de nos fazer entender melhor containers semelhantes
a ele. A estrutura básica é a seguinte:
29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
/bin Diretório que contém os binários executáveis. No caso do Linux
é util pois contém os arquivos ’.sh’ para a execução do servidor.
/common Diretório que contém classes disponíveis tanto para funcionamento
do servidor quanto às aplicações web instaladas. Geralmente contém os
diretórios /classe e /lib nos quais se localizam classes disponíveis não
só para o Tomcat quanto para as aplicações rodando no servidor. Classes
compiladas devem ser colocadas no ’/classes’ e arquivos JAR devem ser
colocados no ’/lib’.
/conf Diretório que contém os arquivos de configuração. Os mais importantes são
’server.xml’ - arquivo de configuração principal do Tomcat, que é usado para
configurar logs, conexões com outros servidores, a porta e host na qual o
servidor está sendo executado e o local dos arquivos de cada aplicação
web - ’tomcat-users.xml’ - base de dados padrão para a autenticação de
usuários. - e o ’web.xml’ que já foi citado.
/logs Diretório que contém os arquivos de logs.
/server Diretório que contém novamente subdiretórios : classes, lib e webapps.
Porém, os desta pasta não são acessíveis a outras aplicações. Webapps
é o local das aplicações de gerenciamento do Tomcat: admin e manager.
/shared Diretório que contém novamente os dois subdiretórios: classes e lib com a
diferença que classes nestes subdiretórios estarão disponíveis a todas as
aplicações web, exceto ao Tomcat.
/webapps Diretório para a instalação de aplicações web no Tomcat. Sua estrutura já
foi explicada na Lição anterior.
/work Diretório onde o Tomcat armazena o código da página JSP depois que este é
convertido em um Servlet.
Instalação
A instalação do Tomcat é muito simples e consiste, essencialmente, em descompactar o pa-
cote de arquivos no local desejado. Os comandos de instalação procuram utilizar máscaras de
substituição ? e * nos nomes de arquivo para se manterem genéricos em relação à versão espe-
cífica do Tomcat, já que os procedimentos são idênticos para toda versão.
Os procedimentos de instalação no curso pressupõem como convenção o caminho /opt/ como
diretório base para a instalação. Os demais exemplos citados neste tutorial se referem a este ca-
minho. Em algumas plataformas, pode-se preferir usar /usr/local/ ou mesmo outro local persona-
lizado, como por exemplo /web. Como não há padrão rígido para esta organização, se você optar
por outra localização, basta lembrar de alterar as referências ao caminho de instalação conforme
30
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
necessário.
No nosso caso, os seguintes procedimentos foram tomados:
1 - criação de um diretório novo chamado ’install’ em /usr/local/
$ cd /opt
$ mkdir install
2 - mover o arquivo de instalação ( no caso o ’apache-tomcat.?.?.*.tar.gz’
ou ’apache-tomcat.?.?.*.zip’ para a pasta /opt/install.
$ mv apache-tomcat.?.?.*.tar.gz /opt/install
3 - o comando script cria um arquivo de registro tomcat-install.log com toda a saída apresen-
tada na tela durante a instalação (até que seja finalizado com o comando exit):
$ script /opt/install/tomcat-install.log
OBS.: Se precisar conferir depois em detalhes o que aconteceu durante a instalação,
em busca de algum problema consulte o arquivo install/tomcat-install.log gerado.
4 - o GNU tar tem a opção z que já descompacta o formato gzip. As outras opções xvf são
respectivamente para extrair, exibir mais informações e especificar o nome do arquivo:
$ tar -xzvf /opt/install/apache-tomcat-?.?.*.tar.gz
* Se for usado o pacote ZIP, o comando passa a ser:
$ unzip /opt/install/apache-tomcat-?.?.*.zip
5 - recomendável também criar um link simbólico sem a versão, para facilitar a referência em
scripts administrativos independentes da versão atual:
$ ln -s apache-tomcat-?.?.?? tomcat
6 - apenas se tiver sido usado o pacote ZIP, é necessário este passo adicional: verificar e
atribuir permissão de execução aos scripts do Tomcat:
$ cd tomcat/bin
$ ls -l *.sh
$ chmod +x *.sh
$ cd ../..
7 - como root, defina as variáveis de ambiente JAVA_HOME e CATALINA_HOME, para apon-
tar o diretório principal da instalação do Java SDK e do Tomcat, respectivamente:
- entre no arquivo .bashrc com algum editor de texto:
31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
$ vim /home/[nome_de_usuario]/.bashrc
8 - adicione as linhas abaixo no fim do arquivo ’.bashrc’ . Onde citamos ?jdk1.5.0?, trata-se
da versão do Java já instalado na máquina. Novamente adapte o guia à sua versão do JDK:
# java home and path
JAVA_HOME=/[caminho_do_diretorio_do_java]/jdk1.5.0; export JAVA_HOME
export PATH=$PATH:/[caminho_do_diretorio_do_java/jdk1.5.0/bin/
# catalina home
CATALINA_HOME=/opt/install/[diretório_do_tomcat]; export JAVA_HOME
- Salve suas alterações e saia do diretório root com o comando:
$ exit
11 - execute o script desejado para iniciar e parar o tomcat:
Iniciar:
$ /[diretório_do_tomcat]/bin/startup.sh
ou
$ /[diretório_do_tomcat]/bin/catalina.sh start
Parar:
$ /[diretório_do_tomcat]/bin/shutdown.sh
ou
$ /[diretório_do_tomcat]/bin/catalina.sh stop
12 - para testar se o Tomcat está rodando corretamente após iniciado(startup.sh), abra o
browser e vá para o endereço:
http://localhost:8080/
32
Capítulo 5
Fundamentos da Orientação a Objeto
Apesar de recomendar o prévio conhecimento de java para o curso de JSP e Servlets, é ne-
cessário relembrarmos os conceitos fundamentais da programação java e suas derivadas, con-
seqüentemente o JSP, que são conceitos da orientação a objeto (comumente conhecida como
Programação Orientada a Objeto ou POO). São, apesar de fundamentais, conceitos amplos que
requerem prática para que possam ser plenamente compreendidos.
5.1 Classes, Objetos e Métodos
Classe é um aglomerado de métodos - funções e procedimentos com os quais acessamos e
usamos os objetos, realizando tarefas específicas -, e de variáveis, que definem o comportamento
de um objeto que poderá vir a existir se a classe for solicitada para tal.
Um objeto é uma entidade do mundo real que possui uma identidade. Podem ser entidades
concretas ou conceituais. Podemos citar como exemplos de objetos: uma conta corrente, clientes,
agências, arquivos no computador, bicicletas, lojas etc. Em termos de programação, pode-se
definir objeto como o resultado da ação construtora de uma classe.
Todo objeto é “fabricado” em uma classe, sendo por isso denominado instância da classe.
Além disso, tem outras características: a estrutura de objetos de uma certa classe é descrita
por meio de atributos; objetos de uma mesma classe têm um mesmo comportamento que são
representados pelo conjunto de operações que podem ser executadas sobre eles. O método de
construção de objetos com a mesma "genética"da classe é chamado de método construtor.
5.2 Conceitos Importantes
Alguns outros conceitos importantes:
Encapsulamento: imprescindível ao entendimento de POO e ao aprendizado java, já que é
indispensável para contribuir com a diminuição dos malefícios causados pela interferência externa
sobre os dados. É uma técnica que consiste em ocultar no objeto algumas de suas variáveis (ou
33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
campos) e alguns de seus métodos. É importantíssimo na medida em que deixa o programa
robusto, impedindo o acesso a certas partes de seu funcionamento.
Herança: outro conceito importante na POO é o conceito de herança, que significa que toda
classe definida como uma subclasse de outra receberá automaticamente todo o conteúdo da
classe-mãe. Tomamos como exemplo uma classe ’Pessoa’, onde possui como propriedades:
nome, endereço, telefone, cpf e etc. Incluímos a classe ’Pessoa’ em uma classe ’Funcionário’,
dessa forma aproveitamos todas as propriedades de ’Pessoa’ e incluímos as propriedades espe-
cíficas de ’Funcionário’, como: data de admissão, cargo, salário e etc.
Polimorfismo: um conceito mais difícil de ser entendido, porém não menos importante é o
conceito de polimorfismo. Essa dificuldade decorre da amplitude desse conceito e de significados
em POO. Suas variadas definições são:
.overloading: designa um tipo de polimorfismo em que podemos utilizar um nome igual para
designar métodos diferentes que terão lista de parâmetros também diferentes. Isto tanto em
número de parâmetros quanto em tipo; .os objetos de uma classe-mãe podem ser redefinidos por
objetos das suas sub-classes; .variáveis podem assumir tipos diferentes ao longo da execução.
Visibilidade: através dos indicadores ’public’ e ’private’ algumas classes e métodos podem
ser visíveis ou não. Os métodos e propriedades públicas serão a interface do objeto com o
usuário.
Abstração: em termos de desenvolvimento, abstração significa concentrar-se no que um
objeto é e faz antes de se decidir como ele será implementado. Significa representar as caracte-
rísticas essenciais de um tipo de dado sem incluir o mecanismo que concretiza a funcionalidade.
A abstração é fundamental para conseguir uma boa modularização, que é uma técnica que tem a
estratégia de ’dividir para conquistar’, ou seja, resolver um grande problema dividindo-o em vários
problemas menores.
5.3 Variáveis
Variáveis de Classe: são variáveis declaradas no escopo de uma classe, mas de tal modo
que não precisam de objetos para serem referenciadas, bastando a definição da classe na qual
são declaradas.
Variáveis de Instância: variáveis declaradas no escopo de uma classe e definem os atributos
que cada objeto da classe possui.
Variáveis Paramétricas: declaradas como parâmetros de métodos, construtores e manipula-
dores de exceções.
34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.4 Modificadores
No caso da linguagem java, existem uma série de modificadores de métodos, classes e atri-
butos. Mostraremos os principais e mais usados :
• public: permite acesso total em uma classe, em um método ou sobre um atributo;
• private: não é aplicável a classes, mas é acessado pela classe em métodos e atributos;
• protected: modificador que não é aplicável a classes, mas é acessado pelo pacote em
métodos e atributos;
• final: numa classe indica que é sem herança, não pode ser sobrescrito em um método e
indica que um atributo é constante;
• static: não aplicável a classes, e dá acesso a métodos e atributos somente referenciando
a classe;
• native: aplicável somente a métodos para indicar código nativo;
• synchonized: aplicável somente a métodos para indicar não acesso simultâneo.
Exemplo de uso dos modificadores:
public static void FazConta();
This e Super
Palavras-chave aplicadas a métodos não estáticos, ou seja, de instância. This é utilizada para
referenciar variáveis ou métodos da instância atual e o super é utilizada para associar a métodos
da classe ’mãe’.
5.5 Pacotes (Packages):
Conjunto organizado de classes e demais arquivos que estão relacionados através de um pro-
pósito comum ou atuam com dependências entre si. São muito úteis e necessários na medida em
que são usados para localizar o código da classe de forma eficiente. Para utilizá-los, simplismente
precedemos diretivas importi (importar) ao nome e caminho do pacote dessa maneira:
import nomedopacote.nomedosubpacote.NomeDaClasse;
Exemplo:
import java.io.IOException;
OBS.: se necessário o uso de mais de uma classe do mesmo pacote podemos referenciar
com o uso de ’*’ dessa maneira:
import java.lang.*;
35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.6 Uma Página em JSP
Já dissemos que uma página escrita em JSP é baseada no HTML padrão. A maior parte do
código de uma página JSP consiste em template text. O template text é similar ao HTML e é
passado ao browser do cliente por um servlet criado para manusear a página. Logo, para criar
uma aplicação JSP podemos incluir tags JSP em uma página html previamente criada (normal-
mente começam com ’<%’ e terminam com ’%>’) e salvar o arquivo com extensão ’.jsp’ ao invés
de ’.html’.
Basta agora abrir a página em um browser qualquer. É certo que o resultado nesse caso
será o mesmo que em uma página html, mas levará mais tempo para abri-la em JSP. Mas so-
mente da primeira vez. Se tentar carregá-la novamente, carregará normalmente. Isso acontece
porque o código da página, numa primeira vez, é transformado em um arquivo Java, compilado
e executado. Logo, a não ser que o código seja alterado normalmente, a página será carregada
imediatamente numa segunda chamada.
A partir dessa parte faremos um rápido resumo para relembrar a sintaxe dos comandos con-
dicionais e loops do java.
5.7 Condicionais
As condicionais são usadas quando o programador precisa que algum código seja executado,
se uma condição for verdadeira, ou outra seja executada se a primeira condição for falsa, e assim
por diante.
Comandos IF/ELSE
Um bloco if é formado primeiramente com o próprio ’if’ e seguido por um teste booleano e
uma instrução ou um bloco de instruções que precisam ser executadas caso o teste booleano
seja verdadeiro. O ’else’ pode ser usado caso o programador queira que o programa execute o
bloco de instruções que o segue, caso o teste booleano do ’if’ não seja verdadeiro. Exemplo:
<html>
<body>
<%
int valor = -10;
if(valor < 0){
out.println("Valor absoluto de" + valor + " = " + -valor);
}
else{
out.println("Valor absoluto de" + valor + " = " + valor);
}
%>
</body>
</html>
36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Comando SWITCH
O comando switch é usado em situações em que apenas uma entre as condições sendo
testadas assume o valor true num mesmo momento. Se a expressão tem valor coincidente no
switch, a instrução após ele é executada. Caso contrário, a instrução em default é executada. A
sintaxe é a seguinte:
switch(expressão) {
case (constante 1):
(comando 1)
break;
case (constante 2):
(comando 2)
break;
.
.
.
case (constante n):
(comando n)
break;
default:
(comando)
}
Exemplo:
<html>
<body>
<%
int a = 1;
char op = '+';
switch(a) {
case 1:
out.println("case 1: op="+op);
break;
case 2:
out.println("case 2: op="+op);
break;
case 3:
out.println("case 3"+op);
break;
default:
out.println("default: op nao esta no limite 1..3");
}
%>
</body>
</html>
37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
5.8 Repetição(loop)
Tratatemos nessa seção sobre as rotinas de repetição de java, que logicamente podem ser
usadas em JSP.
FOR
• repete uma instrução determinado número de vezes até que alguma condição seja satis-
feita;
• forma básica:
for(inicialização;condição;incremento){
código
}
Exemplo:
<html>
<body>
<%
for(int i=0;i<10; i++){
out.println("Dessa vez, i = " + i + "<br />");
}
%>
</body>
</html>
WHILE
• repete uma instrução até que alguma condição seja verdadeira. Primeiro testa a condição
e depois entra no loop;
• forma básica:
while(condição){
código
}
Exemplo:
<html>
<body>
<%
int i = 0;
while(i < 10){
out.println("Dessa vez, i = " + i + "<br />");
i++;
}
%>
</body>
</html>
38
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
DO...WHILE
• é parecido com um while, só que repete uma instrução até que alguma condição seja falsa.
Primeiro entra no loop e depois checa a condição;
• forma básica:
do{
código
}while(condição);
Exemplo:
<html>
<body>
<%
int i = 0;
do { %>
<font size=<%=i%>>
Olá Mundo
Fonte: <%= i %>
</font><br>
<% i++;
}while(i<=5); %>
</body>
</html>
Obs.: Se por acaso for necessário que o programa saia da rotina de repetição antes do seu
término usual, podemos usar a palavra-chave break, que para imediatamente a execução do loop
e continua no comando seguinte a ele. Já se o programador desejar parar apenas a execução de
uma interação e continuar o loop na seguinte, ele pode usar a palavra-chave continue.
39
Capítulo 6
TAGS JSP
6.1 TAGS - Expressões, Scriptlets e Declarações
Existem 5(cinco) tipos diferenciados de tags em JSP. São elas: Expressões, Scriptlets, Decla-
rações, Diretivas, e Comentários.
Expressões
As expressões são trechos avaliados (em tempo de execução, quando a página é requisitada
pelo browser), convertidas em String e colocadas na página enviada. Têm forma geral:
<%= expressão %>
Exemplos de Expressões:
<%= request.getMethod() %>
<%= new java.util.date() %>
<%= x*y*z %>
<%= Math.sqrt(49) %>
Obs.: As expressões não aceitam ponto-e-vírgula.
Scriptlets
Scriptlets é como são ostrechos de código JSP dentro de páginas HTML. São úteis quando
não é necessário mais de um comando Java ou quando o resultado da computação não é para
ser colocado na página de resposta.
<% Código java %>
Exemplo de Scriptlet:
<html>
<body>
<% out.println( "Validando a data" );
java.util.Date date = new java.util.Date();
%>
40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Hello! The time is now:
<%
out.println(String.valueOf(date));
%>
</body>
</html>
Obs.:
• 1. Todo código HTML estático antes e após um scriptlet é transformado em comandos de
saída (out). Assim, não é necessário abranger os códigos estáticos, além do que blocos de
controle abertos afetam o código HTML envolvido por scriptlets. Exemplo:
Inserir Numero
<% if (Math.random() < .4) { %>
Número correto!
<% } else { %>
Tente novamente
<% } %>
que produz:
out.println("Inserir Numero")
if (Math.random() < .4) {
out.println("Número Correto!")
} else {
out.println("Tente Novamente")
}
• 2. Scriptlets são considerados uma péssima prática de programação pois deixam o código
sujo dificultando a legibilidade e possibilitam a execução de tarefas que não deveriam ser
efetuadas na camada de aprensentação, como por exemplo, acessar o banco de dados,
executar regras de negócio, modificar o fluxo de navegação e etc.
• 3 Quando se está usando o padrão MVC (melhor explicado adiante), deve-se sempre pres-
tar atenção na regra que diz que a camada View(JSP) , deve ser usada apenas para apre-
sentação dos dados da aplicação.
• 4. Scriptlets exigem ponto-e-vírgula ao final de sentenças.
Declarações
Declarações em JSP são alocações de espaços na memória através de definições das variá-
veis e métodos que serão inseridos no corpo do servlet, e serão então referenciados através de
outros elementos de criação de scriptlets. Por não gerarem saída nenhuma, as declarações são
usadas em combinações com expressões e scriptlets. Em JSP são feitas dessa maneira:
<%! Código java %>
41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Deve-se sempre declarar os métodos e as variáveis antes de usá-los. O escopo é geralmente
o arquivo JSP, mas pode ser expandido se houver outros arquivos relacionados com uma diretiva
include. Neste caso se expandirá para o cover do arquivo incluído.
Exemplos de declarações:
<%! int c = 30; %>
<%! String [] pessoas = {?Pedro?,?Jose?,?Maria?}; %>
<%! private int num=0; %>
<%! Metodo a = new Metodo(5.0); %>
<%! double d,e; int f ;%>
Declaradas dessa maneira, são variáveis de instância. Já as declaradas dentro de scriptlets
são variáveis locais ao método _jspService.
Obs.: Cada declaração deve ser separada por ponto-e-vírgula ou finalizada.
6.2 TAGS - Diretivas e Comentários - e Ações
Diretivas
Diretivas são mensagens incluídas no html que passam informações para o JSP container.
Não enviam nada para a página, mas são importantes pois informam o servidor web coisas
como: a linguagem usada no documento, que no caso é o java, importa os pacotes necessários
ao uso, etc.
1. Diretiva PAGE
A diretiva page possui onze atributos opcionais que fornecem processamento de informações
especiais ao motor JSP. Seu formato padrão é:
<%@ Diretiva atributo1="valor1" atributo2="valor2" ... atributoN="valorN" %>
Exemplo de diretiva page:
<%@ page language="java" import="java.util.*" %>
Apesar de serem opcionais por já possuírem um valor default, aqui listaremos os atributos
mais usados na diretiva page:
• import - especifica o pacote a ser importado. Único atributo que pode ser usado mais de
uma vez. Ex:
<%@ page import="java.util.*" %>
• isThreadSafe - indica se o servlet será executado no modo SingleThread. O valor default é
true. Ex:
<%@ page isThreadSafe="true|false" %>
42
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
• session - indica se as informações da sessão http estarão disponíveis ou não para a página.
O valor default é true. Ex:
<%@ page session="true|false" %>
• buffer - especifica o tamanho do buffer do JSPWriter out. o Default é definido pelo servidor.
Ex:
<%@ page buffer="sizekb|none" %>
• autoFlush - indica se o buffer deve ser esvaziado quando cheio. O default é true. Ex:
<%@ page autoFlush="true|false" %>
• ContentType - indica o tipo MIME da página de resposta. Deve ser colocado no início do
arquivo. Ex:
<%@ page ContentType="text/html;charset=ISO-8859-1" %>
• extends - define se a subclasse do servlet deve ser gerada. O default é javax.servlet.HttpServlet.
Ex:
<%@ page extends="package.class" %>
• info - informação sobre o servlet que pode ser recuperada pelo método Servlet.getServletInfo().
o defalut é uma string vazia. Ex:
<%@ page info="texto" %>
• errorPage - mostra a página a ser exibida no caso de algum erro não tratado no código. Ex:
<%@ page errorPage="url" %>
• isErrorPage - indica se a página é de erro. Logicamente o default é false. Ex:
<%@ page isErrorPage="true|false" %>
• language - especifica a linguagem usada. No caso o java. Ex:
<%@ page language="java" %>
43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
2. Diretiva INCLUDE
A diretiva include é usada, por exemplo, quando se quer inserir um texto de outro arquivo
no local indicado no arquivo JSP atual. Essa diretiva divide conteúdos em blocos de construção
separados. É bom saber que ela trata um arquivo incluído como estático.
Exemplo de diretiva include:
<%@ include file="arquivo.txt" %>
3. Diretiva TAGLIB
A diretiva Taglib é uma coleção de tags customizadas que podem ser usadas pela página.
Tags customizadas permitem aos desenvolvedores esconder complexos códigos ’server-side’dos
web-designers. Possui dois atributos:
• uri : Uniform Resource Identifier (URI) que identifica o arquivo TLD que descreve as tags
associadas com o prefixo dado. Este atributo pode ser definido como uma URL:
<%@ taglib uri='http://java.sun.com/jstl/core' prefix='c' %>
ou como um caminho:
<%@ taglib uri="WEB-INF/HelloWorld.tld" prefix="t" %>
• prefix : é o prefixo usado para identificar a biblioteca. No caso anterior:
<t:reservar />
OBS.: Os prefixos: jsp, jspx, java, javax, servlet, sun, e sunw não podem ser usados, pois são
reservados pela Sun Microsystems.
Exemplo de diretiva Taglib com sua uri e prefixo:
<%@ taglib uri = ?tag library URI? prefix = ?tag Prefix? %>
Comentários
Um primeiro tipo de comentário é o comentário HTML: independente de ser uma página JSP
(ou seja, mesmo sendo uma página HTML estática), pode-se utilizá-lo para incluir um texto que
não aparecerá diretamente para o usuário, a não ser que ele visualize o código-fonte da página.
A sintaxe de um comentário HTML é a seguinte:
<!--Comentários-->
Ao contrário do anterior, comentários JSP não são visíveis ao usuário nem mesmo se ele
visualizar o código-fonte da página.
<%--Comentários--%>
44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Ações
Ações permitem que acrescentemos funcionalidades ao JSP através da interações JavaBe-
ans. São tags que fornecem um mecanismo simplificado de acesso a objetos Java em páginas
JSP. Disponibilizam ainda comando para redirecionamento do JSP para outro servlet ou JSP.
Ações Padrão são ações pré-definidas pelo container JSP.
Exemplo:
<jsp:forward page=?/NomeDoDiretório/NomeDoArquivo.jsp? />
Esse comando redireciona a página passando o request.
45
Capítulo 7
JSTL e Javabeans
7.1 Noções JavaBeans e EJB
JavaBeans
Segundo a especificação da Sun Microsystems os JavaBeans são componentes reutilizáveis
de software que podem ser manipulados visualmente com a ajuda de uma ferramenta de de-
senvolvimento. De uma maneira direta, Javabeans são classes que possuem o construtor sem
argumentos e métodos de acesso do tipo get e set.
EJB
A pergunta que não quer se calar pode ser respondida muito facilmente uma vez que a maior
confusão feita aí fora é entre Javabeans e EJB.
Enterprise Java Beans é uma arquitetura de componentes multi-plataforma para o desenvolvi-
mento de aplicações Java muiti-tier, distribuídas, escaláveis e orientadas a objetos. O objetivo da
arquitetura EJB é facilitar o trabalho do desenvolvedor para que ele não tenha que se preocupar
com aspectos de infra-estrutura.
Podemos usar beans por diversos motivos, normalmente as classes de modelo da nossa
aplicação costumam ser java beans.
Existem três tipos de EJBs:
• 1. Session Bean - é o tipo mais simples de EJB, pode ter estado (stateful) ou não ter
(stateless);
• 2. Entity Bean - mapeiam tabelas de um banco de dados relacional através de um arquivo
de mapeamento. Na prática cada objeto entity representa uma linha de uma tabela. Existe
uma linguagem de query específica para buscar entitys chamada EQL;
• 3. MDB - são consumidores assincronos de mensagens de filas / tópicos JMS.
Na teoria, o uso de EJBs tornaria mais fácil escrever aplicações empresariais como compo-
nentes provendo um conjunto de serviços automáticos para suportar aplicações transacionais, o
que não acontece na prática.
46
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
7.2 JSTL
Em lições anteriores mostramos alguns problemas como: a dificuldade de construir páginas
JSPs bem organizadas; web designers normalmente não programam em Java, o que causa difi-
culdades na interação entre desenvolvedores e web designers. Seguindo a idéia de melhorar o
código java que precisa de uma maneira ou de outra ser escrito na página jsp, a Sun sugeriu o
uso da Java Server Pages Standard Tag Library: a JSTL.
A JSTL é a API que encapsulou em tags simples toda a funcionalidade que diversas páginas
web precisam, como controle de laços (fors), controle de fluxo do tipo if/else, manipulação de
dados xml e internacionalização de sua aplicação. Consiste em uma coleção de bibliotecas,
tendo cada uma um propósito bem definido, que permitem escrever páginas JSPs sem código
Java, aumentando assim a legibilidade do código e a interação entre desenvolvedores e web
designers.
Existe também uma outra parte famosa da JSTL, aquela que acessa banco de dados e per-
mite escrever códigos SQL na nossa página, mas às vezes o designer não conhece java, muito
menos SQL. O uso de tal parte da JSTL é desencorajado. A JSTL foi a forma encontrada de
padronizar o trabalho de milhares de programadores de páginas JSP.
Muitas páginas JSP no mundo ainda possuem muitos pedaços de scriplets espalhados dentro
dela mesma. Recomendamos a todos os nossos alunos que optarem pelo jsp como camada de
visualização que utilizem a jstl e outras bibliotecas de tag para evitar o código incompreensível que
pode ser gerado com scriplets. O código das scriplets mais confundem do que ajudam, tornando
a manutenção da página jsp cada vez mais custosa para o programador e para a empresa.
Para instalar a implementação mais famosa da JSTL basta baixar a mesma no site do apache:
http://www.apache.org
Bibliotecas JSTL padrão
Biblioteca Prefixo URI Tipos de uso Exemplo
JSTL
core c */core .acesso e modificação <c:forEach>
de dados em memória;
.comandos condicionais
e loops;
processamento x */xml .Parsing** de documentos <x:forEach>
de xml .impressão de partes de
documentos XML;
.tomada de decisão base-
ado no conteúdo do XML;
internacionalização fmt */fmt .Leitura e impressão <fmt:formatDate>
e formatação de números e datas
.ajuda a aplicação a
funcionar em mais de
uma língua;
acesso a banco de sql */sql .Leitura e escrita em <sql:query>
dados via SQL banco de dados;
* http://java.sun.com/jstl
**Parsing = Leitura
47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Instalando:
1. Faça o download em : http://www.apache.org/dist/jakarta/taglibs/standard/
2. Descompacte o arquivo e copie:
a) /jakarta-taglibs-standard-1.*/tld/* para WEB-INF
b) /jakarta-taglibs-standard-1.*/lib/* para WEB-INF/lib
3. Adicione essas informações no web.xml:
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
<taglib>
<taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
4. Por fim, na página JSP, declare os tipos que for utilizar:
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Explicando a sintaxe
Cada tag faz parte uma biblioteca JSTL e realiza um determinado tipo de processamento
(equivalente a código Java dentro de JSP). Uma página JSTL pode utilizar várias bibliotecas
JSTLs. Na primeira linha, temos a seguinte tag:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
Essa declaração informa ao compilador que é utilizada uma biblioteca cujas tags serão reco-
nhecidos pelo prefixo "fmt", de modo a evitar possíveis conflitos com tags de mesmo nome de
outras bibliotecas. A biblioteca de tags é identificada pelo atributo uri. Veja:
Exemplo de página JSTL:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<body bgcolor="#FF0000">
<jsp:useBean id="now" class="java.util.Date"/><br>
Short Version: <fmt:formatDate value="${now}" />
Long Version: <fmt:formatDate value="${now}" dateStyle="full"/>
</body>
</html>
A tag padrão <jsp:useBean> é utilizada para instanciar um objeto java.util.Date (inicializado
por padrão com a data e hora atuais do sistema).
A variável now, criada pelo tag <jsp:useBean>, é depois referenciada dentro do atributo value
dos tags <fmt:formatDate>, que aparece duas vezes na página.
Observe que o atributo dateStyle do tag <fmt:formatDate> define se será utilizado um formato
resumido da data ou um formato longo.
O exemplo apresenta a data atual em dois formatos: um curto e outro longo.
No caso o resultado da hora das versões:
Short Version: 24/05/2007
Long Version: Quinta-Feira, 24 de Maio de 2007
Observe que não existe nenhum código Java.
49
Capítulo 8
Servlets: Criação e Ciclo
8.1 O que são Servlets?
No começo, a web foi basicamente utilizada para disponibilizar conteúdo estático. Da neces-
sidade de gerar conteúdo dinâmico surgiram primeiro os programas de CGI (Common Gateway
Interface). No entanto, a primeira tecnologia java que tinha a finalidade de oferecer conteúdo
dinâmico foi "Servlet".
Servlets são programas java que executam em associação com servidores web através do
modelo ’request/response’, ou seja, lidando com características típicas do protocolo HTTP, como
os métodos GET, POST, com os Cookies etc.
Servlets não possuem interface gráfica e trabalham não só com servidores web mas com
vários tipos de servidores, uma vez que sua API não contém explicitamente especificações ao
ambiente do servidor. Além disso, são carregadas apenas uma vez e, por serem multi-thread,
podem atender a mais de uma solicitação de uma só vez. Esta peculiaridade que a torna mais
rápida que um programa CGI comum.
Exemplo de arquitetura de um servlet:
50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
OBS.: Thread é uma forma de um processo dividir-se em mais de uma tarefa que podem ser
executadas simultaneamente. Uma thread permite que o usuário de programa use uma funcio-
nalidade do ambiente enquanto outras threads realizam outros cálculos e operações.
O servidor interage com o servlet através de uma interface padrão, que é:
Interface javax.servlet.Servlet.
Ela define os métodos init, service e destroy, que são responsáveis pelo ciclo de vida de um
servlet. O comportamento das servlets que veremos adiante é definido na classe HttpServlet do
pacote javax.servlet. Eles se aplicam às servlets que trabalham através do protocolo Http.
8.2 Criar o primeiro Servlet
Depois da instalação e configuração do Tomcat seguimos basicamente seis etapas para es-
crever o seu servlet a executá-lo.
51
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
Primeiro:
Crie um diretório chamado teste no diretório webapps do Tomcat. É importante o nome do
diretório, pois ele irá aparecer na URL do browser. Crie também um diretório chamado WEB-INF
dentro do teste, e dentro de WEB-INF crie o diretório classes.
Segundo:
Preparamos então o código-fonte e salvamos no diretório classes do contexto.Preparamos
então o código-fonte e salvamos no diretório classes do contexto (arquivo deve ter o mesmo
nome da classe, da maneira “java” de ser).
___________________________________________________________________________________
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletTeste extends HttpServlet {
private PrintWriter out;
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/html");
saida = response.getWriter();
saida.println("<HTML>");
saida.println( "<HEAD>");
saida.println( "<TITLE> Teste</TITLE>");
saida.println( "<BODY>");
saida.println( "Primeiro Servlet.");
saida.println( "</BODY>");
saida.println("</HTML>");
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException{
doGet(request, response);
}
}
___________________________________________________________________________________
Terceiro:
Compilamos então o código-fonte anterior. Exemplo:
$ javac -classpath /opt/install/apache-tomcat-6.0.10/lib/servlet-api.jar:. -d classes ServletTeste.java
, onde
52
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
-classpath <pasta>:<pasta> - define os diretórios que serão usados como classpath ()
-d <pasta> - define o diretório para onde vai o arquivo compilado ( .class).
Quarto: Criamos o ’web.xml’ e o colocamos no diretório /WEB-INF do contexto. A criação
do básico do web.xml é feita da seguinte maneira (a explicação deste primeiro web.xml é mais
superficial. Um arquivo web.xml mais prático vai ser criado mais pra frente):
___________________________________________________________________________________
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- |1|>
<!DOCTYPE web-app <!-- |2|>
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app> <!-- |3|>
<display-name>Minha Aplicacao Web</display-name> <!-- |4|>
<description> <!-- |5|>
Esta é a versão XX de uma aplicação web que faz uso de servlet e jsp e serve
para automatizar tal coisa.
</description>
<context-param> <!-- |6|>
<param-name>webmaster</param-name> <!-- |7|>
<param-value>meuendereco@minhaempresa.com</param-value> <!-- |8|>
<description>
Endereco de email do administrador para quem questoes e comentarios
devem ser enviados.
</description>
</context-param>
<servlet> <!-- |9|>
<servlet-name>meuServlet</servlet-name> <!-- |10|>
<description>
Servlet usado para blablabla...
</description>
<servlet-class>com.meu.pacote.NomedoServlet</servlet-class> <!-- |11|>
<init-param> <!-- |12|>
<param-name>listaOrdens</param-name>
<param-value>com.minhaempresa.minhasAcoes.ListaOrdensAcoes</param-value>
</init-param>
<load-on-startup>5</load-on-startup> <!-- |13|>
</servlet>
<servlet-mapping> <!-- |14|>
<servlet-name>meuServlet</servlet-name>
<url-pattern>/meuServlet</url-pattern>
</servlet-mapping>
53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
<session-config> <!-- |15|>
<session-timeout>30</session-timeout>
</session-config>
<welcome-file-list> <!-- |16|>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
</web-app>
___________________________________________________________________________________
Explicações gerais do web.xml:
|1| - Esta é a DTD (Document Type Definition) para os deployments descriptors da versão da
API Servlet. Os deployments descriptors também devem incluir um DOCTYPE |2|.
|3| - A partir daqui começam as descrições gerais da aplicação. A tag web-app é a raiz
dos deployment descriptor para as aplicações web. Nela, as tags devem obrigatoriamente estar
organizadas na seguinte ordem imposta pela DTD inclusa acima:
web-app <(icon?, display-name?, description?, distributable?, context-param*,
filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?,
mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-env-ref*,
resource-ref*, security-constraint*, login-config?, security-role*, env-entry*,
ejb-ref*, ejb-local-ref*)>
Onde uma "?"indica que a tag pode aparecer 0 ou 1 vez e o "*"indica 0 ou mais vezes.
|4| - Define um nome a ser mostrado para a aplicação. Não tem relação com o context-path,
portanto, essa configuração não vai alterar a maneira de acesso da aplicação.
|5| - Descrição para a aplicação web.
|6| - Parâmetro de inicialização que será utilizado por toda a aplicação. Valores definidos
nessa tag podem ser recuperados em um servlet ou uma jsp pela chamada do método:
String param = getServletContext().getInitParameter("name");
, onde "nome"deve coincidir com o valor definido na subtag <param-name>. Pode-se definir
também qualquer número de paramentros de inicialização que forem necessários. Incluindo o
zero.
|7| - Nome do parâmetro de inicialização.
|8| - Valor do parâmetro.
54
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
|9| - Definições para os servlets que fazem parte da aplicação, incluindo parâmetros de inicia-
lização. No Tomcat, pode-se também enviar requests para servlets não listados aqui da seguinte
maneira:
http://localhost:8080/diretório_raiz/servlet/Nome_da_classe
Entretanto, esse uso não é garantidamente portável. Isso também torna referências relativas
a recursos usados pelo servlet mais complexas. Então definir todos os servlets é o recomendado.
Parâmetros de inicialização do servlet podem ser recuperados em um servlet ou jsp da seguinte
maneira:
String value = getServletConfig().getInitParameter("nome");
onde "nome"deve coincidir com o valor definido na subtag <param-name> para algum dos
parâmetros. Pode-se definir também qualquer quantidade de servlets incluindo zero.
|10| - Nome do servlet. É uma tag obrigatória.
|11| - Tag usada para indicar o pacote (se houver) e a classe (qualificada) que representa o
servlet definido. Outra tag obrigatória.
|12| - Lista de parâmetros de inicialização referentes apenas a esse servlet. Pode-se usar
quantos <init-param> quiser inclusive zero.
|13| - Indica que este servlet deve ser carregado (instanciado e ter seu método init() cha-
mado) quando a aplicação for iniciada. O conteúdo desse elemento deve ser um inteiro indicando
a ordem na qual os servlets serão carregados. Se o valor é negativo, ou não é apresentado, o
container é livre para carregar o servlet a qualquer hora que escolher. Se o valor é um inteiro
positivo ou 0 (zero), o container deve carregar e inicializar o servlet assim que a aplicação é inici-
ada. O container deve garantir que servlet marcados com inteiros menores devem ser carregados
antes de servlets marcados com inteiros de valores altos. O Container pode escolher a ordem
para carregar servlet marcados com o mesmo valor em load-on-startup.
|14| - Como já explicado, a tag <serlvet-mapping> define um mapeamento que é usado pelo
servlet container para traduzir um request URI para um servlet em particular. Pode-se definir
qualquer número de mapeamentos para serlvets, incluindo zero. Tambem é permitido fazer mais
de um mapeamento para um mesmo servlet.
|15| - Define um timeout default para as sessions de sua aplicação, em minutos. A partir de um
serlvet ou JSP pode-se modificar manualmente o timeout para uma session em particular usando
dinamicamente os métodos.
HttpSession.getMaxInactiveInterval() e
HttpSession.setMaxInactiveInterval(int interval).
|16| - Lista de arquivos que serão procurados quando alguém acessar o diretório virtual da
aplicação. Os arquivos são listados em ordem de prioridade, de modo que os primeiros serão
55
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
procurados antes e, caso não sejam encontrados, o servlet container tentará usar o próximo da
lista.
Quinto:
Iniciar o Tomcat. Caso já esteja iniciado, ignore esta etapa.
Sexto:
Chamar o servlet a partir de um browser pela URL já demonstrada (usando a porta 8080):
http://localhost:8080/teste/Teste
Em lições posteriores serão melhor explicados os métodos usados no código fonte do Servlet.
8.3 Um Exemplo
Mostrarei aqui um exemplo mais prático. Nele criamos os diretórios na pasta webapps do
Tomcat, criamos um web.xml, criamos um servlet e uma página com um formulário.
Organização das pastas no tomcat(como já mostrado, a pasta padrão do Tomcat no nosso
caso é: /apache-tomcat-6.0.10):
+ apache-tomcat-6.0.10
| + webapps
| | + exemplo1
| | | | form.html
| | | + WEB-INF
| | | | web.xml
| | | | + classes
| | | | | Exemplo.class
| | | | -
| | | -
| | -
| -
-
Organização das pastas de projeto:
+ projetos
| + exemplo1
| | + web
| | | form.html
| | -
| | + etc
| | | web.xml
| | -
| | + src
56
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF
| | | Exemplo.java
| | -
| | + classes
| | | Exemplo.class (Será criado na compilação do Exemplo.java)
| | -
| -
-
.Criando o arquivo ’form.html’ na pasta: projetos/exemplo1/web/
______________________________________________________________________________
<html>
<head>
<title>Exemplo1 CDTC</title>
</head>
<body>
<h1>Exemplo1 CDTC</h1>
<hr />
<p> Digite um valor: </p>
<form action="acao.do" method="post">
<input type="text" name="valor" />
<input type="submit" />
</form>
</body>
</html>
_______________________________________________________________________________
Criar arquivo Exemplo.java na pasta projetos/exemplo1/src/
________________________________________________________________________________
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Exemplo extends HttpServlet {
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Você selecionou: <br />" );
String escolha = request.getParameter("color");
out.println(escolha + "<br />");
}
}
________________________________________________________________________________
.Criar arquivo web.xml na pasta projetos/exemplo1/etc/
57
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets
Jspservlets

More Related Content

What's hot (20)

Selinux
SelinuxSelinux
Selinux
 
Tcl tk
Tcl tkTcl tk
Tcl tk
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Screen
ScreenScreen
Screen
 
Samba
SambaSamba
Samba
 
X dialog
X dialogX dialog
X dialog
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Wx python
Wx pythonWx python
Wx python
 
Zope
ZopeZope
Zope
 
Sql
SqlSql
Sql
 
Squid guard
Squid guardSquid guard
Squid guard
 
Uml
UmlUml
Uml
 
Qemu
QemuQemu
Qemu
 
Pascal
PascalPascal
Pascal
 
Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Vim
VimVim
Vim
 
Inkscape
InkscapeInkscape
Inkscape
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Linguagem Ruby
Linguagem RubyLinguagem Ruby
Linguagem Ruby
 
Drupal
DrupalDrupal
Drupal
 

Similar to Jspservlets (20)

Javascript
JavascriptJavascript
Javascript
 
Zope
ZopeZope
Zope
 
Squid
SquidSquid
Squid
 
Iptables
IptablesIptables
Iptables
 
Python gtk
Python gtkPython gtk
Python gtk
 
Horde
HordeHorde
Horde
 
Ltsp
LtspLtsp
Ltsp
 
Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Postfix
PostfixPostfix
Postfix
 
Quanta
QuantaQuanta
Quanta
 
Drivers de dispostivos_linux
Drivers de dispostivos_linuxDrivers de dispostivos_linux
Drivers de dispostivos_linux
 
Java basico
Java basicoJava basico
Java basico
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtk
 
Gerenciadores de boot
Gerenciadores de bootGerenciadores de boot
Gerenciadores de boot
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemas
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
Linguagem ruby
Linguagem rubyLinguagem ruby
Linguagem ruby
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 
Nessus
NessusNessus
Nessus
 
Open solaris
Open solarisOpen solaris
Open solaris
 

More from Tiago

More from Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 

Recently uploaded

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
LeloIurk1
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
rosenilrucks
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
HELENO FAVACHO
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
LeloIurk1
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
LeloIurk1
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
TailsonSantos1
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
edelon1
 

Recently uploaded (20)

2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEMPRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
PRÁTICAS PEDAGÓGICAS GESTÃO DA APRENDIZAGEM
 
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIAPROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
PROJETO DE EXTENSÃO I - AGRONOMIA.pdf AGRONOMIAAGRONOMIA
 
P P P 2024 - *CIEJA Santana / Tucuruvi*
P P P 2024  - *CIEJA Santana / Tucuruvi*P P P 2024  - *CIEJA Santana / Tucuruvi*
P P P 2024 - *CIEJA Santana / Tucuruvi*
 
migração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenosmigração e trabalho 2º ano.pptx fenomenos
migração e trabalho 2º ano.pptx fenomenos
 
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
Nós Propomos! Autocarros Elétricos - Trabalho desenvolvido no âmbito de Cidad...
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
Seminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptxSeminário Biologia e desenvolvimento da matrinxa.pptx
Seminário Biologia e desenvolvimento da matrinxa.pptx
 
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdfPROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
PROJETO DE EXTENSÃO I - TERAPIAS INTEGRATIVAS E COMPLEMENTARES.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdfPROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
PROJETO DE EXTENSÃO - EDUCAÇÃO FÍSICA BACHARELADO.pdf
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdfRecomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
 
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcanteCOMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
COMPETÊNCIA 2 da redação do enem prodção textual professora vanessa cavalcante
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 

Jspservlets

  • 2. Sumário I Sobre essa Apostila 3 II Informações Básicas 5 III GNU Free Documentation License 10 IV JSP e Servlets 19 1 O que é JSP e o que são Servlets 20 2 Plano de ensino 21 2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3 Iniciando em JSP e Servlets 24 3.1 Definições: JSP e Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Comparação de Java Server Pages com Servlets . . . . . . . . . . . . . . . . . . . . 25 3.3 Aplicações Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4 Instalações e Configurações 29 4.1 Instalações Necessárias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.2 Estrutura de Diretórios do Tomcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5 Fundamentos da Orientação a Objeto 33 5.1 Classes, Objetos e Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2 Conceitos Importantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.3 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.4 Modificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.5 Pacotes (Packages): . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.6 Uma Página em JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1
  • 3. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.7 Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.8 Repetição(loop) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6 TAGS JSP 40 6.1 TAGS - Expressões, Scriptlets e Declarações . . . . . . . . . . . . . . . . . . . . . . 40 6.2 TAGS - Diretivas e Comentários - e Ações . . . . . . . . . . . . . . . . . . . . . . . . 42 7 JSTL e Javabeans 46 7.1 Noções JavaBeans e EJB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 7.2 JSTL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 8 Servlets: Criação e Ciclo 50 8.1 O que são Servlets? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 8.2 Criar o primeiro Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 8.3 Um Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 8.4 O Ciclo de Vida de um Servlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 8.5 Métodos de Serviço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 8.6 Implementação e Publicação de servlets . . . . . . . . . . . . . . . . . . . . . . . . . 60 8.7 HTML e Java - Servlets e JSPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.8 Mapear uma servlet para uma URL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.9 Retornando ao cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.10 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 9 Servlets: API, Request e Response 63 9.1 Requisição e Resposta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9.2 Servlet - O “CGI de Java” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 9.3 CGI X Servlets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 9.4 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 9.5 Interfaces do doGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 10 Usando Cookies e Controlando Sessões 69 10.1 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 10.2 Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 11 Controle de Erros 72 11.1 Erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 11.2 MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 2
  • 4. Parte I Sobre essa Apostila 3
  • 5. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Conteúdo O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in- ternet, disponíveis em diversos sites ou originalmente produzido no CDTC (http://www.cdtc.org.br.) O formato original deste material bem como sua atualização está disponível dentro da licença GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de mesmo nome, tendo inclusive uma versão traduzida (não oficial). A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro de 2006. Críticas e sugestões construtivas serão bem-vindas a qualquer hora. Autores A autoria deste é de responsabilidade de Júlio Cesar Júnior (julio@cdtc.org.br) . O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento que vêm sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com outros parceiros institucionais, e com as universidades federais brasileiras que tem produzido e utilizado Software Livre apoiando inclusive a comunidade Free Software junto a outras entidades no país. Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da home page da entidade, através da URL http://www.cdtc.org.br. Garantias O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi- lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) . Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS- TILA. A copy of the license is included in the section entitled GNU Free Documentation License. 4
  • 7. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Sobre o CDTC Objetivo Geral O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina- ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira. Objetivo Específico Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários, criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como incentivadores e defensores dos produtos de software não proprietários e código fonte aberto, ofe- recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de produtos de software não proprietários e do seu código fonte livre, articulando redes de terceiros (dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro- dutos de software livre. Guia do aluno Neste guia, você terá reunidas uma série de informações importantes para que você comece seu curso. São elas: • Licenças para cópia de material disponível; • Os 10 mandamentos do aluno de Educação a Distância; • Como participar dos foruns e da wikipédia; • Primeiros passos. É muito importante que você entre em contato com TODAS estas informações, seguindo o roteiro acima. Licença Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br). 6
  • 8. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu- mentação Livre GNU". Os 10 mandamentos do aluno de educação online • 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é pré-requisito para a participação nos cursos a distância; • 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá- tica é necessário para poder executar as tarefas; • 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân- cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal, dos colegas e dos professores; • 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus colegas de turma respeitando-os e se fazendo ser respeitado pelos mesmos; • 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão e a sua recuperação de materiais; • 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e realizá-las em tempo real; • 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre; • 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens e descobertas; • 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é ponto - chave na comunicação pela Internet; • 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração. Como participar dos fóruns e Wikipédia Você tem um problema e precisa de ajuda? Podemos te ajudar de 2 formas: A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso: . O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a 7
  • 9. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que interesse ao grupo, favor postá-la aqui. Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do curso. É recomendado que você faça uso do Fórum de dúvidas gerais que lhe dá recursos mais efetivos para esta prática. . O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem ajudar. Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico é recomendável ver se a sua pergunta já foi feita por outro participante. A segunda forma se dá pelas Wikis: . Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par- ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé- dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por pessoas de todas as partes do mundo. Acesse-a em português pelos links: • Página principal da Wiki - http://pt.wikipedia.org/wiki/ Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo! Primeiros Passos Para uma melhor aprendizagem é recomendável que você siga os seguintes passos: • Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar; • Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das ferramentas básicas do mesmo; • Entrar nas lições seguindo a seqüência descrita no Plano de Ensino; • Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais. Perfil do Tutor Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores. O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar. 8
  • 10. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e, para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor ou instrutor: • fornece explicações claras acerca do que ele espera e do estilo de classificação que irá utilizar; • gosta que lhe façam perguntas adicionais; • identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por- que motivo a classificação foi ou não foi atribuída’; • tece comentários completos e construtivos, mas de forma agradável (em contraste com um reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de ameaça e de nervossismo’) • dá uma ajuda complementar para encorajar um estudante em dificuldade; • esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente; • ajuda o estudante a alcançar os seus objetivos; • é flexível quando necessário; • mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso, talvez numa fase menos interessante para o tutor); • escreve todas as correções de forma legível e com um nível de pormenorização adequado; • acima de tudo, devolve os trabalhos rapidamente; 9
  • 11. Parte III GNU Free Documentation License 10
  • 12. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF (Traduzido pelo João S. O. Bueno através do CIPSGA em 2001) Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasi- leiro. Ela não é publicada pela Free Software Foundation, e não se aplica legalmente a distribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso. Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL. This is an unofficial translation of the GNU General Documentation License into Brazilian Por- tuguese. It was not published by the Free Software Foundation, and does not legally state the distribution terms for software that uses the GFDL–only the original English text of the GFDL does that. However, we hope that this translation will help Portuguese speakers understand the GFDL better. Licença de Documentação Livre GNU Versão 1.1, Março de 2000 Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, mas não é permitido alterá-lo. INTRODUÇÃO O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito "livre"no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiá-lo ou redistribui-lo, com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autor e editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros. Esta Licença é um tipo de "copyleft"("direitos revertidos"), o que significa que derivações do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licença Pública Ge- ral (GNU GPL), que é um copyleft para software livre. Nós fizemos esta Licença para que seja usada em manuais de software livre, por que software livre precisa de documentação livre: um programa livre deve ser acompanhado de manuais que provenham as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nós recomendamos esta Licença prin- cipalmente para trabalhos cujo propósito seja de introdução ou referência. APLICABILIDADE E DEFINIÇÕES Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorais dizendo que ele pode ser distribuído sob os termos desta Licença. O "Documento"abaixo se refere a qualquer manual ou texto. Qualquer pessoa do público é um 11
  • 13. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF licenciado e é referida como "você". Uma "Versão Modificada"do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificações e/ou traduzida em outra língua. Uma "Seção Secundária"é um apêndice ou uma seção inicial do Documento que trata ex- clusivamente da relação dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluído diretamente nesse assunto geral (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essa relação poderia ser uma questão de ligação histórica com o assunto, ou matérias relaci- onadas, ou de posições legais, comerciais, filosóficas, éticas ou políticas relacionadas ao mesmo. As "Seções Invariantes"são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que o Documento é publicado sob esta Licença. Os "Textos de Capa"são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto é publicado sob esta Licença. Uma cópia "Transparente"do Documento significa uma cópia que pode ser lida automatica- mente, representada num formato cuja especificação esteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos que sirvam de entrada para formatadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sido projetada para atrapalhar ou de- sencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é "Transparente"é chamada de "Opaca". Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII sim- ples sem marcações, formato de entrada do Texinfo, formato de entrada do LaTex, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenas com processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveis para o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída. A "Página do Título"significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subsequentes quantas forem necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma página do título, "Página do Título"significa o texto próximo da aparição mais proe- minente do título do trabalho, precedendo o início do corpo do texto. 12
  • 14. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF FAZENDO CÓPIAS EXATAS Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, e a nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acres- cente nenhuma outra condição, quaisquer que sejam, às desta Licença. Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir. Entretanto, você pode aceitar com- pensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você também precisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e também pode exibir cópias publicamente. FAZENDO CÓPIAS EM QUANTIDADE Se você publicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisará incluir as cópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capa na capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisa apresentar o título com- pleto com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazer cópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam a essas condições, pode ser tratado como cópia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantos couberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes. Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possa ser lida automaticamente com cada cópia Opaca, ou informar, em ou com, cada cópia Opaca a localização de uma cópia Transparente completa do Documento acessível publicamente em uma rede de computadores, à qual o público usuário de redes tenha acesso a download gratuito e anônimo utilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisará tomar cuidados razoavel- mente prudentes, quando iniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma na localização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (direta- mente ou através de seus agentes ou distribuidores) daquela edição para o público. É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhes dar uma oportunidade de prover você com uma versão atualizada do Documento. 13
  • 15. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF MODIFICAÇÕES Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das se- ções 2 e 3 acima, desde que você publique a Versão Modificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição e modificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versão modificada: A. Usar na Página de Título (e nas capas, se houver alguma) um título distinto daquele do Do- cumento, e daqueles de versões anteriores (que deveriam, se houvesse algum, estarem listados na seção "Histórico do Documento"). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão lhe der permissão; B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsá- veis pela autoria das modificações na Versão Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco); C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor; D. Preservar todas as notas de copyright do Documento; E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright; F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob os termos desta Licença, na forma mostrada no tópico abaixo; G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença do Documento; H. Incluir uma cópia inalterada desta Licença; I. Preservar a seção entitulada "Histórico", e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor da Versão Modificada como dados na Página de Título. Se não houver uma sessão denominada "Histórico"no Documento, criar uma dizendo o título, ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal como descrito na sentença anterior; J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma, as localizações de rede dadas no Docu- mento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção "Histórico". Você pode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da versão a que ela se refira der sua permissão; K. Em qualquer seção entitulada "Agradecimentos"ou "Dedicatórias", preservar o título da 14
  • 16. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF seção e preservar a seção em toda substância e fim de cada um dos agradecimentos de contri- buidores e/ou dedicatórias dados; L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não são considerados parte dos títulos da seção; M. Apagar qualquer seção entitulada "Endossos". Tal sessão não pode ser incluída na Versão Modificada; N. Não reentitular qualquer seção existente com o título "Endossos"ou com qualquer outro título dado a uma Seção Invariante. Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum material copiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Esses títulos preci- sam ser diferentes de qualquer outro título de seção. Você pode adicionar uma seção entitulada "Endossos", desde que ela não contenha qual- quer coisa além de endossos da sua Versão Modificada por várias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão. Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente , e uma passagem de até 25 palavras como um Texto de Quarta Capa, ao final da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento já incluir um texto de capa para a mesma capa, adicionado previamente por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro; mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga. O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Versão Modificada. COMBINANDO DOCUMENTOS Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na com- binação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todas elas como Seções Invariantes de seu trabalho combinado em sua nota de licença. O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com multiplas ocorrências podem ser substituídas por apenas uma cópia. Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de 15
  • 17. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF cada seção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número que seja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado. Na combinação, você precisa combinar quaisquer seções entituladas "Histórico"dos diver- sos documentos originais, formando uma seção entitulada "Histórico"; da mesma forma combine quaisquer seções entituladas "Agradecimentos", ou "Dedicatórias". Você precisa apagar todas as seções entituladas como "Endosso". COLETÂNEAS DE DOCUMENTOS Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença nos vários documentos com uma única cópia incluida na coletânea, desde que você siga as regras desta Licença para cópia exata de cada um dos Documentos em todos os outros aspectos. Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia desta Licença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento. AGREGAÇÃO COM TRABALHOS INDEPENDENTES Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos se- parados e independentes, em um volume ou mídia de distribuição, não conta como uma Ver- são Modificada do Documento, desde que nenhum copyright de compilação seja reclamado pela compilação. Tal compilação é chamada um "agregado", e esta Licença não se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Senão eles precisarão aparecer nas capas de todo o agregado. TRADUÇÃO Tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. A substituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluir traduções de algumas ou de todas as Seções Invariantes em adição às versões orignais dessas Seções Invariantes. Você pode incluir uma tradução desta Licença desde que você também in- clua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a 16
  • 18. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF versão original em Inglês desta Licença, a versão original em Inglês prevalecerá. TÉRMINO Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expres- samente especificado sob esta Licença. Qualquer outra tentativa de copiar, modificar, sublicen- ciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob esta Licença. Entretanto, terceiros que tenham recebido cópias, ou direitos de você sob esta Licença não terão suas licenças terminadas, tanto quanto esses terceiros permaneçam em total acordo com esta Licença. REVISÕES FUTURAS DESTA LICENÇA A Free Software Foundation pode publicar novas versões revisadas da Licença de Documen- tação Livre GNU de tempos em tempos. Tais novas versões serão similares em espirito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Veja http://www.gnu.org/copyleft/. A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença "ou qualquer versão posterior"se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licença para seus documentos Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright e licenças logo após a página de título: Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Soft- ware Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da li- cença está inclusa na seção entitulada "Licença de Documentação Livre GNU". Se você não tiver nenhuma Seção Invariante, escreva "sem Seções Invariantes"ao invés de dizer quais são invariantes. Se você não tiver Textos de Capa da Frente, escreva "sem Textos de Capa da Frente"ao invés de "com os Textos de Capa da Frente sendo LISTE"; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos não triviais de código de programas, nós recomenda- mos a publicação desses exemplos em paralelo sob a sua escolha de licença de software livre, 17
  • 19. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF tal como a GNU General Public License, para permitir o seu uso em software livre. 18
  • 20. Parte IV JSP e Servlets 19
  • 21. Capítulo 1 O que é JSP e o que são Servlets JSP (Java Server Pages) e Servlets são tecnologias desenvolvidas pela Sun Microsystems orientadas para criar páginas web com programação em Java que sejam executadas do lado do servidor. JSP é semelhante ao Microsoft Active Server Pages (ASP), porém, por ser baseada na linguagem Java, tem a vantagem da portabilidade de plataforma, podendo ser executado em outros Sistemas Operacionais. Já servlets são, basicamente, classes java instanciadas e executadas junto ao servidor web, atendendo requisições HTTP, como a dos browsers. Em linhas gerais, JSP permite ao desenvolvedor de sites produzir aplicações que permitam o acesso a banco de dados, o acesso a arquivos-texto, a captação de informações a partir de formulários, a captação de informações sobre o visitante e sobre o servidor, o uso de variáveis e loops entre outros. De um modo geral, permite produzir conteúdos dinâmicos que possam ser reutilizados. O curso tem base na distribuição Debian. 20
  • 22. Capítulo 2 Plano de ensino 2.1 Objetivo Capacitar o usuário para o uso autônomo dos recursos do JSP e dos Servlets. 2.2 Público Alvo Em especial usuários do sistema operacional Linux que queiram fazer uso de JSP e dos Servlets. 2.3 Pré-requisitos Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci- mento básico acerca da lógica de programação. Além disso, são necessários conhecimentos em Java e HTML. Recomendamos o curso: “Java Básico” do CDTC. 2.4 Descrição O curso será realizado na modalidade Educação a Distância e utilizará a Plataforma Moodle como ferramenta de aprendizagem. Ele será dividido em tópicos e cada um deles é composto por um conjunto de atividades (lições, fóruns, glossários, questionários e outros) que deverão ser executadas de acordo com as instruções fornecidas. O material didático estará disponível on-line de acordo com as datas pré-estabelecidas em cada tópico. A versão adotada do JDK para uso do JSP é a JDK 5. Caso possua outra versão instalada, poderão ocorrer poucas diferenças. Todo o material está no formato de lições, e estará disponível ao longo do curso. As lições poderão ser acessadas quantas vezes forem necessárias. Aconselhamos a leitura de "Ambien- tação do Moodle", para que você conheça o produto de Ensino a Distância, evitando dificuldades advindas do "desconhecimento"sobre o mesmo. Ao final de cada semana do curso será disponibilizada a prova referente ao módulo estudado anteriormente que também conterá perguntas sobre os textos indicados. Utilize o material de cada semana e os exemplos disponibilizados para se preparar para prova. 21
  • 23. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deve ser disponibilizada no fórum ou enviada por e-mail. Diariamente os monitores darão respostas e esclarecimentos. 2.5 Metodologia O curso está dividido da seguinte maneira: 2.6 Cronograma • Lição 1 - Iniciando em JSP e Servlets; • Lição 2 - Instalações e Configurações; • Lição 3 - Noções de POO e Comandos Java; • Lição 4 - TAGS JSP; • Lição 5 - JSTL e Javabeans; • Lição 6 - Servlets: Criação e Ciclo; • Lição 7 - Servlets: API, Request e Response; • Lição 8 - Usando Cookies e Controlando Sessões; • Lição 9 - Controle de Erros e MVC; • Avaliação de Aprendizagem. As lições contém o conteúdo principal. Elas poderão ser acessadas quantas vezes forem ne- cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada li- ção, pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição seja menor do que 6.0, sugerimos que você faça novamente esta lição. Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições quanto a da avaliação final serão consideradas para a nota final. Todos os módulos ficarão visí- veis para que possam ser consultados durante a avaliação final. Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En- sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma. Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser enviada ao fórum. Diariamente os monitores darão respostas e esclarecimentos. 2.7 Programa O curso de JSP e Servlets oferecerá o seguinte conteúdo: • Introdução; • Instalação; 22
  • 24. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • Noções de Java; • Conteúdo JSP; • Conteúdo Servlets; • Cookies e Controle de Sessões; • JSTL, Erros e MVC. 2.8 Avaliação Toda a avaliação será feita on-line. Aspectos a serem considerados na avaliação: • iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento; • capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados. Instrumentos de avaliação: • participação ativa nas atividades programadas. • avaliação ao final do curso. • o participante fará várias avaliações referentes ao conteúdo do curso. Para a aprovação e obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo com a fórmula abaixo: • Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições. • AF = Avaliações. 2.9 Bibliografia Site official: http://java.sun.com/products/jsp/ Outros: http://www.criarweb.com/artigos/227.php http://www.crieseuwebsite.com/apostilas/detalhes.php?categoria=JSP&arquivo=93 http://www.caelum.com.br http://www.mundooo.com.br/ http://www.javafree.org/javabb/viewtopic.jbb?t=9127 http://arquivos.coinfo.cefetpb.edu.br/~fred/pweb/servlets/slides/04-Servlets.pdf http://www.dpi.ufv.br/~alcione/proginter2001/ApostilaServletJSP.pdf http://www.mhavila.com.br/topicos/java/tomcat_unix.html 23
  • 25. Capítulo 3 Iniciando em JSP e Servlets 3.1 Definições: JSP e Servlets JSP (Java Server Pages) é uma tecnologia utilizada na criação de aplicações para a web. É uma linguagem relativamente nova, já que surgiu por volta do ano 2000 como uma estratégia da Sun MicroSystems para combater linguagens emergentes como o ASP(Active Server Pages), linguagem de autoria da Microsoft, e o PHP (Hypertext PreProcessor). Por ser baseada na lin- guagem Java, tem a vantagem da portabilidade de plataforma, o que permite sua execução em variados sistemas operacionais. Podemos escrever JSP com um editor de texto HTML/XML co- mum, já que as páginas JSP estão compostas de cógido HTML/XML mesclado com etiquetas para programar scripts de servidor em sintaxe Java. O motor das páginas JSP está baseado nos servlets de Java. Os arquivos JSP têm extensão ’.jsp’ , os quais, dentro das tags HTML, contém o código em java a executar no servidor. Antes que os arquivos sejam funcionais, o motor JSP realiza uma fase de tradução dessa página em um servlet, implementado em um arquivo class (Byte codes de Java). 24
  • 26. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Servlets são componentes que disponibilizam ao programador java uma interface para o ser- vidor web, através de uma API. Servlets ampliam a funcionalidade de servidores baseados em requisições/respostas. Uma página criada com a tecnologia JSP, após instalada em um servidor de aplicação compatível com a tecnologia Java EE, é transformada em um Servlet. Para ser executado um servlet necessita de um container Web, isto é, um servidor onde são instaladas servlets para tratar as requisições que o servidor receber. Existem vários containers web, mas um dos mais usados é o Tomcat, por vários motivos entre eles por não ser pago e por ser o container de servlets usado na referência oficial de implementação de JSP. Para tirar um bom proveito de JSP e de Servlets são necessários conhecimentos em HTML e java, já que são as duas bases sobre as quais JSP é moldado. Parte lógica do JSP envolve Java Beans, Objetos JDBC, Enterprise Java Beans ( EJB ) entre outros componentes que interagem com a plataforma Java. Portanto, alertamos aqueles que pretendem desenvolver uma aplicação mais sofisticada que tenham, além de conhecimentos de HTML, que entendam de programação em Java. Para os que ainda não estão familiarizados com o java, recomendamos o curso de “Java Básico” do CDTC. 3.2 Comparação de Java Server Pages com Servlets JSP e Servlets são bem parecidos, já que todo JSP é compilado em forma de Servlet. Os dois são processados do lado do servidor e retornam apenas conteúdo HTML ao cliente. JSPs geram essencialmente conteúdo HTML enquanto os servlets são usados para controle da aplicação, mas o programador pode opcionalmente inverter esses papéis. A principal diferença entre eles é que em JSP escreve-se Java no HTML e em servlets escreve-se HMTL dentro do código java. Sabemos que servlets são classes java que forne- cem serviço especial de ’server-side’. Basicamente, o que acontece é que é mais difícil escrever código HTML em Servlets já que neles são necessárias várias linhas de código de impressão (println) para gerar HTML, o que não acontece em JSPs. 25
  • 27. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 3.3 Aplicações Web Estrutura Usual de APLICAÇÕES WEB Desenvolvidas Usando o Java Aplicações web são aplicações que executam no servidor e que consistem de compontentes como JSP, Servlets, HTML, etc. Uma das principais características de uma aplicação web é seu relacionamento com o ServletContext. Um ServletContext serve basicamente para armazenar informação relativa à aplicação como um todo. Em particular, o ServletContext é usado para: • conter parâmetros de inicialização da aplicação; • armazenar recursos associados à aplicação. Uma conexão de Banco de Dados um exem- plo; • armazenar qualquer atributo da aplicação como objeto; • fornecer acesso à funcionalidade de logging. Cada aplicação tem somente um único ServletContext. Este relacionamento é controlado pelo container de servlet. Na grande maioria dos casos, o desenvolvimento dessas aplicações web que usam o java como padrão procura seguir os passos seguintes: 1 - desenvolvimento e teste dos diversos Servlets, JSPs, necessários ao projeto da aplicação web; 2 - escrita do ’descritor de aplicação’ (Web Application Deployment Descriptor). Geralmente é um arquivo .xml e é usado pelo container ou servidor para a instalação da aplicação. Descreve-se nele as variáveis de ambiente a serem usadas, os componentes e os requisitos de segurança. Tem seu nome usual como ’web.xml’ e é localizado no diretório WEB-INF. Nesse arquivo, pode- mos encontrar informações referentes a: • Parâmetros de Inicialização do ServletContext; • Configuração de Session; • Definições de Servlet/JSP; • Mappings de Servlet/JSP; • Páginas de Erros; • Segurança. Exemplo de ’web.xml’: <web-app> <display-name>NomeAplicacao</display-name> <session-timeout>30</session-timeout> <servlet> <servlet-name>Servlet1</servlet-name> <servlet-class>com.nome.ServletNome1</servlet-class> <load-on-startup>1</load-on-startup> 26
  • 28. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF <init-param> <param-name>name</param-name> <param-value>value</param-value> </init-param> </servlet> </web-app> OBS: A criação de um web.xml será explicada detalhadamente adiante. 3 - compilação de todos os componentes web e das classes referenciadas por eles. Existem algumas ferramentas para esse propósito, como o ’Ant’. O Apache Ant é uma ferramenta escrita em java (está disponível em http://ant.apache.org/) que permite criar scripts para a realização automática de tarefas como a compilação de programas java. Os scripts são definidos em XML; 4 - empacotamento da aplicação web. As aplicações web primeiramente são empacotadas em um arquivo com a extensão ’.war’ (Web application Archive) e são então instaladas em um container ou servidor. Embora esse processo seja opcional para a posterior instalação no contai- ner , ele é recomendado, pois facilita o processo da instalação. Novamente o uso da ferramenta Ant é muito útil para esta fase do desenvolvimento. A ferramenta JAR do JDK também pode criar o WAR file com o seguinte comando: jar cvf nome.war Usando o Elipse, por exemplo, basta usar SeuProjeto / Exportar / WAR file. OBS: JAR ou Java ARchive é um arquivo compactado usado para distribuir um conjunto de classes Java. É usado para armazenar classes compiladas e metadados associados que podem constituir um programa.Arquivos jar podem ser criados e extraídos usando o utilitário "jar"da JDK; 5 - instalação no container ou servidor. Já empacotada em ’.war’, somente é necessário copiar o arquivo para o diretório ’webapps’ do Tomcat ou o diretório ’autodeploy’ do domínio desejado no Servidor de Aplicações da Sun Microsystems. O servidor, então, fará a instalação automática; 6 - abrir o browser e apontar para a URL da aplicação, que normalmente é algo como: http://localhost:8080/dir_da_aplicação. A estrutura de diretórios de uma aplicação web é normalmente assim: 27
  • 29. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF DirRaiz/ diretório raíz da aplicação web DirRaiz/index.html documento HTML DirRaiz/index.jsp documento JSP DirRaiz/imagens diretório onde se localizam as imagens da página DirRaiz/META-INF/ diretório opcional, usado para se definir extensões e outras informações relacionadas aos dados do pacote. DirRaiz/WEB-INF/ diretório que contém os recursos relacionados à aplicação como o web aplication deployment. DirRaiz/WEB-INF/classes diretório que contém Servlets, JavaBens e demais classes Java,todos compilados. DirRaiz/WEB-INF/lib diretório que contém JAR files que a aplicação web tem dependência, como um JAR de drive JDBC. DirRaiz/WEB-INF/web.xml descritor de instalação ’web.xml’. 28
  • 30. Capítulo 4 Instalações e Configurações 4.1 Instalações Necessárias A primeira coisa a se fazer é instalar um servidor (container) JSP. Existem vários contai- ners, dentre os quais podemos citar: JBoss, Weblogic e WebSphere. Neste curso escolhemos e ensinaremos a configurar o Tomcat, do projeto Jakarta (http://tomcat.apache.org). Como ele é inteiramente escrito em Java, necessita de uma Java Virtual Machine (JVM) - Máquina Virtual Java - para ser executado. Ele é oficialmente endossado pela Sun como a Implementação de Referência (RI) para as tecnologias Java Servlet e JavaServer Pages (JSP). O Tomcat é um servidor de aplicações Java para web. É distribuído como software livre e desenvolvido como código aberto dentro do conceituado projeto Apache Jakarta. O Tomcat é robusto e eficiente o suficiente para ser utilizado mesmo em um ambiente de produção. Para a instalação do Tomcat em ambiente de desenvolvimento - onde serão desenvolvidas classes Java em geral, incluindo Servlets e páginas JSP -, deve-se utilizar o JDK (Java Develop- ment Kit) completo. Se você não tiver ainda o JDK instalado, faça o download através do site da Empresa Sun. (http://java.sun.com). 4.2 Estrutura de Diretórios do Tomcat É importante que saibamos como é a estrutura de diretórios do Tomcat pois isto ajuda a ter maior controle sobre as aplicações, além de nos fazer entender melhor containers semelhantes a ele. A estrutura básica é a seguinte: 29
  • 31. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF /bin Diretório que contém os binários executáveis. No caso do Linux é util pois contém os arquivos ’.sh’ para a execução do servidor. /common Diretório que contém classes disponíveis tanto para funcionamento do servidor quanto às aplicações web instaladas. Geralmente contém os diretórios /classe e /lib nos quais se localizam classes disponíveis não só para o Tomcat quanto para as aplicações rodando no servidor. Classes compiladas devem ser colocadas no ’/classes’ e arquivos JAR devem ser colocados no ’/lib’. /conf Diretório que contém os arquivos de configuração. Os mais importantes são ’server.xml’ - arquivo de configuração principal do Tomcat, que é usado para configurar logs, conexões com outros servidores, a porta e host na qual o servidor está sendo executado e o local dos arquivos de cada aplicação web - ’tomcat-users.xml’ - base de dados padrão para a autenticação de usuários. - e o ’web.xml’ que já foi citado. /logs Diretório que contém os arquivos de logs. /server Diretório que contém novamente subdiretórios : classes, lib e webapps. Porém, os desta pasta não são acessíveis a outras aplicações. Webapps é o local das aplicações de gerenciamento do Tomcat: admin e manager. /shared Diretório que contém novamente os dois subdiretórios: classes e lib com a diferença que classes nestes subdiretórios estarão disponíveis a todas as aplicações web, exceto ao Tomcat. /webapps Diretório para a instalação de aplicações web no Tomcat. Sua estrutura já foi explicada na Lição anterior. /work Diretório onde o Tomcat armazena o código da página JSP depois que este é convertido em um Servlet. Instalação A instalação do Tomcat é muito simples e consiste, essencialmente, em descompactar o pa- cote de arquivos no local desejado. Os comandos de instalação procuram utilizar máscaras de substituição ? e * nos nomes de arquivo para se manterem genéricos em relação à versão espe- cífica do Tomcat, já que os procedimentos são idênticos para toda versão. Os procedimentos de instalação no curso pressupõem como convenção o caminho /opt/ como diretório base para a instalação. Os demais exemplos citados neste tutorial se referem a este ca- minho. Em algumas plataformas, pode-se preferir usar /usr/local/ ou mesmo outro local persona- lizado, como por exemplo /web. Como não há padrão rígido para esta organização, se você optar por outra localização, basta lembrar de alterar as referências ao caminho de instalação conforme 30
  • 32. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF necessário. No nosso caso, os seguintes procedimentos foram tomados: 1 - criação de um diretório novo chamado ’install’ em /usr/local/ $ cd /opt $ mkdir install 2 - mover o arquivo de instalação ( no caso o ’apache-tomcat.?.?.*.tar.gz’ ou ’apache-tomcat.?.?.*.zip’ para a pasta /opt/install. $ mv apache-tomcat.?.?.*.tar.gz /opt/install 3 - o comando script cria um arquivo de registro tomcat-install.log com toda a saída apresen- tada na tela durante a instalação (até que seja finalizado com o comando exit): $ script /opt/install/tomcat-install.log OBS.: Se precisar conferir depois em detalhes o que aconteceu durante a instalação, em busca de algum problema consulte o arquivo install/tomcat-install.log gerado. 4 - o GNU tar tem a opção z que já descompacta o formato gzip. As outras opções xvf são respectivamente para extrair, exibir mais informações e especificar o nome do arquivo: $ tar -xzvf /opt/install/apache-tomcat-?.?.*.tar.gz * Se for usado o pacote ZIP, o comando passa a ser: $ unzip /opt/install/apache-tomcat-?.?.*.zip 5 - recomendável também criar um link simbólico sem a versão, para facilitar a referência em scripts administrativos independentes da versão atual: $ ln -s apache-tomcat-?.?.?? tomcat 6 - apenas se tiver sido usado o pacote ZIP, é necessário este passo adicional: verificar e atribuir permissão de execução aos scripts do Tomcat: $ cd tomcat/bin $ ls -l *.sh $ chmod +x *.sh $ cd ../.. 7 - como root, defina as variáveis de ambiente JAVA_HOME e CATALINA_HOME, para apon- tar o diretório principal da instalação do Java SDK e do Tomcat, respectivamente: - entre no arquivo .bashrc com algum editor de texto: 31
  • 33. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF $ vim /home/[nome_de_usuario]/.bashrc 8 - adicione as linhas abaixo no fim do arquivo ’.bashrc’ . Onde citamos ?jdk1.5.0?, trata-se da versão do Java já instalado na máquina. Novamente adapte o guia à sua versão do JDK: # java home and path JAVA_HOME=/[caminho_do_diretorio_do_java]/jdk1.5.0; export JAVA_HOME export PATH=$PATH:/[caminho_do_diretorio_do_java/jdk1.5.0/bin/ # catalina home CATALINA_HOME=/opt/install/[diretório_do_tomcat]; export JAVA_HOME - Salve suas alterações e saia do diretório root com o comando: $ exit 11 - execute o script desejado para iniciar e parar o tomcat: Iniciar: $ /[diretório_do_tomcat]/bin/startup.sh ou $ /[diretório_do_tomcat]/bin/catalina.sh start Parar: $ /[diretório_do_tomcat]/bin/shutdown.sh ou $ /[diretório_do_tomcat]/bin/catalina.sh stop 12 - para testar se o Tomcat está rodando corretamente após iniciado(startup.sh), abra o browser e vá para o endereço: http://localhost:8080/ 32
  • 34. Capítulo 5 Fundamentos da Orientação a Objeto Apesar de recomendar o prévio conhecimento de java para o curso de JSP e Servlets, é ne- cessário relembrarmos os conceitos fundamentais da programação java e suas derivadas, con- seqüentemente o JSP, que são conceitos da orientação a objeto (comumente conhecida como Programação Orientada a Objeto ou POO). São, apesar de fundamentais, conceitos amplos que requerem prática para que possam ser plenamente compreendidos. 5.1 Classes, Objetos e Métodos Classe é um aglomerado de métodos - funções e procedimentos com os quais acessamos e usamos os objetos, realizando tarefas específicas -, e de variáveis, que definem o comportamento de um objeto que poderá vir a existir se a classe for solicitada para tal. Um objeto é uma entidade do mundo real que possui uma identidade. Podem ser entidades concretas ou conceituais. Podemos citar como exemplos de objetos: uma conta corrente, clientes, agências, arquivos no computador, bicicletas, lojas etc. Em termos de programação, pode-se definir objeto como o resultado da ação construtora de uma classe. Todo objeto é “fabricado” em uma classe, sendo por isso denominado instância da classe. Além disso, tem outras características: a estrutura de objetos de uma certa classe é descrita por meio de atributos; objetos de uma mesma classe têm um mesmo comportamento que são representados pelo conjunto de operações que podem ser executadas sobre eles. O método de construção de objetos com a mesma "genética"da classe é chamado de método construtor. 5.2 Conceitos Importantes Alguns outros conceitos importantes: Encapsulamento: imprescindível ao entendimento de POO e ao aprendizado java, já que é indispensável para contribuir com a diminuição dos malefícios causados pela interferência externa sobre os dados. É uma técnica que consiste em ocultar no objeto algumas de suas variáveis (ou 33
  • 35. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF campos) e alguns de seus métodos. É importantíssimo na medida em que deixa o programa robusto, impedindo o acesso a certas partes de seu funcionamento. Herança: outro conceito importante na POO é o conceito de herança, que significa que toda classe definida como uma subclasse de outra receberá automaticamente todo o conteúdo da classe-mãe. Tomamos como exemplo uma classe ’Pessoa’, onde possui como propriedades: nome, endereço, telefone, cpf e etc. Incluímos a classe ’Pessoa’ em uma classe ’Funcionário’, dessa forma aproveitamos todas as propriedades de ’Pessoa’ e incluímos as propriedades espe- cíficas de ’Funcionário’, como: data de admissão, cargo, salário e etc. Polimorfismo: um conceito mais difícil de ser entendido, porém não menos importante é o conceito de polimorfismo. Essa dificuldade decorre da amplitude desse conceito e de significados em POO. Suas variadas definições são: .overloading: designa um tipo de polimorfismo em que podemos utilizar um nome igual para designar métodos diferentes que terão lista de parâmetros também diferentes. Isto tanto em número de parâmetros quanto em tipo; .os objetos de uma classe-mãe podem ser redefinidos por objetos das suas sub-classes; .variáveis podem assumir tipos diferentes ao longo da execução. Visibilidade: através dos indicadores ’public’ e ’private’ algumas classes e métodos podem ser visíveis ou não. Os métodos e propriedades públicas serão a interface do objeto com o usuário. Abstração: em termos de desenvolvimento, abstração significa concentrar-se no que um objeto é e faz antes de se decidir como ele será implementado. Significa representar as caracte- rísticas essenciais de um tipo de dado sem incluir o mecanismo que concretiza a funcionalidade. A abstração é fundamental para conseguir uma boa modularização, que é uma técnica que tem a estratégia de ’dividir para conquistar’, ou seja, resolver um grande problema dividindo-o em vários problemas menores. 5.3 Variáveis Variáveis de Classe: são variáveis declaradas no escopo de uma classe, mas de tal modo que não precisam de objetos para serem referenciadas, bastando a definição da classe na qual são declaradas. Variáveis de Instância: variáveis declaradas no escopo de uma classe e definem os atributos que cada objeto da classe possui. Variáveis Paramétricas: declaradas como parâmetros de métodos, construtores e manipula- dores de exceções. 34
  • 36. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.4 Modificadores No caso da linguagem java, existem uma série de modificadores de métodos, classes e atri- butos. Mostraremos os principais e mais usados : • public: permite acesso total em uma classe, em um método ou sobre um atributo; • private: não é aplicável a classes, mas é acessado pela classe em métodos e atributos; • protected: modificador que não é aplicável a classes, mas é acessado pelo pacote em métodos e atributos; • final: numa classe indica que é sem herança, não pode ser sobrescrito em um método e indica que um atributo é constante; • static: não aplicável a classes, e dá acesso a métodos e atributos somente referenciando a classe; • native: aplicável somente a métodos para indicar código nativo; • synchonized: aplicável somente a métodos para indicar não acesso simultâneo. Exemplo de uso dos modificadores: public static void FazConta(); This e Super Palavras-chave aplicadas a métodos não estáticos, ou seja, de instância. This é utilizada para referenciar variáveis ou métodos da instância atual e o super é utilizada para associar a métodos da classe ’mãe’. 5.5 Pacotes (Packages): Conjunto organizado de classes e demais arquivos que estão relacionados através de um pro- pósito comum ou atuam com dependências entre si. São muito úteis e necessários na medida em que são usados para localizar o código da classe de forma eficiente. Para utilizá-los, simplismente precedemos diretivas importi (importar) ao nome e caminho do pacote dessa maneira: import nomedopacote.nomedosubpacote.NomeDaClasse; Exemplo: import java.io.IOException; OBS.: se necessário o uso de mais de uma classe do mesmo pacote podemos referenciar com o uso de ’*’ dessa maneira: import java.lang.*; 35
  • 37. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.6 Uma Página em JSP Já dissemos que uma página escrita em JSP é baseada no HTML padrão. A maior parte do código de uma página JSP consiste em template text. O template text é similar ao HTML e é passado ao browser do cliente por um servlet criado para manusear a página. Logo, para criar uma aplicação JSP podemos incluir tags JSP em uma página html previamente criada (normal- mente começam com ’<%’ e terminam com ’%>’) e salvar o arquivo com extensão ’.jsp’ ao invés de ’.html’. Basta agora abrir a página em um browser qualquer. É certo que o resultado nesse caso será o mesmo que em uma página html, mas levará mais tempo para abri-la em JSP. Mas so- mente da primeira vez. Se tentar carregá-la novamente, carregará normalmente. Isso acontece porque o código da página, numa primeira vez, é transformado em um arquivo Java, compilado e executado. Logo, a não ser que o código seja alterado normalmente, a página será carregada imediatamente numa segunda chamada. A partir dessa parte faremos um rápido resumo para relembrar a sintaxe dos comandos con- dicionais e loops do java. 5.7 Condicionais As condicionais são usadas quando o programador precisa que algum código seja executado, se uma condição for verdadeira, ou outra seja executada se a primeira condição for falsa, e assim por diante. Comandos IF/ELSE Um bloco if é formado primeiramente com o próprio ’if’ e seguido por um teste booleano e uma instrução ou um bloco de instruções que precisam ser executadas caso o teste booleano seja verdadeiro. O ’else’ pode ser usado caso o programador queira que o programa execute o bloco de instruções que o segue, caso o teste booleano do ’if’ não seja verdadeiro. Exemplo: <html> <body> <% int valor = -10; if(valor < 0){ out.println("Valor absoluto de" + valor + " = " + -valor); } else{ out.println("Valor absoluto de" + valor + " = " + valor); } %> </body> </html> 36
  • 38. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Comando SWITCH O comando switch é usado em situações em que apenas uma entre as condições sendo testadas assume o valor true num mesmo momento. Se a expressão tem valor coincidente no switch, a instrução após ele é executada. Caso contrário, a instrução em default é executada. A sintaxe é a seguinte: switch(expressão) { case (constante 1): (comando 1) break; case (constante 2): (comando 2) break; . . . case (constante n): (comando n) break; default: (comando) } Exemplo: <html> <body> <% int a = 1; char op = '+'; switch(a) { case 1: out.println("case 1: op="+op); break; case 2: out.println("case 2: op="+op); break; case 3: out.println("case 3"+op); break; default: out.println("default: op nao esta no limite 1..3"); } %> </body> </html> 37
  • 39. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 5.8 Repetição(loop) Tratatemos nessa seção sobre as rotinas de repetição de java, que logicamente podem ser usadas em JSP. FOR • repete uma instrução determinado número de vezes até que alguma condição seja satis- feita; • forma básica: for(inicialização;condição;incremento){ código } Exemplo: <html> <body> <% for(int i=0;i<10; i++){ out.println("Dessa vez, i = " + i + "<br />"); } %> </body> </html> WHILE • repete uma instrução até que alguma condição seja verdadeira. Primeiro testa a condição e depois entra no loop; • forma básica: while(condição){ código } Exemplo: <html> <body> <% int i = 0; while(i < 10){ out.println("Dessa vez, i = " + i + "<br />"); i++; } %> </body> </html> 38
  • 40. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF DO...WHILE • é parecido com um while, só que repete uma instrução até que alguma condição seja falsa. Primeiro entra no loop e depois checa a condição; • forma básica: do{ código }while(condição); Exemplo: <html> <body> <% int i = 0; do { %> <font size=<%=i%>> Olá Mundo Fonte: <%= i %> </font><br> <% i++; }while(i<=5); %> </body> </html> Obs.: Se por acaso for necessário que o programa saia da rotina de repetição antes do seu término usual, podemos usar a palavra-chave break, que para imediatamente a execução do loop e continua no comando seguinte a ele. Já se o programador desejar parar apenas a execução de uma interação e continuar o loop na seguinte, ele pode usar a palavra-chave continue. 39
  • 41. Capítulo 6 TAGS JSP 6.1 TAGS - Expressões, Scriptlets e Declarações Existem 5(cinco) tipos diferenciados de tags em JSP. São elas: Expressões, Scriptlets, Decla- rações, Diretivas, e Comentários. Expressões As expressões são trechos avaliados (em tempo de execução, quando a página é requisitada pelo browser), convertidas em String e colocadas na página enviada. Têm forma geral: <%= expressão %> Exemplos de Expressões: <%= request.getMethod() %> <%= new java.util.date() %> <%= x*y*z %> <%= Math.sqrt(49) %> Obs.: As expressões não aceitam ponto-e-vírgula. Scriptlets Scriptlets é como são ostrechos de código JSP dentro de páginas HTML. São úteis quando não é necessário mais de um comando Java ou quando o resultado da computação não é para ser colocado na página de resposta. <% Código java %> Exemplo de Scriptlet: <html> <body> <% out.println( "Validando a data" ); java.util.Date date = new java.util.Date(); %> 40
  • 42. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Hello! The time is now: <% out.println(String.valueOf(date)); %> </body> </html> Obs.: • 1. Todo código HTML estático antes e após um scriptlet é transformado em comandos de saída (out). Assim, não é necessário abranger os códigos estáticos, além do que blocos de controle abertos afetam o código HTML envolvido por scriptlets. Exemplo: Inserir Numero <% if (Math.random() < .4) { %> Número correto! <% } else { %> Tente novamente <% } %> que produz: out.println("Inserir Numero") if (Math.random() < .4) { out.println("Número Correto!") } else { out.println("Tente Novamente") } • 2. Scriptlets são considerados uma péssima prática de programação pois deixam o código sujo dificultando a legibilidade e possibilitam a execução de tarefas que não deveriam ser efetuadas na camada de aprensentação, como por exemplo, acessar o banco de dados, executar regras de negócio, modificar o fluxo de navegação e etc. • 3 Quando se está usando o padrão MVC (melhor explicado adiante), deve-se sempre pres- tar atenção na regra que diz que a camada View(JSP) , deve ser usada apenas para apre- sentação dos dados da aplicação. • 4. Scriptlets exigem ponto-e-vírgula ao final de sentenças. Declarações Declarações em JSP são alocações de espaços na memória através de definições das variá- veis e métodos que serão inseridos no corpo do servlet, e serão então referenciados através de outros elementos de criação de scriptlets. Por não gerarem saída nenhuma, as declarações são usadas em combinações com expressões e scriptlets. Em JSP são feitas dessa maneira: <%! Código java %> 41
  • 43. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Deve-se sempre declarar os métodos e as variáveis antes de usá-los. O escopo é geralmente o arquivo JSP, mas pode ser expandido se houver outros arquivos relacionados com uma diretiva include. Neste caso se expandirá para o cover do arquivo incluído. Exemplos de declarações: <%! int c = 30; %> <%! String [] pessoas = {?Pedro?,?Jose?,?Maria?}; %> <%! private int num=0; %> <%! Metodo a = new Metodo(5.0); %> <%! double d,e; int f ;%> Declaradas dessa maneira, são variáveis de instância. Já as declaradas dentro de scriptlets são variáveis locais ao método _jspService. Obs.: Cada declaração deve ser separada por ponto-e-vírgula ou finalizada. 6.2 TAGS - Diretivas e Comentários - e Ações Diretivas Diretivas são mensagens incluídas no html que passam informações para o JSP container. Não enviam nada para a página, mas são importantes pois informam o servidor web coisas como: a linguagem usada no documento, que no caso é o java, importa os pacotes necessários ao uso, etc. 1. Diretiva PAGE A diretiva page possui onze atributos opcionais que fornecem processamento de informações especiais ao motor JSP. Seu formato padrão é: <%@ Diretiva atributo1="valor1" atributo2="valor2" ... atributoN="valorN" %> Exemplo de diretiva page: <%@ page language="java" import="java.util.*" %> Apesar de serem opcionais por já possuírem um valor default, aqui listaremos os atributos mais usados na diretiva page: • import - especifica o pacote a ser importado. Único atributo que pode ser usado mais de uma vez. Ex: <%@ page import="java.util.*" %> • isThreadSafe - indica se o servlet será executado no modo SingleThread. O valor default é true. Ex: <%@ page isThreadSafe="true|false" %> 42
  • 44. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF • session - indica se as informações da sessão http estarão disponíveis ou não para a página. O valor default é true. Ex: <%@ page session="true|false" %> • buffer - especifica o tamanho do buffer do JSPWriter out. o Default é definido pelo servidor. Ex: <%@ page buffer="sizekb|none" %> • autoFlush - indica se o buffer deve ser esvaziado quando cheio. O default é true. Ex: <%@ page autoFlush="true|false" %> • ContentType - indica o tipo MIME da página de resposta. Deve ser colocado no início do arquivo. Ex: <%@ page ContentType="text/html;charset=ISO-8859-1" %> • extends - define se a subclasse do servlet deve ser gerada. O default é javax.servlet.HttpServlet. Ex: <%@ page extends="package.class" %> • info - informação sobre o servlet que pode ser recuperada pelo método Servlet.getServletInfo(). o defalut é uma string vazia. Ex: <%@ page info="texto" %> • errorPage - mostra a página a ser exibida no caso de algum erro não tratado no código. Ex: <%@ page errorPage="url" %> • isErrorPage - indica se a página é de erro. Logicamente o default é false. Ex: <%@ page isErrorPage="true|false" %> • language - especifica a linguagem usada. No caso o java. Ex: <%@ page language="java" %> 43
  • 45. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 2. Diretiva INCLUDE A diretiva include é usada, por exemplo, quando se quer inserir um texto de outro arquivo no local indicado no arquivo JSP atual. Essa diretiva divide conteúdos em blocos de construção separados. É bom saber que ela trata um arquivo incluído como estático. Exemplo de diretiva include: <%@ include file="arquivo.txt" %> 3. Diretiva TAGLIB A diretiva Taglib é uma coleção de tags customizadas que podem ser usadas pela página. Tags customizadas permitem aos desenvolvedores esconder complexos códigos ’server-side’dos web-designers. Possui dois atributos: • uri : Uniform Resource Identifier (URI) que identifica o arquivo TLD que descreve as tags associadas com o prefixo dado. Este atributo pode ser definido como uma URL: <%@ taglib uri='http://java.sun.com/jstl/core' prefix='c' %> ou como um caminho: <%@ taglib uri="WEB-INF/HelloWorld.tld" prefix="t" %> • prefix : é o prefixo usado para identificar a biblioteca. No caso anterior: <t:reservar /> OBS.: Os prefixos: jsp, jspx, java, javax, servlet, sun, e sunw não podem ser usados, pois são reservados pela Sun Microsystems. Exemplo de diretiva Taglib com sua uri e prefixo: <%@ taglib uri = ?tag library URI? prefix = ?tag Prefix? %> Comentários Um primeiro tipo de comentário é o comentário HTML: independente de ser uma página JSP (ou seja, mesmo sendo uma página HTML estática), pode-se utilizá-lo para incluir um texto que não aparecerá diretamente para o usuário, a não ser que ele visualize o código-fonte da página. A sintaxe de um comentário HTML é a seguinte: <!--Comentários--> Ao contrário do anterior, comentários JSP não são visíveis ao usuário nem mesmo se ele visualizar o código-fonte da página. <%--Comentários--%> 44
  • 46. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Ações Ações permitem que acrescentemos funcionalidades ao JSP através da interações JavaBe- ans. São tags que fornecem um mecanismo simplificado de acesso a objetos Java em páginas JSP. Disponibilizam ainda comando para redirecionamento do JSP para outro servlet ou JSP. Ações Padrão são ações pré-definidas pelo container JSP. Exemplo: <jsp:forward page=?/NomeDoDiretório/NomeDoArquivo.jsp? /> Esse comando redireciona a página passando o request. 45
  • 47. Capítulo 7 JSTL e Javabeans 7.1 Noções JavaBeans e EJB JavaBeans Segundo a especificação da Sun Microsystems os JavaBeans são componentes reutilizáveis de software que podem ser manipulados visualmente com a ajuda de uma ferramenta de de- senvolvimento. De uma maneira direta, Javabeans são classes que possuem o construtor sem argumentos e métodos de acesso do tipo get e set. EJB A pergunta que não quer se calar pode ser respondida muito facilmente uma vez que a maior confusão feita aí fora é entre Javabeans e EJB. Enterprise Java Beans é uma arquitetura de componentes multi-plataforma para o desenvolvi- mento de aplicações Java muiti-tier, distribuídas, escaláveis e orientadas a objetos. O objetivo da arquitetura EJB é facilitar o trabalho do desenvolvedor para que ele não tenha que se preocupar com aspectos de infra-estrutura. Podemos usar beans por diversos motivos, normalmente as classes de modelo da nossa aplicação costumam ser java beans. Existem três tipos de EJBs: • 1. Session Bean - é o tipo mais simples de EJB, pode ter estado (stateful) ou não ter (stateless); • 2. Entity Bean - mapeiam tabelas de um banco de dados relacional através de um arquivo de mapeamento. Na prática cada objeto entity representa uma linha de uma tabela. Existe uma linguagem de query específica para buscar entitys chamada EQL; • 3. MDB - são consumidores assincronos de mensagens de filas / tópicos JMS. Na teoria, o uso de EJBs tornaria mais fácil escrever aplicações empresariais como compo- nentes provendo um conjunto de serviços automáticos para suportar aplicações transacionais, o que não acontece na prática. 46
  • 48. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF 7.2 JSTL Em lições anteriores mostramos alguns problemas como: a dificuldade de construir páginas JSPs bem organizadas; web designers normalmente não programam em Java, o que causa difi- culdades na interação entre desenvolvedores e web designers. Seguindo a idéia de melhorar o código java que precisa de uma maneira ou de outra ser escrito na página jsp, a Sun sugeriu o uso da Java Server Pages Standard Tag Library: a JSTL. A JSTL é a API que encapsulou em tags simples toda a funcionalidade que diversas páginas web precisam, como controle de laços (fors), controle de fluxo do tipo if/else, manipulação de dados xml e internacionalização de sua aplicação. Consiste em uma coleção de bibliotecas, tendo cada uma um propósito bem definido, que permitem escrever páginas JSPs sem código Java, aumentando assim a legibilidade do código e a interação entre desenvolvedores e web designers. Existe também uma outra parte famosa da JSTL, aquela que acessa banco de dados e per- mite escrever códigos SQL na nossa página, mas às vezes o designer não conhece java, muito menos SQL. O uso de tal parte da JSTL é desencorajado. A JSTL foi a forma encontrada de padronizar o trabalho de milhares de programadores de páginas JSP. Muitas páginas JSP no mundo ainda possuem muitos pedaços de scriplets espalhados dentro dela mesma. Recomendamos a todos os nossos alunos que optarem pelo jsp como camada de visualização que utilizem a jstl e outras bibliotecas de tag para evitar o código incompreensível que pode ser gerado com scriplets. O código das scriplets mais confundem do que ajudam, tornando a manutenção da página jsp cada vez mais custosa para o programador e para a empresa. Para instalar a implementação mais famosa da JSTL basta baixar a mesma no site do apache: http://www.apache.org Bibliotecas JSTL padrão Biblioteca Prefixo URI Tipos de uso Exemplo JSTL core c */core .acesso e modificação <c:forEach> de dados em memória; .comandos condicionais e loops; processamento x */xml .Parsing** de documentos <x:forEach> de xml .impressão de partes de documentos XML; .tomada de decisão base- ado no conteúdo do XML; internacionalização fmt */fmt .Leitura e impressão <fmt:formatDate> e formatação de números e datas .ajuda a aplicação a funcionar em mais de uma língua; acesso a banco de sql */sql .Leitura e escrita em <sql:query> dados via SQL banco de dados; * http://java.sun.com/jstl **Parsing = Leitura 47
  • 49. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Instalando: 1. Faça o download em : http://www.apache.org/dist/jakarta/taglibs/standard/ 2. Descompacte o arquivo e copie: a) /jakarta-taglibs-standard-1.*/tld/* para WEB-INF b) /jakarta-taglibs-standard-1.*/lib/* para WEB-INF/lib 3. Adicione essas informações no web.xml: <taglib> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri> <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri> <taglib-location>/WEB-INF/c-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri> <taglib-location>/WEB-INF/sql-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> 48
  • 50. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF <taglib> <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri> <taglib-location>/WEB-INF/x-rt.tld</taglib-location> </taglib> 4. Por fim, na página JSP, declare os tipos que for utilizar: <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> Explicando a sintaxe Cada tag faz parte uma biblioteca JSTL e realiza um determinado tipo de processamento (equivalente a código Java dentro de JSP). Uma página JSTL pode utilizar várias bibliotecas JSTLs. Na primeira linha, temos a seguinte tag: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> Essa declaração informa ao compilador que é utilizada uma biblioteca cujas tags serão reco- nhecidos pelo prefixo "fmt", de modo a evitar possíveis conflitos com tags de mesmo nome de outras bibliotecas. A biblioteca de tags é identificada pelo atributo uri. Veja: Exemplo de página JSTL: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html> <body bgcolor="#FF0000"> <jsp:useBean id="now" class="java.util.Date"/><br> Short Version: <fmt:formatDate value="${now}" /> Long Version: <fmt:formatDate value="${now}" dateStyle="full"/> </body> </html> A tag padrão <jsp:useBean> é utilizada para instanciar um objeto java.util.Date (inicializado por padrão com a data e hora atuais do sistema). A variável now, criada pelo tag <jsp:useBean>, é depois referenciada dentro do atributo value dos tags <fmt:formatDate>, que aparece duas vezes na página. Observe que o atributo dateStyle do tag <fmt:formatDate> define se será utilizado um formato resumido da data ou um formato longo. O exemplo apresenta a data atual em dois formatos: um curto e outro longo. No caso o resultado da hora das versões: Short Version: 24/05/2007 Long Version: Quinta-Feira, 24 de Maio de 2007 Observe que não existe nenhum código Java. 49
  • 51. Capítulo 8 Servlets: Criação e Ciclo 8.1 O que são Servlets? No começo, a web foi basicamente utilizada para disponibilizar conteúdo estático. Da neces- sidade de gerar conteúdo dinâmico surgiram primeiro os programas de CGI (Common Gateway Interface). No entanto, a primeira tecnologia java que tinha a finalidade de oferecer conteúdo dinâmico foi "Servlet". Servlets são programas java que executam em associação com servidores web através do modelo ’request/response’, ou seja, lidando com características típicas do protocolo HTTP, como os métodos GET, POST, com os Cookies etc. Servlets não possuem interface gráfica e trabalham não só com servidores web mas com vários tipos de servidores, uma vez que sua API não contém explicitamente especificações ao ambiente do servidor. Além disso, são carregadas apenas uma vez e, por serem multi-thread, podem atender a mais de uma solicitação de uma só vez. Esta peculiaridade que a torna mais rápida que um programa CGI comum. Exemplo de arquitetura de um servlet: 50
  • 52. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF OBS.: Thread é uma forma de um processo dividir-se em mais de uma tarefa que podem ser executadas simultaneamente. Uma thread permite que o usuário de programa use uma funcio- nalidade do ambiente enquanto outras threads realizam outros cálculos e operações. O servidor interage com o servlet através de uma interface padrão, que é: Interface javax.servlet.Servlet. Ela define os métodos init, service e destroy, que são responsáveis pelo ciclo de vida de um servlet. O comportamento das servlets que veremos adiante é definido na classe HttpServlet do pacote javax.servlet. Eles se aplicam às servlets que trabalham através do protocolo Http. 8.2 Criar o primeiro Servlet Depois da instalação e configuração do Tomcat seguimos basicamente seis etapas para es- crever o seu servlet a executá-lo. 51
  • 53. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF Primeiro: Crie um diretório chamado teste no diretório webapps do Tomcat. É importante o nome do diretório, pois ele irá aparecer na URL do browser. Crie também um diretório chamado WEB-INF dentro do teste, e dentro de WEB-INF crie o diretório classes. Segundo: Preparamos então o código-fonte e salvamos no diretório classes do contexto.Preparamos então o código-fonte e salvamos no diretório classes do contexto (arquivo deve ter o mesmo nome da classe, da maneira “java” de ser). ___________________________________________________________________________________ import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletTeste extends HttpServlet { private PrintWriter out; public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ response.setContentType("text/html"); saida = response.getWriter(); saida.println("<HTML>"); saida.println( "<HEAD>"); saida.println( "<TITLE> Teste</TITLE>"); saida.println( "<BODY>"); saida.println( "Primeiro Servlet."); saida.println( "</BODY>"); saida.println("</HTML>"); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{ doGet(request, response); } } ___________________________________________________________________________________ Terceiro: Compilamos então o código-fonte anterior. Exemplo: $ javac -classpath /opt/install/apache-tomcat-6.0.10/lib/servlet-api.jar:. -d classes ServletTeste.java , onde 52
  • 54. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF -classpath <pasta>:<pasta> - define os diretórios que serão usados como classpath () -d <pasta> - define o diretório para onde vai o arquivo compilado ( .class). Quarto: Criamos o ’web.xml’ e o colocamos no diretório /WEB-INF do contexto. A criação do básico do web.xml é feita da seguinte maneira (a explicação deste primeiro web.xml é mais superficial. Um arquivo web.xml mais prático vai ser criado mais pra frente): ___________________________________________________________________________________ <?xml version="1.0" encoding="ISO-8859-1"?> <!-- |1|> <!DOCTYPE web-app <!-- |2|> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <!-- |3|> <display-name>Minha Aplicacao Web</display-name> <!-- |4|> <description> <!-- |5|> Esta é a versão XX de uma aplicação web que faz uso de servlet e jsp e serve para automatizar tal coisa. </description> <context-param> <!-- |6|> <param-name>webmaster</param-name> <!-- |7|> <param-value>meuendereco@minhaempresa.com</param-value> <!-- |8|> <description> Endereco de email do administrador para quem questoes e comentarios devem ser enviados. </description> </context-param> <servlet> <!-- |9|> <servlet-name>meuServlet</servlet-name> <!-- |10|> <description> Servlet usado para blablabla... </description> <servlet-class>com.meu.pacote.NomedoServlet</servlet-class> <!-- |11|> <init-param> <!-- |12|> <param-name>listaOrdens</param-name> <param-value>com.minhaempresa.minhasAcoes.ListaOrdensAcoes</param-value> </init-param> <load-on-startup>5</load-on-startup> <!-- |13|> </servlet> <servlet-mapping> <!-- |14|> <servlet-name>meuServlet</servlet-name> <url-pattern>/meuServlet</url-pattern> </servlet-mapping> 53
  • 55. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF <session-config> <!-- |15|> <session-timeout>30</session-timeout> </session-config> <welcome-file-list> <!-- |16|> <welcome-file>index.jsp</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> </welcome-file-list> </web-app> ___________________________________________________________________________________ Explicações gerais do web.xml: |1| - Esta é a DTD (Document Type Definition) para os deployments descriptors da versão da API Servlet. Os deployments descriptors também devem incluir um DOCTYPE |2|. |3| - A partir daqui começam as descrições gerais da aplicação. A tag web-app é a raiz dos deployment descriptor para as aplicações web. Nela, as tags devem obrigatoriamente estar organizadas na seguinte ordem imposta pela DTD inclusa acima: web-app <(icon?, display-name?, description?, distributable?, context-param*, filter*, filter-mapping*, listener*, servlet*, servlet-mapping*, session-config?, mime-mapping*, welcome-file-list?, error-page*, taglib*, resource-env-ref*, resource-ref*, security-constraint*, login-config?, security-role*, env-entry*, ejb-ref*, ejb-local-ref*)> Onde uma "?"indica que a tag pode aparecer 0 ou 1 vez e o "*"indica 0 ou mais vezes. |4| - Define um nome a ser mostrado para a aplicação. Não tem relação com o context-path, portanto, essa configuração não vai alterar a maneira de acesso da aplicação. |5| - Descrição para a aplicação web. |6| - Parâmetro de inicialização que será utilizado por toda a aplicação. Valores definidos nessa tag podem ser recuperados em um servlet ou uma jsp pela chamada do método: String param = getServletContext().getInitParameter("name"); , onde "nome"deve coincidir com o valor definido na subtag <param-name>. Pode-se definir também qualquer número de paramentros de inicialização que forem necessários. Incluindo o zero. |7| - Nome do parâmetro de inicialização. |8| - Valor do parâmetro. 54
  • 56. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF |9| - Definições para os servlets que fazem parte da aplicação, incluindo parâmetros de inicia- lização. No Tomcat, pode-se também enviar requests para servlets não listados aqui da seguinte maneira: http://localhost:8080/diretório_raiz/servlet/Nome_da_classe Entretanto, esse uso não é garantidamente portável. Isso também torna referências relativas a recursos usados pelo servlet mais complexas. Então definir todos os servlets é o recomendado. Parâmetros de inicialização do servlet podem ser recuperados em um servlet ou jsp da seguinte maneira: String value = getServletConfig().getInitParameter("nome"); onde "nome"deve coincidir com o valor definido na subtag <param-name> para algum dos parâmetros. Pode-se definir também qualquer quantidade de servlets incluindo zero. |10| - Nome do servlet. É uma tag obrigatória. |11| - Tag usada para indicar o pacote (se houver) e a classe (qualificada) que representa o servlet definido. Outra tag obrigatória. |12| - Lista de parâmetros de inicialização referentes apenas a esse servlet. Pode-se usar quantos <init-param> quiser inclusive zero. |13| - Indica que este servlet deve ser carregado (instanciado e ter seu método init() cha- mado) quando a aplicação for iniciada. O conteúdo desse elemento deve ser um inteiro indicando a ordem na qual os servlets serão carregados. Se o valor é negativo, ou não é apresentado, o container é livre para carregar o servlet a qualquer hora que escolher. Se o valor é um inteiro positivo ou 0 (zero), o container deve carregar e inicializar o servlet assim que a aplicação é inici- ada. O container deve garantir que servlet marcados com inteiros menores devem ser carregados antes de servlets marcados com inteiros de valores altos. O Container pode escolher a ordem para carregar servlet marcados com o mesmo valor em load-on-startup. |14| - Como já explicado, a tag <serlvet-mapping> define um mapeamento que é usado pelo servlet container para traduzir um request URI para um servlet em particular. Pode-se definir qualquer número de mapeamentos para serlvets, incluindo zero. Tambem é permitido fazer mais de um mapeamento para um mesmo servlet. |15| - Define um timeout default para as sessions de sua aplicação, em minutos. A partir de um serlvet ou JSP pode-se modificar manualmente o timeout para uma session em particular usando dinamicamente os métodos. HttpSession.getMaxInactiveInterval() e HttpSession.setMaxInactiveInterval(int interval). |16| - Lista de arquivos que serão procurados quando alguém acessar o diretório virtual da aplicação. Os arquivos são listados em ordem de prioridade, de modo que os primeiros serão 55
  • 57. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF procurados antes e, caso não sejam encontrados, o servlet container tentará usar o próximo da lista. Quinto: Iniciar o Tomcat. Caso já esteja iniciado, ignore esta etapa. Sexto: Chamar o servlet a partir de um browser pela URL já demonstrada (usando a porta 8080): http://localhost:8080/teste/Teste Em lições posteriores serão melhor explicados os métodos usados no código fonte do Servlet. 8.3 Um Exemplo Mostrarei aqui um exemplo mais prático. Nele criamos os diretórios na pasta webapps do Tomcat, criamos um web.xml, criamos um servlet e uma página com um formulário. Organização das pastas no tomcat(como já mostrado, a pasta padrão do Tomcat no nosso caso é: /apache-tomcat-6.0.10): + apache-tomcat-6.0.10 | + webapps | | + exemplo1 | | | | form.html | | | + WEB-INF | | | | web.xml | | | | + classes | | | | | Exemplo.class | | | | - | | | - | | - | - - Organização das pastas de projeto: + projetos | + exemplo1 | | + web | | | form.html | | - | | + etc | | | web.xml | | - | | + src 56
  • 58. CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF | | | Exemplo.java | | - | | + classes | | | Exemplo.class (Será criado na compilação do Exemplo.java) | | - | - - .Criando o arquivo ’form.html’ na pasta: projetos/exemplo1/web/ ______________________________________________________________________________ <html> <head> <title>Exemplo1 CDTC</title> </head> <body> <h1>Exemplo1 CDTC</h1> <hr /> <p> Digite um valor: </p> <form action="acao.do" method="post"> <input type="text" name="valor" /> <input type="submit" /> </form> </body> </html> _______________________________________________________________________________ Criar arquivo Exemplo.java na pasta projetos/exemplo1/src/ ________________________________________________________________________________ import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Exemplo extends HttpServlet { public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Você selecionou: <br />" ); String escolha = request.getParameter("color"); out.println(escolha + "<br />"); } } ________________________________________________________________________________ .Criar arquivo web.xml na pasta projetos/exemplo1/etc/ 57