Servlets e JSP
Phillipe Lopes
phillipe.alcantara.fonseca@gmail.com
Porquê usar Servlets e JSPs?
● Você não precisa se preocupar com a distribuição;
● Seus usuários precisam apenas de um browser;
● Te permite a criação de aplicações poderosas;
● Estão na moda :)
O que faz um servidor web?
O que um cliente web faz?
Clientes e servidores conhecem HTML e
HTTP
●

HTML

●

○ HyperText Markup Language;
○ Todos os browsers sabem o que fazer com HTML;
HTTP
○
○
○

HyperText Transfer Protocol;
A maioria das conversações que acontecem entre servidores e
clientes usam o protocolo HTTP;
Permite simples conversas de requisições e respostas;
HTML é parte da resposta HTTP
O que está na requisição
●

Temos vários tipos de requisições: HEAD, TRACE, PUT, DELETE,
OPTIONS, CONNECT, GET e POST;

●

Mas dois são principais: GET e POST;

●

GET
○
○

●

É o método HTTP mais simples;
Seu papel principal é pedir ao servidor para pegar um recurso e
enviá-lo de volta para quem pediu;
POST
○
○

É como se fosse um GET++;
Você pode enviar dados de um formulário e ao mesmo tempo solicitar
algo do servidor;
O que está na requisição?
●

Você pode enviar dados por GET;

●

Esses dados são anexados à URL;

●

Não é bom que se envie dados sensíveis por GET; (senhas)

●

Quantidade de caracteres é limitada;

●

Se for usado POST ao invés de GET em determinada página, esta página
não poderá ser marcada como favorito, por exemplo;
O que está na requisição?
O que está na requisição?
Estrutura de diretórios para um simples
web site Apache
Mão na massa!
Mão na massa!
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd"
version="2.4">
<servlet>
<servlet-name>Chapter1 Servlet</servlet-name>
<servlet-class>Ch1Servlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Chapter1 Servlet</servlet-name>
<url-pattern>/Serv1</url-pattern>
</servlet-mapping>
Mão na massa!
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class Ch1Servlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException {

PrintWriter out = response.getWriter();
java.util.Date today = new java.util.Date();
out.println("<html> " +
"<body>" +
"<h1 align=center>HF's Chapter1 Servlet</h1>"
+ "<br>" + today + "</body>" + "</html>");
}
}
Mão na massa!
%javac -classpath /your path/tomcat/common/lib/
servlet-api.jar -d classes src/Ch1Servlet.java
Mão na massa!
Mão na massa!
startup.bat
Arquitetura de um App Web
●

Alguém tem que manipular as requisições, chamar os métodos doGet()
doPost() e instanciar seus argumentos: objetos HTTP response e HTTP
request;

●

Alguém tem que gerenciar a vida de um Servlet;

●

Os Containers fazem este papel;
O que é um Container?
●

Tomcat é um exemplo de Container. Quando seu servidor web (como o
Apache) recebe uma requisição para um servlet, o servidor envia a
requisição não para o servlet, mas para o Container no qual o servlet é
implantado (deployed). É o Container que dá ao servlet a requisição e
resposta HTTP, e é o Container que chama os métodos do servlet (como
o doPost() e o doGet()).
O que é um Container?
Como o Container manipula
uma requisição?
Como o Container manipula
uma requisição?
Como o Container manipula
uma requisição?
Como o Container acha o
Servlet?
●

Colocando o caminho exato da classe dentro do HTML?

●

Usando uma ferramenta do distribuidor do Container?

●

Usando algum tipo de tabela de propriedades para guardar os
mapeamentos?
Como o Container acha o
Servlet?
●

Um servlet pode ter até três nomes!
○

Nome de caminho de arquivo. Ex.: classes/registration/SignUpServlet.
class

○

Nome de implantação (deployment name). É um nome interno secreto
que não precisa ser o mesmo que o nome da classe e nem o nome
do arquivo.

○

Nome de URL pública. É o nome que o cliente conhece, em outras
palavras, é o nome codificado dentro do HTML que quando o cliente
clica é direcionado para este servlet.
Como o Container acha o
Servlet?
Usando o Deployment
Descriptor
●

Quando você implanta seu servlet dentro de um web Container, você cria
um XML muito simples chamado Deployment Descriptor que diz ao
Container como rodar seus servlets e JSPs.

●

O Deployment Descriptor também é usado para mapear URLs para
servlets.
Criando o ambiente de
desenvolvimento
Criando o ambiente de
implantação
Ciclo de vida de um servlet
Os três grandes momentos
da vida de um servlet
● init()
● service()
● doGet() | doPost()
Cada requisição roda em
uma thread separada
Introdução à Servlets e JSP

Introdução à Servlets e JSP

  • 1.
    Servlets e JSP PhillipeLopes phillipe.alcantara.fonseca@gmail.com
  • 2.
    Porquê usar Servletse JSPs? ● Você não precisa se preocupar com a distribuição; ● Seus usuários precisam apenas de um browser; ● Te permite a criação de aplicações poderosas; ● Estão na moda :)
  • 3.
    O que fazum servidor web?
  • 4.
    O que umcliente web faz?
  • 5.
    Clientes e servidoresconhecem HTML e HTTP ● HTML ● ○ HyperText Markup Language; ○ Todos os browsers sabem o que fazer com HTML; HTTP ○ ○ ○ HyperText Transfer Protocol; A maioria das conversações que acontecem entre servidores e clientes usam o protocolo HTTP; Permite simples conversas de requisições e respostas;
  • 6.
    HTML é parteda resposta HTTP
  • 7.
    O que estána requisição ● Temos vários tipos de requisições: HEAD, TRACE, PUT, DELETE, OPTIONS, CONNECT, GET e POST; ● Mas dois são principais: GET e POST; ● GET ○ ○ ● É o método HTTP mais simples; Seu papel principal é pedir ao servidor para pegar um recurso e enviá-lo de volta para quem pediu; POST ○ ○ É como se fosse um GET++; Você pode enviar dados de um formulário e ao mesmo tempo solicitar algo do servidor;
  • 8.
    O que estána requisição? ● Você pode enviar dados por GET; ● Esses dados são anexados à URL; ● Não é bom que se envie dados sensíveis por GET; (senhas) ● Quantidade de caracteres é limitada; ● Se for usado POST ao invés de GET em determinada página, esta página não poderá ser marcada como favorito, por exemplo;
  • 9.
    O que estána requisição?
  • 10.
    O que estána requisição?
  • 11.
    Estrutura de diretóriospara um simples web site Apache
  • 12.
  • 13.
    Mão na massa! <?xmlversion="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>Chapter1 Servlet</servlet-name> <servlet-class>Ch1Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Chapter1 Servlet</servlet-name> <url-pattern>/Serv1</url-pattern> </servlet-mapping>
  • 14.
    Mão na massa! importjavax.servlet.*; import javax.servlet.http.*; import java.io.*; public class Ch1Servlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); java.util.Date today = new java.util.Date(); out.println("<html> " + "<body>" + "<h1 align=center>HF's Chapter1 Servlet</h1>" + "<br>" + today + "</body>" + "</html>"); } }
  • 15.
    Mão na massa! %javac-classpath /your path/tomcat/common/lib/ servlet-api.jar -d classes src/Ch1Servlet.java
  • 16.
  • 17.
  • 18.
    Arquitetura de umApp Web ● Alguém tem que manipular as requisições, chamar os métodos doGet() doPost() e instanciar seus argumentos: objetos HTTP response e HTTP request; ● Alguém tem que gerenciar a vida de um Servlet; ● Os Containers fazem este papel;
  • 19.
    O que éum Container? ● Tomcat é um exemplo de Container. Quando seu servidor web (como o Apache) recebe uma requisição para um servlet, o servidor envia a requisição não para o servlet, mas para o Container no qual o servlet é implantado (deployed). É o Container que dá ao servlet a requisição e resposta HTTP, e é o Container que chama os métodos do servlet (como o doPost() e o doGet()).
  • 20.
    O que éum Container?
  • 21.
    Como o Containermanipula uma requisição?
  • 22.
    Como o Containermanipula uma requisição?
  • 23.
    Como o Containermanipula uma requisição?
  • 25.
    Como o Containeracha o Servlet? ● Colocando o caminho exato da classe dentro do HTML? ● Usando uma ferramenta do distribuidor do Container? ● Usando algum tipo de tabela de propriedades para guardar os mapeamentos?
  • 26.
    Como o Containeracha o Servlet? ● Um servlet pode ter até três nomes! ○ Nome de caminho de arquivo. Ex.: classes/registration/SignUpServlet. class ○ Nome de implantação (deployment name). É um nome interno secreto que não precisa ser o mesmo que o nome da classe e nem o nome do arquivo. ○ Nome de URL pública. É o nome que o cliente conhece, em outras palavras, é o nome codificado dentro do HTML que quando o cliente clica é direcionado para este servlet.
  • 27.
    Como o Containeracha o Servlet?
  • 28.
    Usando o Deployment Descriptor ● Quandovocê implanta seu servlet dentro de um web Container, você cria um XML muito simples chamado Deployment Descriptor que diz ao Container como rodar seus servlets e JSPs. ● O Deployment Descriptor também é usado para mapear URLs para servlets.
  • 30.
    Criando o ambientede desenvolvimento
  • 32.
    Criando o ambientede implantação
  • 34.
    Ciclo de vidade um servlet
  • 35.
    Os três grandesmomentos da vida de um servlet ● init() ● service() ● doGet() | doPost()
  • 36.
    Cada requisição rodaem uma thread separada