Tecnologias Web. Java Servlets



Documentos relacionados
Prof. Fellipe Aleixo

Desenvolvendo Aplicações Web com Java

Java II. Sérgio Luiz Ruivace Cerqueira

Programação Na Web. Servlets: Como usar as Servlets. Agenda. Template genérico para criar Servlets Servlet 2.4 API

Java para Desenvolvimento Web

Servlets.

Fundamentos de Servlets. Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets

Introdução. Servlet. Ciclo Vida. Servlet. Exemplos. Prof. Enzo Seraphim

Java na WEB Servlet. Sumário

Java para WEB. Servlets

Curso de Java. Geração de Páginas WEB. TodososdireitosreservadosKlais

Java Servlets. Leonardo Gresta Paulino Murta

Programação II Programação para a Web. Christopher Burrows

J550. Helder da Rocha

Laboratórios 5, 6, 7 - Servlets

Servlets. João Carlos Pinheiro. Julho / 2005

J550. Servlets. Helder da Rocha

Criação de uma aplicação usando Servlets

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas)

Tencologia em Análise e Desenvolvimento de Sistemas Disciplina: WEB I Conteúdo: WEB Container Aula 04

Web Browser como o processo cliente. Servidor web com páginas estáticas Vs. Aplicações dinâmicas para a Web:

Desenvolvimento Web com JSP/Servlets

Aplicações de Linguagem de Programação Orientada a Objeto

Arquitetura de uma Webapp

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB

Desenvolvimento Web TCC Turma A-1

Java Server Pages. Arquitectura de uma aplicação distribuída em Internet. Figura 1 Modelo 2

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. Servlets A,L,F,M

Programação Na Web. Sessão II. Índice. Visão geral da API Sessão. Obter dados sobre uma sessão. Extrair informação sobre uma Sessão

Prof. Roberto Desenvolvimento Web Avançado

Autenticação e Autorização

Associação Carioca de Ensino Superior Centro Universitário Carioca

UNIDADE II JAVA SERVLETS

Prática Sobre Servlets e JSP

Arquiteturas de Aplicações Web. Leonardo Gresta Paulino Murta

Programação Web Aula 12 - Java Web Software

Programação em Rede. Servlets. Manipulação de dados de input em Servlets

J820. Testes de interface Web com. HttpUnit. argonavis.com.br. Helder da Rocha

Aula 4. Objetivos. Conteúdo dinâmico na internet.

Programação para Internet Flávio de Oliveira Silva, M.Sc.

Alfamídia Programação: Java Web

Arquitetura de Aplicações JSP/Web. Padrão Arquitetural MVC

Servlets e Applets, funcionamento e comparativo.

J2EE. Exemplo completo Utilização Servlet. Instrutor HEngholmJr

INTRODUÇÃO À TECNOLOGIA SERVLETS

Use a Cabeça! FREEMAN, Eric e Elisabeth. HTML com CSS e XHTML BASHMAN, Brian / SIERRA Kathy / BATES, Bert. Servlets & JSP

Aula 03 - Projeto Java Web

Java II. Sérgio Luiz Ruivace Cerqueira

Objetos Implícitos. Conceito. Instanciados pelo próprio contêiner. Disponíveis em quaisquer páginas JSP.

Programação para Internet I. 2. O protocolo HTTP. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

Javascript Exemplos Objetos

Desenvolvimento Web Protocolos da Internet

Aplicações Web com Servlets e JSP

Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes

Programação Web. Professor: Diego Oliveira. Conteúdo 02: JSP e Servlets

Desenvolvimento WEB II. Professora: Kelly de Paula Cunha

Aula 8: Servlets (III)

Tecnologias para Web

Web. Até a década de 1990, a Internet era utilizada. por pesquisadores, acadêmicos e universitários, para troca de arquivos e para correio eletrônico.

PHP: Cookies e Sessões

programação de páginas de conteúdo dinâmico

Internet e protocolos web. A Internet é uma rede descentralizada de recursos computacionais. Topologia tem de fornecer caminhos alternativos

Desenvolvimento Web TCC Turma A-1

Desenvolvendo Portlets utilizando JSF, Ajax, Richfaces. Gustavo Lira Consultor 4Linux

Como criar um EJB. Criando um projeto EJB com um cliente WEB no Eclipse

Java ME Java Platform, Micro Edition Java SE Java Platform, Standard Edition Java EE Java Platform, Enterprise Edition

Java Enterprise Edition. by Antonio Rodrigues Carvalho Neto

1.264 Lição 11. Fundamentos da Web

O protocolo HTTP. O que é o protocolo HTTP?

Desenvolvimento Web Histórico da Internet e Protocolos

Desenvolvimento de Sistemas Corporativos Aula 1.5 Introdução a Servlets. Prof. Bruno Moreno

Universidade Federal do Espírito Santo CCA UFES. Centro de Ciências Agrárias CCA UFES Departamento de Computação. Programação WEB

Introdução a Servlets e JSP. Prof. Samuel Martins samuellunamartins at gmail dot com Faculdade São Miguel

Executando comandos do Sistema Operacional em uma aplicação WEB Java

Jsp, Servlets e J2EE

PROGRAMAÇÃO PARA WEB

Servlets API. Aplicações web usando recursos da Servlets API no desenvolvimento de aplicações web. Professor J. c o l u n a

Introdução. Entendendo os Controles. Definindo um controle. Introdução MOCKDOMAIN() Testando uma classe de domínio mockdomain

JSP e Servlet Princípio de MVC

Tecnologias Web. Formulários HTML

Tópicos de Ambiente Web Conceitos Fundamentais Redes de Dados

INF1013 MODELAGEM DE SOFTWARE

Sessões. Cookies HTTP Sessões Atributos de sessão

Desenvolvimento WEB em JAVA. Palestrante: Lourival F. de Almeida Júnior

Programação Na Web. Servlets: Ciclo de Vida. Agenda. Visão geral sobre ciclo de vida. Nascimento de uma Servlet. Execução de uma Servlet

Servlets & JSP. Prof. Ramon Chiara

Primeiros Servlets. Introdução. O Básico da Estrutura de um Servlet

aplicações Web em JavaTM

J550. Model View Controller

Transcrição:

Tecnologias Web Java Servlets Cristiano Lehrer, M.Sc.

O que são Servlets Extensões do servidor escritas em Java: Podem ser usados para estender qualquer tipo de aplicação do modelo requisição/resposta. Todo servlet implementa a interface javax.servlet.servlet. Normalmente herdado de GenericServlet. Servlets HTTP: Extensões para servidores Web. Herdam de javax.servlet.http.httpservlet. Lidam com características típicas do protocolo HTTP, como por exemplo, os métodos GET e POST.

Servlet 2.5 API Principais classes e interfaces de javax.servlet: Interfaces: Servlet, ServletConfig, ServletContext. Filter, FilterChain, FilterConfig. ServletRequest, ServletResponse. RequestDispatcher. Classes abstratas GenericServlet. Classes concretas ServletException. UnavailableException. ServletInputStream e ServletOutputStream.

Ciclo de Vida (1/2) O ciclo de vida de um servlet é controlado pelo container. Quando o servidor recebe uma requisição, ela é repassada para o container que a delega a um servlet. O container: Carrega a classe do servlet na memória. Cria uma instância da classe do servlet. Inicializa a instância chamando o método init(servletconfig). Depois que o servlet foi inicializado, cada requisição é executada em um método service(servletrequest, ServletResponse): O container cria um objeto de requisição (ServletRequest) e de resposta (ServletResponse) e depois chama service() passando os objetos como parâmetros. Quando a resposta é enviada, os objetos são destruídos. Quando o container decidir remover o servlet da memória, ele o finaliza chamando o método destroy().

Ciclo de Vida (2/2)

Servlet Genérico Um servlet genérico deve estender GenericServlet e seu método service(servletrequest, ServletResponse). import javax.servlet.*; import java.io.*; public class Generico extends GenericServlet { public void service (ServletRequest request, ServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("hello World!"); out.close(); } }

Inicialização do Servlet Deve-se sobrepor o método init(servletconfig) com instruções que serão realizadas para inicializar um servlet: Carregar parâmetros de inicialização, dados de configuração. Obter outros recursos. Uma falha na inicialização deve provocar UnavailableException. public void init(servletconfig config) throws ServletException { super(config); } String driver = getinitparameter("jdbcdriver"); if (driver == null) { throw new UnavailableException("Configuração incorreta!"); }

Finalização do Servlet Quando um servlet container decide remover um servlet da memória, ele chama o seu método destroy(): Use destroy() para liberar recursos, como conexões de banco de dados e fazer outras tarefas de limpeza. O servlet geralmente só é destruído quando todos os seus métodos service(servletrequest, ServletResponse) terminaram ou depois de um timeout. Se sua aplicação tem métodos service(servletrequest, ServletResponse) que demoram para terminar, você deve garantir um shutdown limpo. public void destroy() { connection.close(); connection = null; }

Métodos de Serviço (1/2) São os métodos que implementam operações de resposta executadas quando o cliente envia uma requisição. Todos os métodos de serviço recebem dois parâmetros: Um objeto ServletRequest e outro ServletResponse. Tarefas usuais de um método de serviço: Extrair informações da requisição. Acessar recursos externos. Preencher a resposta: No caso do protocolo HTTP, consiste no preenchimento dos cabeçalhos de resposta, obter um stream de resposta e escrever os dados no stream.

Métodos de Serviço (2/2) O método de serviço de um servlet genérico é o método abstrato service() definido em javax.servlet.servlet: void service(servletrequest, ServletResponse) throws ServletException, IOException Sempre que um servidor repassar uma requisição a um servlet, ele chamará o método service(). Um servlet genérico deverá sobrepor este método e utilizar os objetos ServletRequest e ServletResponse recebidos para ler os dados da requisição e compor os dados da resposta, respectivamente. request response Container Servlet service()

Servlets HTTP Servlets genéricos servem como componentes para serviços do tipo requisição/resposta em geral: Não se limitam a serviços HTTP. Podem ser usados para estender, com componentes reutilizáveis, um serviço existente: É preciso implementar um container para rodar o servlet. Para serviços Web deve-se usar Servlets HTTP: API criada especificamente para lidar com características próprias do HTTP. Método service() dividido em métodos específicos para tratar os diferentes métodos do HTTP.

HttpServlet 2.5 API Classes e interfaces mais importantes do pacote javax.servlet.http: Interfaces: HttpServletRequest. HttpServletResponse. HttpSession. Classes abstratas: HttpServlet. Classes concretas: Cookie.

Servlet HTTP Para escrever um servlet HTTP, deve-se estender HttpServlet e implementar um ou mais de seus métodos de serviço, tipicamente: void dopost(httpservletrequest, HttpServletResponse) throws ServletException, IOException void doget(httpservletrequest, HttpServletResponse) throws ServletException, IOException import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ServletWeb extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getwriter(); response.setcontenttype("text/html"); out.println("<h1>hello, World!</h1>"); out.close(); } }

Métodos de Serviço HTTP (1/2) A classe HttpServlet redireciona os pedidos encaminhados para service() para métodos que refletem os métodos HTTP. Um servlet HTTP genérico deverá estender HttpServlet e implementar pelo menos um dos métodos doget() ou dopost(). request response Container Servlet service() doget() dopost()

Métodos de Serviço HTTP (2/2) Cliente HTTP Servidor HttpServlet service() dodelete() doget() dohead() dooptions() dopost() doput() dotrace()

Inicialização do Servlet HTTP A inicialização de um GenericServlet, como o HttpServlet, deve ser feita com a versão de init() sem argumentos ao invés de init(servletconfig). Todos os métodos de ServletConfig estão no servlet, pois GenericServlet implementa ServletConfig. public void init() throws ServletException { String driver = getinitparameter("jdbcdriver"); if (driver == null) { throw new UnavailableException("Configuração incorreta!"); } }

Parâmetros de Inicialização <web-app> <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>ybadoo.myservlet</servlet-class> <init-param> <param-name>jdbcdriver</param-name> <param-value>sun.jdbc.odbc.jdbcodbcdriver</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myservlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> </web-app>

Requisição HTTP Uma requisição HTTP feita pelo browser tipicamente contém vários cabeçalhos RFC822. Os métodos de HttpServletRequest permitem extrair informações de qualquer um deles: Pode-se também identificar o método e URL. GET / HTTP/1.1 Host: www.ybadoo.com.br User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; pt-br; rv:1.9.2.8) Gecko/20100723 Ubuntu/10.04 (lucid) Firefox/3.6.8 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: MOODLEID_=%25ED%25C3%251CC%25B7d If-Modified-Since: Sat, 04 Sep 2010 12:29:39 GMT If-None-Match: "b876ba-2075-4c823bb3" Cache-Control: max-age=0

Obtenção de Dados de Requisições HTTP Alguns métodos de HttpServletRequest: Enumeration getheadernames() obtém nomes dos cabeçalhos. String getheader(string name) obtém primeiro valor do cabeçalho. Enumeration getheaders(string name) todos os valores do cabeçalho. String getparameter(string name) obtém parâmetro HTTP. String[] getparametervalues(string name) obtém parâmetros repetidos. Enumeration getparameternames() obtém nomes dos parâmetros. Cookie[] getcookies() recebe cookies do cliente. HttpSession getsession() retorna a sessão. void setattribute(string name, Object value) define um atributo. Object getattribute(string name) recupera atributo chamado. String getmethod() retorna o método HTTP.

Resposta HTTP Uma resposta HTTP é enviada pelo servidor ao browser e contém informações sobre os dados anexados. Os métodos de HttpServletResponse permitem construir um cabeçalho. HTTP/1.1 200 OK Date: Sat, 04 Sep 2010 14:16:24 GMT Server: Apache Last-Modified: Mon, 26 Jul 2010 14:26:01 GMT Etag: "b86eac-304e-4c4d9af9" Accept-Ranges: bytes Keep-Alive: timeout=10, max=499 Connection: Keep-Alive Content-Type: text/html Content-Encoding: gzip Content-Length: 3276

Preenchimento de uma Resposta HTTP Alguns métodos de HttpServletResponse: void addheader(string name, String value) adiciona cabeçalho HTTP. void setcontenttype(string type) define o tipo MIME que será usado para gerar a saída (text/html, image/gif, entre outros). void sendredirect(string location) envia informação de redirecionamento para o cliente.. PrintWriter getwriter() obtém um Writer para gerar a saída. Ideal para saída de texto. ServletOutputStream getoutputstream() obtém um OutputStream. Ideal para gerar formatos diferentes de texto (imagens, por exemplo). void addcookie(cookie cookie) adiciona um novo cookie. String encodeurl(string url) envia como anexo da URL a informação de identificador de sessão (sessionid). void reset() limpa toda a saída inclusive os cabeçalhos. void resetbuffer() limpa toda a saída, exceto cabeçalhos.

doget() e dopost() Use doget() para receber requisições GET: Links clicados ou URL digitadas diretamente. Alguns formulários que usam GET (não aconselhado). Use dopost() para receber dados de formulários. Se quiser usar ambos os métodos, não sobreponha service() mas implemente tanto doget() como dopost(). public class Controller extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processar(request, response); } public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processar(request, response); } public void processar(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException {... } }

Parâmetros da Requisição HTTP Parâmetros são pares (nome=valor) que são enviados pelo cliente concatenados em strings separados por &: de_mail=siec%40ybadoo.com.br&de_password=1234567890 Parâmetros podem ser passados na requisição de duas formas: Se o método for GET, os parâmetros são passados em uma única linha no query string, que estende a URL após um "?". GET /siec/public/login/login.login.mtw?de_mail=siec%40ybadoo.com.br &de_password=1234567890 HTTP/1.1 Se o método for POST, os parâmetros são passados como um stream no corpo na mensagem (o cabeçalho Content-Length, presente em requisições POST informa o tamanho). POST /siec/public/login/login.login.mtw HTTP/1.1 Content-Type: application/x-www-form-urlencoded Content-Length: 51 de_mail=siec%40ybadoo.com.br&de_password=1234567890

Lendo Parâmetros da Requisição HTTP Caracteres reservados e maiores que ASCII-7bit são codificados em URLs: Ex: @ = %40 Formulários HTML codificam o texto ao enviar os dados automaticamente. Seja o método POST ou GET, os valores dos parâmetros podem ser recuperados pelo método getparameter() de ServletRequest, que recebe seu nome: String parametro = request.getparameter("nome"); Parâmetros de mesmo nome podem ser repetidos. Neste caso getparameter() retornará apenas a primeira ocorrência. Para obter todas use String[] getparametervalues(): String[] params = request.getparametervalues("nome");

Gerando uma Resposta HTTP Para gerar uma resposta, primeiro é necessário obter, do objeto HttpServletResponse, um fluxo de saída, que pode ser de caracteres (Writer) ou de bytes (OutputStream): Writer out = response.getwriter(); OutputStream out = response.getoutputstream(); Apenas um deve ser usado. Os objetos correspondem ao mesmo stream de dados Deve-se também definir o tipo de dados a ser gerado. Isto é importante para que o cabeçalho Content-type seja gerado corretamente e o browser saiba exibir as informações: response.setcontenttype("text/html"); Depois, pode-se gerar os dados, imprimindo-os no objeto de saída (out) obtido anteriormente.

Criação de Servlets Simples São necessárias quatro etapas para construir e usar um servlet: Codificar o servlet, usando a Servlet API. Compilar o servlet, usando o JAR que contém as classes da API (distribuído pelo software do Web Container). Implantar o servlet no servidor (Web Container). Executar o servlet, chamando-o pelo browser.

Compilação e Implantação Para compilar, use qualquer distribuição da API: O servlet.jar distribuído pelo Tomcat (common/lib/). O j2ee.jar distribuído no pacote JEE da Sun (lib/). O javax.servlet.jar do JBoss (server/default/lib/). Para implantar, copie as classes compiladas para um contexto existente no servidor: Jakarta-Tomcat (webapps/root/web-inf/classes). JBoss (server/default/deploy/).

Servlet 2.5 API Javadocs Bibliografia http://www.oracle.com/technetwork/java/javaee/servlet/index.html