Você está na página 1de 10

Comeando

Parte 1 destinado a leitores que so novos para o desenvolvimento de componentes web.


Apresentamos a voc os conceitos que voc precisa entender antes de comear os captulos
que incidem sobre os objetivos do exame. Nossos tpicos aqui incluem o Servlet e JSP
tecnologias, aplicaes web, e do protocolo HTTP.
INTRODUO
O objetivo deste livro explicar como voc pode usar J2EE para criar esses componentes web
dinmicas. Ns vamos fazer isso por discutir servlets e JavaServer Pages (JSPs) em grande
profundidade tcnica. Vamos apresentar a teoria por trs desses conceitos, e, em seguida,
completar a teoria com o cdigo de prtica. Em seguida, usando Tomcat ou um servidor de
web semelhante, voc pode construir o seu prprio cdigo para cimentar o material em sua
mente.

1.1 O que um servlet?


Como resulta do seu nome, um servlet uma entidade do lado do servidor. Mas o que
exatamente significa isso? um novo padro de design para servidores escrever? uma nova
classe Java? Ou uma nova tecnologia? A resposta para todas essas perguntas sim, embora
em diferentes contextos. Para entender qualquer conceito novo, importante conhecer as
razes por trs de sua concepo. Ento, vamos comear por ter um olhar para as tarefas que
um servidor precisa fazer.

1.1.1 responsabilidades do Servidor


Cada servidor que fornece servios para clientes remotos tem duas responsabilidades
principais. O primeiro para lidar com pedidos de clientes; a segunda a de criar uma
resposta a ser enviada de volta. A primeira tarefa envolve a programao no nvel de
soquete, extrair informaes de mensagens de solicitao e implementao de protocolos
cliente-servidor, tais como FTP e HTTP. A segunda tarefa, criando a resposta, varia de servio
para servio. Por exemplo, no caso dos servidores de FTP que servem pedidos de
transferncia de arquivos, criao de resposta to simples como a localizao de um
arquivo na mquina local. Por outro lado, os servidores HTTP que aplicaes web verdadeiras
integral de acolhimento so obrigados a ser mais sofisticado na maneira de gerar a sada.
Eles tm que criar a resposta de forma dinmica, que pode envolver tarefas complexas, tais
como a recuperao de dados a partir do banco de dados, aplicao de regras de negcio, e
apresentando a sada nos formatos desejados pelos clientes diferentes.

Uma maneira de escrever um servidor simples que serve apenas dados estticos seria
codificar tudo em um nico programa executvel. Este nico programa iria cuidar de todas as
diferentes tarefas, tais como a gesto da rede, implementao de protocolos, localizar dados
e responder. No entanto, para servidores HTTP que servem de dados sindicados, que exigem
um design altamente flexvel e extensvel. A lgica de aplicao continua a mudar, os clientes
precisam vistas personalizadas de informaes e parceiros de negcios precisam de regras de
transformao customizadas. No podemos escrever um nico programa que lida com todas
essas tarefas. Alm disso, o que se uma nova funcionalidade tem de ser adicionado? E se as
alteraes de formato de dados? Modificando os arquivos de origem (especialmente aps o
desenvolvedor deixou!) para adicionar um novo cdigo certamente a ltima coisa que
queremos fazer.

Bem, h um projeto melhor para esses tipos de servidores: dividir o cdigo em duas partes e
um executvel que lida com a rede e que fornece a aplicao lgica e deixar os dois
executveis tem uma interface padro entre eles. Este tipo de separao torna possvel

modificar o cdigo na lgica da aplicao sem afetar o mdulo de rede, desde que siga as
regras do interface. Tradicionalmente, as pessoas tm implementado este projeto para
servidores HTTP usando Common Gateway Interface (CGI). De um lado dessa interface o
servidor web principal, e do outro lado esto as scripts CGI. O servidor web funciona como o
mdulo de comunicaes de rede e gerencia os clientes, enquanto os scripts CGI atuar como
mdulos de processamento de dados e entregar o resultado. Eles seguem as regras do
"Common Gateway Interface" para passar dados entre eles.

1.1.2 extenses de servidor


Embora CGI oferece um design modular, tem vrias deficincias. O principal problema para
sites de alto trfego a escalabilidade. Cada nova invocao pedido envolve a criao e
destruio de novos processos para executar os scripts CGI. Isto altamente ineficiente,
especialmente se os scripts executar rotinas de inicializao, tais como ligar a uma base de
dados. Alm disso, eles usam ficheiro de entrada / sada (I / O), como um meio de
comunicao com o servidor, causando um aumento significativo no tempo de resposta
global. A melhor maneira ter o apoio servidor mdulos executveis separadas que podem
ser carregados para a memria e inicializadas apenas uma vez, quando o servidor iniciado.
Cada pedido pode, ento, ser efetuada mediante a j na memria e pronto a servir cpia dos
mdulos. Felizmente, a maioria dos servidores de fora industrial tm vindo a apoiar tais
mdulos por um longo tempo, e eles fizeram os scripts CGI fora-de-memria obsoleto. Estes
mdulos executveis separados so conhecidos como extenses de servidor. Em outras
plataformas de Java, extenses de servidor so escritas usando APIs de lngua nativa
prestados pelos fornecedores de servidores. Por exemplo, o Netscape Server fornece a
programao Netscape Application Server Interface (NSAPI), e do Microsoft Internet
Information Server (IIS) fornece a Internet Server Application Programming Interface (ISAPI).
Em Java, extenses de servidor so escritos usando a API Servlet, e os mdulos de extenso
de servidor so chamados servlets.

1.2 O QUE um continer de servlet?


Um servidor web usa um mdulo separado para carregar e executar servlets. Este mdulo
especializado, que se dedica gesto de servlet, chamado de um servlet container, ou
mecanismo de servlet.

1.2.1 O retrato grande


A Figura 1.1 mostra como os componentes diferentes se encaixam no quadro geral. Arquivos
HTML so armazenados no sistema de arquivos, servlets so executados dentro de um servlet
container, e dados de negcios est no banco de dados. O navegador envia pedidos para o
servidor web. Se o destino for um arquivo HTML, o servidor processa-lo diretamente. Se o alvo
um servlet, os delegados do servidor a solicitao para o servlet container, que por sua vez
encaminha para o servlet. O servlet utiliza o sistema de arquivos e banco de dados para gerar
a sada dinmica.

1.2.2 Entendendo contineres de servlet


Conceitualmente, um servlet container uma parte do servidor web, mesmo que possa ser
executado em um processo separado. A este respeito, contineres de servlet so classificados
em trs tipos seguintes:

Standalone-Servlet deste tipo so tipicamente servidores web baseados em Java, onde os


dois mdulos o servidor web principal e o servlet container so parte integrante de um
programa nico (figura 1.2). Tomcat (vamos aprender sobre Tomcat em breve) que funciona
por si s um exemplo deste tipo de servlet container. Corremos o Tomcat como faramos
com qualquer programa Java normais dentro de uma mquina virtual Java (JVM). Ele contm
manipuladores para contedo esttico, como arquivos HTML e manipuladores para a
execuo de servlets e pginas JSP.

In-processo-Aqui, o servidor web principal eo servlet container so programas diferentes,


mas os contentores executado no espao de endereo principal do servidor como um plugin (figura 1.3). Um exemplo deste tipo Tomcat rodando dentro Apache Web Server. Apache
carrega um JVM que executa Tomcat. Neste caso, o servidor web lida com o contedo esttico,
por si s, e Tomcat manipula os servlets e pginas JSP.

Out-of-process-Like in-processo servidores, o servidor web principal eo servlet container


diferentes programas. No entanto, com out-of-processo, o servidor web executado em um
processo, enquanto os contentores servlet executado em um processo separado (figura
1.4). Para se comunicar com o servlet container, o servidor web usa um plug-in, que
normalmente fornecido pelo exemplo vendor.An servlet container deste tipo Tomcat
executado como um processo separado configurado para receber solicitaes de Apache Web
Server. Apache carrega o mod_jk plug-in para se comunicar com Tomcat.

Cada um desses tipos tem suas vantagens, limitaes e aplicabilidade. Ns no vamos


discutir esses detalhes, uma vez que eles esto fora do escopo deste livro. Muitos recipientes
de servlet esto disponveis no mercado-Tomcat (Apache), resina (Caucho Technology), JRun
(Macromedia), WebLogic (BEA), e WebSphere (IBM), s para citar alguns. Algumas delas, como
o WebLogic e WebSphere, so muito mais do que apenas recipientes de servlet. Eles tambm
fornecem suporte para Enterprise JavaBeans (EJB), Java Message Service (JMS) e outras
tecnologias J2EE.

1.2.3 Usando o Tomcat


Tomcat um servlet container desenvolvido no mbito do projecto Jakarta na Apache
Software Foundation (ASF). Voc pode obter uma riqueza de informaes sobre Tomcat de
http://jakarta.apache.org/tomcat. Decidimos utilizar o Tomcat verso 5.0.25 para os exemplos
neste livro por causa das seguintes razes:
de graa.

Ele implementa as ltimas Servlet 2.4 e JSP 2.0 especificaes, que o que precisamos para
o exame.
Ela tem a capacidade de funcionar como um servidor web por si s (modo Standalone) .No
h necessidade de um servidor web separado.
Temos dado instrues de instalao para o Tomcat no apndice A. Nas discusses dos
exemplos ao longo do livro, assumiu-se que o diretrio de instalao do Tomcat c: \ jakartatomcat-5.0.25. Note-se que uma vez que voc tenha instalado o Tomcat, voc deve definir o
CATALINA_HOME, JAVA_HOME, e variveis CLASSPATH, conforme descrito no apndice A.

1.3 OL MUNDO servlet


Nesta seo, vamos olhar para o quatro passos bsicos codificao, compilao, implantao
e funcionando-necessrio para desenvolver e executar o servlet habitual Ol Mundo, dois que
imprime Ol mundo! na janela do navegador. By the way, voc sabe quem comeou a
tendncia de escrever "Ol mundo!" Como um programa de introduo?

1.3.1 O cdigo
Listagem 1.1 contm o cdigo para HelloWorldServlet.java.

1.3.2 Compilao
Observe as instrues de importao na Listagem 1.1. Eles importam as classes dos pacotes
javax.servlet e javax.servlet.http. No Tomcat, eles So fornecidas como parte do arquivo
servlet-api.jar, que est no diretrio c: \ jakarta-tomcat 5.0.25 \ common \ lib \. Para compilar

o programa na listagem 1.1, incluem o arquivo JAR no classpath, conforme indicado no


apndice A. Vamos explicar os detalhes desses pacotes na seco 1.4.

1.3.3 implantao
A implantao um processo de duas etapas. (Ns vamos discutir a estrutura de implantao
no captulo 5.) Em primeiro lugar, ns colocamos os recursos para o diretrio necessrio.
Ento, eu informo sobre o nosso servlet Tomcat editando o arquivo web.xml:
1 Copie o arquivo para o diretrio HelloWorldServlet.class
c: \ jakarta-tomcat-5.0.25 \ webapps \ chapter01 \ WEB-INF \ classes
2 Crie um arquivo de texto chamado web.xml no
c: \ jakarta-tomcat5.0.25 \ webapps \ chapter01 \ WEB-INF.
Escreva as seguintes linhas no arquivo:

Voc tambm pode copiar o diretrio chapter01 diretamente do site da Manning no seu c: \
jakarta-tomcat-5.0.25 diretrio \ webapps. Isto ir fornecer todos os arquivos que voc precisa
para executar o exemplo.

1.3.4 Execuo
Comece Tomcat com um atalho ou com o prompt do DOS (c: \ jakarta-tomcat5.0.25 \ bin \
startup.bat).
Abra uma janela do navegador e v para a URL http: // localhost / chapter01 / servlet /
HelloWorldServlet.
Ol Mundo! deve aparecer na janela do navegador.

1.4 A relao entre um servlet CONTAINER EO API Servlet


Especificao Servlet da Sun fornece um padro e uma estrutura independente de plataforma
para a comunicao entre servlets e seus containers. Este quadro constitudo por um
conjunto de interfaces e classes Java. Essas interfaces e classes so chamados coletivamente
os Application Programming Interfaces Servlet, ou a API Servlet. Simplificando, podemos
desenvolver servlets usando esta API, que implementado pelo continer servlet (veja a
figura 1.5). A API Servlet tudo que ns como desenvolvedores de servlet precisa saber. Uma
vez que todos os contineres de servlet deve fornecer esta API, os servlets so
verdadeiramente independente de plataforma e servlet container-. Essencialmente, a
compreenso das regras deste API e a funcionalidade que ele fornece o que a programao
servlet tem tudo a ver! A API Servlet dividido em dois pacotes: javax.servlet e
javax.servlet.http. Vamos discutir esses pacotes em mais detalhes medida que progredimos
atravs do livro, mas por agora, vamos dar uma olhada rpida para eles.

1.4.1 O pacote javax.servlet


Este pacote contm as interfaces de servlets genricos e classes que so independentes de
qualquer protocolo.

A interface javax.servlet.Servlet
Esta a interface central no API servlet. Cada classe servlet deve directa ou indirectamente
implementar essa interface. Tem cinco mtodos, tal como mostrado na tabela 1.1.

O mtodo de service () lida com as solicitaes e cria respostas. O servlet container chama
automaticamente esse mtodo quando ele recebe qualquer pedido para este servlet. A
assinatura completa deste mtodo

public void service (ServletRequest, ServletResponse)


throws ServletException, java.io.IOException;

A classe javax.servlet.GenericServlet
A classe GenericServlet implementa a interface Servlet. uma classe abstrata que permite a
execuo de todos os mtodos, exceto o mtodo de servio () da interface Servlet. Ele
tambm adiciona alguns mtodos para apoiar o registo. Podemos estender esta classe e
implementar o mtodo de servio () para escrever qualquer tipo de servlet.

A interface javax.servlet.ServletRequest
A interface ServletRequest fornece uma viso genrica do pedido que foi enviado por um
cliente. Ele define mtodos que extraem informaes do pedido.

A interface javax.servlet.ServletResponse

A interface ServletResponse fornece uma forma genrica de envio de respostas. Ele define
mtodos que auxiliam no envio de uma resposta apropriada para o cliente.

1.4.2 O pacote javax.servlet.http


Este pacote fornece a funcionalidade bsica necessria para servlets HTTP. Interfaces e
classes deste pacote estender as interfaces correspondentes e classes do pacote
javax.servlet para construir suporte para o protocolo HTTP.

A classe javax.servlet.http.HttpServlet
HttpServlet uma classe abstrata que estende GenericServlet. Ele adiciona um novo mtodo
de servio () com esta assinatura:
protected void service (HttpServletRequest, HttpServletResponse)
throws ServletException, java.io.IOException;

No exemplo Ol Mundo, ns estendemos nossa classe servlet a partir desta classe e que
cancelou o mtodo de servio ().

A interface javax.servlet.http.HttpServletRequest
A interface HttpServletRequest estende ServletRequest e fornece uma viso especfica HTTP
do pedido. Ele define mtodos que extraem informaes, tais como cabealhos de HTTP e
cookies, a partir da solicitao.

A interface javax.servlet.http.HttpServletResponse
A interface HttpServletResponse estende ServletResponse e fornece uma maneira especfica
do HTTP de envio de respostas. Ele define mtodos que auxiliam na criao de informao,
tais como cabealhos de HTTP e cookies, para a resposta.

1.4.3 Vantagens e desvantagens da API Servlet


As vantagens do API servlet so os seguintes:

Flexibilidade-Cada vez que precisa adicionar uma nova funcionalidade ao servidor, todos
ns temos que fazer escrever um novo servlet especfico para esse conjunto de requisitos e
conecte-o ao servidor, sem modificar o prprio servidor.

A separao de responsabilidades O servidor principal agora s precisa se preocupar com a


conexes de rede e comunicaes parte. O trabalho de interpretar os pedidos e criar
respostas adequadas delegada aos servlets.

programadores Java Java no precisam aprender uma nova linguagem de script. Alm
disso, eles podem usar todos os recursos orientados a objetos fornecidos pelo Java.

Portabilidade-Podemos desenvolver e testar um servlet em um recipiente e implant-lo em


outro. Ao contrrio de solues proprietrias, a API Servlet independente de servidores web
e contineres de servlet. Ns podemos "write once, run anywhere", enquanto os contentores
suportam a API Servlet padro.
Uma limitao bvia, ou melhor, restrio, da API Servlet aquele que comum a todos os
tipos de quadros: voc tem que seguir as regras estabelecidas pelo quadro. Isso significa que
temos que seguir certas convenes para tornar o servlet container feliz.
Outra desvantagem envolve os recipientes disponveis no mercado e no a prpria API
Servlet. Teoricamente, usando a API, voc pode escrever servlets para quase qualquer tipo de
protocolo, incluindo FTP, SMTP, ou mesmo protocolos proprietrios. No entanto, no seria
justo esperar que os fornecedores de continer servlet para construir o apoio para todos eles.
A partir de agora, os mandatos de especificao Servlet apoiar apenas para HTTP atravs do
pacote javax.servlet.http.

1.5 RESUMO
Neste captulo, ns aprendemos sobre os conceitos bsicos de servlets e servlet container, e
como eles fornecem extenses para a funcionalidade de um servidor. Ns tambm correu
uma amostra de servlet Ol mundo que exibia uma linha de texto na janela do navegador.
Finalmente, ns olhamos a API Servlet e suas classes e interfaces. Armado com este
conhecimento, agora ns podemos responder pergunta "O que um servlet?" A partir de
vrias perspectivas diferentes. Conceitualmente, um servlet um pedao de cdigo que pode
ser
Ligado a um servidor existente para estender a funcionalidade do servidor
usado para gerar a sada desejada dinamicamente

Para um continer de servlet, servlet um


Uma classe Java como qualquer outra classe Java normal,
Uma classe que implementa a interface javax.servlet.Servlet
Para um desenvolvedor web componente, um servlet, ou especificamente um servlet HTTP,
uma classe que
Estende javax.servlet.http.HttpServlet
Reside em um continer de servlet (como Tomcat ou JRun)
Serve solicitaes HTTP

Você também pode gostar