37
Disciplina: MsC. Alexandro Vladno Edmilson Campos MsC. Fábio Procópio Esp. Felipe Dantas MsC. João Maria MsC. Liviane Melo Corpo docente: Ciclo de vida; Funcionamento; Requisições e Respostas. Programação Web AULA 05

Ciclo de vida; Funcionamento; Requisições e Respostas. · public void doPost(HttpServletRequest request, ... Deve-se evitar a utilização de stream. O correto é utilizar páginas

Embed Size (px)

Citation preview

Disciplina:

MsC. Alexandro Vladno

Edmilson Campos

MsC. Fábio Procópio

Esp. Felipe Dantas

MsC. João Maria

MsC. Liviane Melo

Corpo docente:

Ciclo de vida; Funcionamento; Requisições e Respostas.

Programação Web

AULA 05

Edmilson Campos ([email protected]) 2

»

»

»−

»

Edmilson Campos ([email protected]) 3

Edmilson Campos ([email protected]) 4

Edmilson Campos ([email protected]) 5

Edmilson Campos ([email protected]) 6

1.»

»−

»−

Edmilson Campos ([email protected]) 7

2.»

»

»

Edmilson Campos ([email protected]) 8

»−

»

»−

Edmilson Campos ([email protected]) 9

Edmilson Campos ([email protected]) 10

Edmilson Campos ([email protected]) 11

Edmilson Campos ([email protected]) 12

public class OiMundo extends HttpServlet {

protected void service (HttpServletRequest request, HttpServletResponse response) throws

ServletException, IOException {

PrintWriter out = response.getWriter();

// escreve o texto

out.println("<html>");

out.println("<body>");

out.println("Primeira servlet");

out.println("</body>");

out.println("</html>");

}

}

O objetivo da servlet acima é exibir uma mensagem HTML simples

para os usuários que a requisitarem

Observe que toda classe

Servlet extende HttpServlet

E aqui têm-se os parâmetros request e

response usados para controlar as

requisições e respostas, respectivamente

»

»

»

»

Edmilson Campos ([email protected]) 13

Mapear o nome das Servlets aumenta a flexibilidade e

a segurança da aplicação

Edmilson Campos ([email protected]) 14

Edmilson Campos ([email protected]) 15

Edmilson Campos ([email protected]) 16

»

Edmilson Campos ([email protected]) 17

»

»

Edmilson Campos ([email protected]) 18

»

<html>

<body>

<form action="adicionaContato">

Nome: <input type="text" name="nome" /><br />

E-mail: <input type="text" name="email" /><br />

Endereço: <input type="text" name="endereco" /><br />

Data Nascimento: <input type="text" name="dataNascimento" /><br />

<input type="submit" value="Gravar" />

</form>

</body>

</html>

O atributo action do form indica qual endereço

deve ser chamado ao submeter o formulário, ao clicar no botão Gravar.

Nesse caso, estamos apontando para um endereço que será uma Servlet

que já vamos criar, chamada adicionarContato

Edmilson Campos ([email protected]) 19

Edmilson Campos ([email protected]) 20

public class AdicionaContatoServlet extends HttpServlet {

protected void service(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

//Recuperando os parâmetros do request

String nome = request.getParameter("nome");

String endereco = request.getParameter("endereco");

String email = request.getParameter("email");

String dataEmTexto = request.getParameter("dataNascimento");

//Realiza operação para inserir contato

//[…]

// Imprime o nome do contato que foi adicionado

PrintWriter out = response.getWriter();

out.println("<html>");

out.println("<body>");

out.println("Contato " + nome + " adicionado com sucesso");

out.println("</body>");

out.println("</html>");

}

}

Edmilson Campos ([email protected]) 21

<servlet>

<servlet-name>AdicionaContato</servlet-name>

<servlet-class>br.com.caelum.agenda.servlet.AdicionaContatoServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>AdicionaContato</servlet-name>

<url-pattern>/adicionaContato</url-pattern>

</servlet-mapping>

Atenção para não errar o caminho correto do <server-class> e nem

esquecer a barra da url no <url-pattern>

▪»

»

Edmilson Campos ([email protected]) 22

A razão também de muitas pessoas só conhecerem os métodos GET e

POST se dar pelo fato deles serem os únicos suportados pelo HTML 4

▪»

»

»

»

»

»

Edmilson Campos ([email protected]) 23

Edmilson Campos ([email protected]) 24

»

public class AdicionaContatoServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

//Executado quando a requisição é enviada pelo método GET

}

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException {

//Executado quando a requisição é enviada pelo método POST

}

}

» plataforma do cliente informação do browser

» cookies

» sessão

» método HTTP

» stream de dados

String cliente = request.getHeader(“User-Agent”);

Cookie[] cookies = request.getCookies();

String metodo = request.getMethod();

HttpSession sessao = request.getSession();

Edmilson Campos ([email protected]) 25

InputStream entrada = request.getInputStream();

▪»

»

»

Edmilson Campos ([email protected]) 26

▪»

»

Edmilson Campos ([email protected]) 27

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class BeerSelect extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("Beer Selection Advice<br>");

String c = request.getParameter("color");

out.println("<br>Got beer color " + c);

}

}

Deve-se evitar a utilização de stream. O correto é utilizar páginas JSP

(que será estudo ainda) para retornar ao usuário a resposta

Edmilson Campos ([email protected]) 28

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class CodeReturn extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws IOException, ServletException{

response.setContentType(“application/jar");

ServletContext ctx = getServletContext();

InputStream is = ctx.getResourceAsStream(“/bookCode.jar”);

int read = 0;

byte[] bytes = new byte[1024];

OutPutStream os = response.getOutPutStream();

while((read = is.read(bytes)) != -1)

os.write(bytes, 0, read);

os.flush();

os.close();

}

}

Edmilson Campos ([email protected]) 29

Edmilson Campos ([email protected]) 30

▪»

»

Edmilson Campos ([email protected]) 31

ServletOutPutStream out = response.getOutPutStream();

out.writer(umArrayDeBytes);

PrintWriter writer = response.getWriter();

writer.println(“algum texto e html”);

O PrintWriter empacota o ServletOutPutStream, ele possui uma

referência para o ServletOutPutStream, adicionando métodos de

alto nível para tratar caracteres

▪»

»

Edmilson Campos ([email protected]) 32

▪»

»

Edmilson Campos ([email protected]) 33

//...

if (Se o trabalho for para o Servlet){

// O Servlet trata a solicitação

}

else response.sendRedirect(“http://www.ufla.br”);

//...

Edmilson Campos ([email protected]) 34

public RequestDispatcher getRequestDispatcher(String path)

public void forward(ServletRequest req, ServletResponse res)

public void forward(ServletRequest req, ServletResponse res)

Edmilson Campos ([email protected]) 35

▪»

»

Edmilson Campos ([email protected]) 36

▪http://www.corewebprogramming.com/

▪ http://www.w3schools.com/

Edmilson Campos ([email protected]) 44