Sie sind auf Seite 1von 32

Servlets

Profa. Joyce Frana



Departamento de Cincia da Computao
Universidade Federal de Gois - Catalo

PGINAS ESTTICAS
Quando a Web surgiu, seu objetivo era a troca de
contedos atravs, principalmente, de pginas HTML
estticas. Eram arquivos escritos no formato HTML e
disponibilizados em servidores para serem acessados nos
navegadores. Imagens, animaes e outros contedos.
Mas logo se viu que a Web tinha um enorme potencial de
comunicao e interao alm da exibio de simples
contedos. Para atingir esse novo objetivo, porm, pginas
estticas no seriam suficientes. Era preciso servir pginas
HTML geradas dinamicamente baseadas nas requisies
dos usurios.
PGINAS DINMICAS
Hoje, boa parte do que se acessa na Web (portais,
blogs, home bankings etc) baseado em contedo
dinmico. O usurio requisita algo ao servidor que,
por sua vez, processa essa requisio e devolve uma
resposta nova para o usurio.
Na plataforma Java, a primeira e principal tecnologia
capaz de gerar pginas dinmicas so as Servlets, que
surgiram no ano de 1997.
Servelets
As Servlets so criadas para criar pginas dinmicas com Java.
uma classe que ter capacidade de gerar contedo HTML.
O nome "servlet" vem da ideia de um pequeno servidor (servidorzinho,
em ingls) cujo objetivo receber chamadas HTTP, process-las e
devolver uma resposta ao cliente.
Uma primeira ideia da servlet seria que cada uma delas responsvel
por uma pgina, sendo que ela l dados da requisio do cliente e
responde com outros dados (uma pgina HTML, uma imagem GIF
etc).
Como no Java tentamos sempre que possvel trabalhar orientado a
objetos, nada mais natural que uma servlet seja representada como
um objeto a partir de uma classe Java.
Cada servlet , portanto, um objeto Java que recebe tais requisies
(request) e produz algo (response), como uma pgina HTML
dinamicamente gerada.

Servelets
O diagrama abaixo mostra trs clientes acessando o
mesmo servidor atravs do protocolo HTTP:
Servelets
O comportamento das servlets que vamos ver neste
captulo foi definido na classe HttpServlet do
pacote javax.servlet.
A interface Servlet a que define exatamente como
uma servlet funciona, mas no o que vamos utilizar,
uma vez que ela possibilita o uso de qualquer
protocolo baseado em requisies e respostas, e no
especificamente o HTTP.

Servelets
Para escrevermos uma servlet, criamos uma classe Java
que estendaHttpServlet e sobrescreva um mtodo
chamado service. Esse mtodo ser o responsvel por
atender requisies e gerar as respostas adequadas. Sua
assinatura:



Repare que o mtodo recebe dois objetos que representam,
respectivamente, a requisio feita pelo usurio e a
resposta que ser exibida no final. Veremos que podemos
usar esses objetos para obter informaes sobre a
requisio e para construir a resposta final para o usurio.

Servelets - Exemplo

MAPEANDO UMA SERVLET NO WEB.XML
Acabamos de definir uma Servlet, mas como vamos acess-la pelo
navegador? Qual o endereo podemos acessar para fazermos com que
ela execute? O container no tem como saber essas informaes, a
no ser que digamos isso para ele. Para isso, vamos fazer um
mapeamento de uma URL especfica para uma servlet atravs do
arquivo web.xml, que fica dentro do WEB-INF.
Uma vez que chamar a servlet pelo pacote e nome da classe acabaria
criando URLs estranhas e complexas, comum mapear, por exemplo,
uma servlet como no exemplo, chamada OiMundo para o
nome primeiraServlet:
Comeamos com a definio da servlet em si, dentro da tag <servlet>:
<servlet>
<servlet-name>primeiraServlet</servlet-name>
<servlet-class>servlet.OiMundo</servlet-class>
</servlet>

MAPEANDO UMA SERVLET NO WEB.XML
Em seguida, mapeie nossa servlet para a URL /oi.
Perceba que isso acontece dentro da tag <servlet-
mapping> (mapeamento de servlets) e que voc tem
que indicar que est falando daquela servlet que
definimos logo acima: passamos o mesmo servlet-
name para o mapeamento.
<servlet-mapping>
<servlet-name>primeiraServlet</servlet-name>
<url-pattern>/oi</url-pattern>
</servlet-mapping>

MAPEANDO UMA SERVLET NO WEB.XML
Em seguida, mapeie nossa servlet para a URL /oi.
Perceba que isso acontece dentro da tag <servlet-
mapping> (mapeamento de servlets) e que voc tem
que indicar que est falando daquela servlet que
definimos logo acima: passamos o mesmo servlet-
name para o mapeamento.
<servlet-mapping>
<servlet-name>primeiraServlet</servlet-name>
<url-pattern>/oi</url-pattern>
</servlet-mapping>

MAPEANDO UMA SERVLET NO WEB.XML
Portanto, so necessrios dois passos para mapear
uma servlet para uma URL:
1. Definir o nome e classe da servlet;
2. Usando o nome da servlet, definir a URL.
A servlet pode ser acessada atravs da seguinte URL:
http://localhost:8080/aula-servelet/oi
Assim que o arquivo web.xml e a classe da servlet de
exemplo forem colocados nos diretrios corretos,
basta configurar o Tomcat para utilizar o diretrio de
base como padro para uma aplicao Web.

Mais sobre o url-pattern
A tag <url-pattern> tambm te d a flexibilidade de
disponibilizar uma servlet atravs de vrias URLs de
um caminho, por exemplo o cdigo abaixo far com
que qualquer endereo acessado dentro de /oi seja
interpretado pela sua servlet:
<servlet-mapping>
<servlet-name>primeiraServlet</servlet-name>
<url-pattern>/oi/*</url-pattern>
</servlet-mapping>

EXERCCIOS: PRIMEIRA SERVLET
Crie a servlet OiMundo no aula-servlet. Escolha o
menu File, New, Class.
projeto
aula.servlet
EXERCCIOS: PRIMEIRA SERVLET
1. Estenda HttpServlet:



2. Utilize o CTRL+SHIFT+O para importar HttpServlet.
3. Para escrever a estrutura do mtodo service, dentro da
classe, escreva apenas service e d Ctrl+espao: o
Eclipse gera pra voc o mtodo.

EXERCCIOS: PRIMEIRA SERVLET

EXERCCIOS: PRIMEIRA SERVLET
Escreva dentro do mtodo service sua implementao.
Por enquanto, queremos apenas que nossa Servlet
monte uma pgina HTML simples para testarmos.
EXERCCIOS: PRIMEIRA SERVLET
Abra o arquivo web.xml e mapeie a URL /oi para a
servlet OiMundo. Aproveite o autocompletar do Eclipse e
cuidado ao escrever o nome da classe e do pacote.

<servlet>
<servlet-name>servletOiMundo</servlet-name>
<servlet-class> aula.servlet.OiMundo </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletOiMundo</servlet-name> <url-
pattern>/oi</url-pattern>
</servlet-mapping>
EXERCCIOS: PRIMEIRA SERVLET
Reinicie o Tomcat clicando no boto verde na aba Servers.




Teste a url http://localhost:8080/projeto/oi
http://localhost:8080/projeto/oi
FACILIDADES DAS SERVLETS 3.0
Na nova especificao Servlets 3.0, que faz parte do Java
EE 6, podemos configurar a maneira como vamos acessar
a nossa Servlet de maneira programtica, utilizando
anotaes simples.
De modo geral, no mais preciso configurar as nossas
Servlets no web.xml, sendo suficiente usar a
anotao @WebServlet apenas:
@WebServlet("/oi")
public class OiServlet3 extends HttpServlet {
...
}
Isso equivalente a configurar a Servlet acima com a url-
pattern configurada como /oi.

ENVIANDO PARMETROS NA REQUISIO
Ao desenvolver uma aplicao Web, sempre precisamos realizar
operaes no lado do servidor, com dados informados pelo usurio,
seja atravs de formulrios ou seja atravs da URL.
Por exemplo, para gravarmos um contato no banco de dados,
precisamos do nome, e-mail, endereo e a data de nascimento dele.
Temos uma pgina com um formulrio que o usurio possa
preencher e ao clicar em um boto esses dados devem, de alguma
forma, ser passados para um Servlet. J sabemos que a Servlet
responde por uma determinada URL (atravs do url-pattern/v2.5 ou
dourlPatterns/v3.0), portanto, s precisamos indicar que ao clicar no
boto devemos enviar uma requisio para essa Servlet.
Para isso, vamos criar uma pgina HTML, chamada adiciona-
contato.html, contendo um formulrio para preenchermos os dados
dos contatos:

ENVIANDO PARMETROS NA REQUISIO

ENVIANDO PARMETROS NA REQUISIO
Ao acessar a pgina adiciona-contato.html, o resultado
dever ser similar figura abaixo:
PEGANDO OS PARMETROS DA REQUISIO
Para recebermos os valores que foram preenchidos na tela e
submetidos, criaremos uma Servlet, cuja funo ser receber de
alguma maneira esses dados e convert-los, se necessrio.
Dentro do mtodo service da nossa Servlet para adio de
contatos, vamos buscar os dados que foram enviados
na requisio. Para buscarmos esses dados, precisamos
utilizar o parmetro request do mtodo service chamando o
mtodogetParameter("nomeDoParametro"), onde o nome do
parmetro o mesmo nome do input que voc quer buscar o
valor. Isso vai retornar uma String com o valor do parmetro.
Caso no exista o parmetro, ser retornado null:
String valorDoParametro =
request.getParameter("nomeDoParametro");
PEGANDO OS PARMETROS DA REQUISIO
O fato de ser devolvida uma String nos traz um problema, pois, a data de nascimento
do contato est criada como um objeto do tipo Calendar. Ento, o que precisamos
fazer converter essa String em um objeto Calendar. Mas a API do Java para
trabalhar com datas no nos permite fazer isso diretamente. Teremos que converter
antes a String em um objeto do tipo java.util.Date com auxlio da
classe SimpleDateFormat, utilizando o mtodo parse, da seguinte forma:
String dataEmTexto = request.getParameter("dataNascimento"); Date date = new
SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
Repare que indicamos tambm o pattern (formato) com que essa data deveria
chegar para ns, atravs do parmetro passado no construtor
deSimpleDateFormat com o valor dd/MM/yyyy. Temos que tomar cuidado pois o
mtodo parse lana uma exceo do tipo ParseException. Essa exceo indica que o
que foi passado na data no pde ser convertido ao pattern especificado. Com o
objeto do tipo java.util.Date que foi devolvido, queremos criar um Calendar. Para
isso vamos usar o mtodo setTime da classe Calendar, que recebe um Date.
dataNascimento = Calendar.getInstance(); dataNascimento.setTime(date);
PEGANDO OS PARMETROS DA REQUISIO

PEGANDO OS PARMETROS DA REQUISIO
Reinicie o servidor, para que a nova Servlet seja
reconhecido
Acesse novamente no navegador a
URL http://localhost:8080/projeto/adiciona-
contato.html
Preencha o formulrio e clique em Gravar. O resultado
deve ser semelhante imagem a seguir:


Exerccio parte 1
Implemente uma aplicao web baseada na tecnologia Java EE
que receba as seguintes
informaes a partir de um formulrio em uma pgina HTML:
nome;
curso;
nota na 1 prova (P1);
nota na 2 prova (P2).
Exerccio parte 2
Estas informaes devem ser enviadas a um servlet da
aplicao que deve calcular a mdia ponderada das
provas do aluno ((P1 + 2*P2) / 3) e preencher os
atributos de um objeto da classe Aluno.
Exerccio parte 3
Se algum campo do formulrio da pgina HTML no
for preenchido ou for preenchido incorretamente, a
requisio deve ser encaminhada a outro servlet que
deve gerar um arquivo HTML informando que erro(s)
ocorreu(ram) no preenchimento do formulrio e
fornecer um link para a pgina HTML que contm o
formulrio.

Exerccio parte 4
Caso o formulrio tenha sido preenchido
corretamente, o objeto da classe Aluno deve ser
definido como um atributo da requisio que deve ser
encaminhada a outro servlet responsvel por exibir os
valores dos atributos desse objeto atravs de uma
pgina HTML. No final desta pgina HTML deve
haver um link para a pgina HTML que contm o
formulrio.

Das könnte Ihnen auch gefallen