Trabalhando com Servlet

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

SERVLETS. Introdução UNIDADED

Tutorial Jogo da Velha WEB

JavaScript Fundamental e Servlet Fundamental

Lista de exercícios I - RESPOSTAS Servlets e banco de dados

EXERCÍCIOS DE REVISÃO DE CONTEÚDO QUESTÕES DISSERTATIVAS

Agilizando o processo de redeploy de aplicações Java

Prof. Roberto Desenvolvimento Web Avançado

Universidade São Judas Tadeu. Faculdade de Tecnologia e Ciências Exatas. Sistemas de Informação 3ASIN

Estrutura do Projeto - Trabalhando com Banco de Dados

João Carlos Pinheiro. Julho / 2004

Java Server Pages (JSP)

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

Java Servlets. Leonardo Gresta Paulino Murta

!" # # # $ %!" " & ' ( 2

Java para WEB com Struts 2 e Hibernate

Java na WEB Servlet. Sumário

PROJETO WEB: Java. Prof Fernando Gomes

Autenticação e Autorização

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

Implementar um exemplo de relacionamento entre classes um para muitos (1:N) e um para um (1:1). Sistema para uma Promotora de Evento Agenda Anual

Desenvolvimento de Sistemas Web

Servlets.

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

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

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

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

Java para Desenvolvimento Web

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

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

Aula 7: Servlets (II)

Surgindo em 1997 a API Java Servlet proporciona ao desenvolvedor a possibilidade de adicionar conteúdo dinâmico em um servidor web usando a

INSTALAÇÃO E USO DO GOOGLE APP ENGINE PLUGIN utilizando o Eclipse Galileo

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Faculdades Integradas Santa Cruz. Tutorial de Java MVC WEB Criando uma tela de Login com Banco de Dados

Servlets Java para Desenvolvimento Web

LISTA 01. Conteúdo. Questões

Java para WEB. Servlets

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

Aplicativos Web com Orientação a Objetos

JSP (JAVASERVER PAGES)

Tutorial 1 Configuração Apache Tomcat no NetBeans 8.0 (passo a passo)

Projeto webservicejax

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

Java II. Sérgio Luiz Ruivace Cerqueira

Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

Programação para Internet

Java Servlets. Leonardo Gresta Paulino Murta

Tutorial. Começando a Criar Aplicativos SMS

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

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

JSP e Servlet Princípio de MVC

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

DESENVOLVIMENTO DE SISTEMAS WEB. Lista de Exercícios AV1-01. Luiz Leão

Desenvolvimento Web TCC Turma A-1

INTRODUÇÃO À TECNOLOGIA SERVLETS

UNIDADE II Sistemas Cadastrais com acesso a Banco de Dados

Registo de condutor (Protótipo funcional) Página apresentada ao utilizador

1. Crie um banco de dados (no MySQL) chamado produtos e um tabela produto. Realise as inserções na tabela produto de acordo com os scripts abaixo.

DESENVOLVIMENTO DE SISTEMAS WEB UNIDADE I Criação de Aplicativos Web. Luiz Leão

Prof. Fellipe Aleixo

INTRODUÇÃO À TECNOLOGIA SERVLETS

Mini-Tutorial. Como criar relatórios Java para Web com JasperReports e ireport por Roberto J. Furutani 20/07/2005

Curso de HTML aula 4. Sumário. 1 Formulários. 1.1 Construindo formulários com o FORM. 1.2 Método:

HTML: FORMULÁRIOS SUMÁRIO. Conceito Tag FORM Tag INPUT Tag BUTTON Tag TEXTAREA Tag SELECT

TUTORIAL JSP & SERVLET

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

Programação Web 2:! Introdução a JSP! Mestrado em Engenharia Informática Universidade do Minho! 290! Deliver information, not just data

Autoria Web. Professor: Diego Oliveira. Conteúdo 03: Tags de Formulário

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

Criando e Entendendo o Primeiro Servlet Por: Raphaela Galhardo Fernandes

PROGRAMAÇÃO SERVIDOR RECURSOS ADICIONAIS EM SISTEMAS WEB DOS SERVLETS. Prof. Dr. Daniel Caetano

Figura 1: Eclipse criação de um Dynamic Web Project

J550. Servlets. Helder da Rocha

Gerador de código JSP baseado em projeto de banco de dados MySQL

Java Server Pages. O código HTML pode indicar o método de arranque do servlet gerado por um JSP : doget ou dopost.

SIST706 Sistemas Distribuídos

Unidade 11: Sessão e Login

Java TM Servlets. Java e Engenharia de Software Orientada a Objetos. por Jorge H. C. Fernandes Julho de 1999

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

Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira

Método de Acesso e Integração da Biblioteca Virtual V.1.2 Pearson Sistemas Brasil

CETEC Centro Paula Souza

A Primeira Aplicação Web com Servlets

Prática Sobre Servlets e JSP

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

Desenvolvimento Web com JSP/Servlets

Desenvolvimento Web TCC Turma A-1

UNIDADE II JAVA SERVLETS

Web Design Aula 10: Formulários - Parte2

Curso de Java. Geração de Páginas WEB através de JSP. Todos os direitos reservados Klais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE Ficha de Expectativa de Resposta da Prova Escrita

Formulários são áreas onde se inserem campos que permitem uma troca de informações maior entre usuários e desenvolvedores de sites HTML Até o momento,

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

Informática I. Aula 8. Aula 8-19/09/2007 1

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

if( document.dados.tx_ .value=="" document.dados.tx_ .value.indexof('.

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

Transcrição:

Trabalhando com Servlet Primeiro Servlet O primeiro passo a ser dado é criar uma classe Java como qualquer outra. Essa nova classe criada deve estender a classe abstrata HttpServlet pertencente ao pacote javax.servlet.http. public class PrimeiroServlet extends HttpServlet{ O exemplo acima pode ser considerado um Servlet, contudo não funcional ainda. Além de importar a classe HttpServlet, devemos importar também as seguintes classes: java.io.ioexception; javax.servlet.servletexception; javax.servlet.http.httpservletrequest; javax.servlet.http.httpservletresponse; Além de importar as classes acima, o Servlet deve sobrescrever um dos métodos abaixo listados; podendo sobrescrever os dois. protected void dopost(httpservletrequest request, HttpServletResponse response)throws ServletException, IOException; protected void dopost(httpservletrequest request, HttpServletResponse response)throws ServletException, IOException; O método doget será responsável por tratar as requisições enviadas via get, isto é, os parâmetros são enviados fazendo parte da url da requisição. Esse formato de envio tem a vantagem de ser facilmente criado e entendido, contudo só podem ser passados 255 caracteres de informações. O método dopost será responsável por tratar as requisições enviadas via post, neste caso a quantidade de informações é praticamente ilimitado de informações, podendo ser também enviados arquivos binário; a desvantagem é que o envio de dados dever ser feito através de formulários HTML. Caso uma requisição não tenha parâmetros, esta deve ser tratada através do método doget; Observe que os dois métodos recebem dois parâmetros que são- um objeto HttpServletRequest que modela as requisições e o HttpServletResponse que modela as respostas. Nosso Servlet de exemplo está praticamente pronto, o último quesito diz respeito ao registro do Servlet no nosso servidor de aplicação. Atualmente, existem duas formas de se fazer tal procedimento. 1. O primeiro seria inserir a tag Servlet web.xml, como no exemplo abaixo: 1

<Servlet> <servlet-name>primeiroservlet</servlet-name> <!-- nome do Servlet dentro do web.xml --> <servlet-class>primeiroservlet</servlet-class> <!-- nome da classe do Servlet -- > </servlet> <servlet-mapping> <servlet-name>primeiroservlet</servlet-name> <!-- nome do servlet dentro do web.xml --> <url-pattern>meuprimeiroservlet</url-pattern><!-- nome que será mapeado na url --> </servlet-mapping> 2. A partir da especificação JSR-315 (Servlet 3), é possível registrar o Servlet através de anotações, então, no lugar de usar arquivo de configuração web.xml poderíamos inserir a seguinte anotação antes da definição da classe: @WebServlet("/meuPrimeiroServlet") Lembrando que para poder utilizar a anotação citada, devemos importar a classe javax.servlet.annotation.webservlet. No caso da utilização de anotações, a versão final do nosso arquivo seria: import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/meuPrimeiroServlet") public class Teste extends HttpServlet { private static final long serialversionuid = 1L; protected void dopost(httpservletrequest request, HttpServletResponse response)throws ServletException, IOException { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { Para executar nosso Servlet, clique no menu Executar/Executar Arquivo. Observe que a url da nossa aplicação é: Nome do projeto http://localhost:8084/aula1/meuprimeiroservlet Caminho do servidor Nome do Servlet definido com a anotação @WebServlet 2

Apesar de plenamente funcional, nosso Servlet ainda não apresenta nenhum resultado; com o intuito de resolvermos esse problema, teremos que escrever uma resposta. Primeiramente, importe as classes: java.io.printwriter No interior do método doget insira as linhas: //Indica que a resposta será text/html e utiliza a codificação de caracteres UTF-8 response.setcontenttype("text/html;charset=utf-8"); //Cria o objeto responsável por escrever a resposta para o cliente PrintWriter out = response.getwriter(); out.println("<title>meu primeiro Servlet</title>"); out.println("<h1>meu primeiro Servlet</h1>"); Versão final do nosso Servlet: import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/meuPrimeiroServlet") public class Teste extends HttpServlet { private static final long serialversionuid = 1L; protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<title>meu primeiro Servlet</title>"); 3

out.println("<h1>meu primeiro Servlet</h1>"); Recebendo parâmetros Os principais métodos utilizados para recebimento e manipulação de parâmetros são: String getparameter(string nomedoparametro) Retorna o valor associado ao determinado parâmetro. String[] getparametervalues(string nomedoparametro) Retorna todos os valores associados ao determinado parâmetro. (List boxes, Check boxes) Com o intuito de exibir a utilização dos dois métodos citados, iremos criar duas páginas HTML e um Servlet. A primeira página possui um formulário que permite ao usuário gerar jogos aleatórios para Mega Sena. Para isso deve ser criada em Páginas Web uma arquivo HTML com o nome loteria.html. Abaixo, podemos ver esse arquivo. <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>loteria</title> </head> <body> <h3>sistema de geração de números para loteria</h3> <form action="/segundoservlet"> <table> <tr> <td>nome:</td> <td><input type="text" name="nome" /> </td> </tr> <tr> <td>quantos números você quer jogar:</td> <td><input type="text" name="quantidadedenumeros" /> </td> </tr> <tr> <td>quantas apostas você quer fazer:</td> <td><input type="text" name="quantidadedeapostas" /> </td> </tr> <tr> <td colspan="2"><input type="submit" value="enviar" /> </td> </tr> 4

</table> </form> </body> </html> Como não foi informado em nosso formulário o método de submissão, este será o padrão que é post. O código a seguir apresenta nosso segundo Servlet, que criará a resposta adequada para a requisição recebida. import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/SegundoServlet") public class SegundoServlet extends HttpServlet{ protected void doget(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException { //O primeiro passo é capturar os atributos String nome = req.getparameter("nome"); String quantidadedenumeros = req.getparameter("quantidadedenumeros"); String quantidadedeapostas = req.getparameter("quantidadedeapostas"); String //Note que o método getparameter trata todos os valores recebidos como //Temos agora que converter esses valores em inteiros int quantidadedenumerosint = Integer.parseInt(quantidadeDeNumeros); int quantidadedeapostasint = Integer.parseInt(quantidadeDeApostas); //String que receberá o conteúdo a ser exibido no body da resposta String resposta = "<h1> "+nome+" suas apostas</h1>"; //Bloco onde serão gerados os números for(int i = 0; i < quantidadedeapostasint; i++){ resposta += "<b>aposta "+ (i+1) + "</b>: "; for(int j = 0; j < quantidadedenumerosint; j++){ resposta += ((int) (Math.random()*59))+1; ; if(j==quantidadedenumerosint-1){ resposta += "<br/>"; else{ resposta += ";"; 5

resp.setcontenttype("text/html;charset=utf-8"); PrintWriter out = resp.getwriter(); out.println("<title>loteria</title>"); out.println(resposta); Para exemplificar a utilização do método getparametervalues, usaremos outro formulários HTML, que irá questionar que itens de consumo ele possui em casa. Nesse exemplo, passaremos os atributos por post. <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>pesquisa</title> </head> <body> <form action="segundoservlet" method="post"> <fieldset> <legend>pesquisa</legend> None:<input type="text" name="nome"/><br/> Telefone:<input type="text" name="fone"/><br/> Quais dos itens você tem em casa?<br/> <input type="checkbox" name="iten" value="aparelho de DVD" /> Aparelho de DVD<br/> <input type="checkbox" name="iten" value="aparelho de som" /> Aparelho de som<br/> <input type="checkbox" name="iten" value="geladeira Duplex" /> Geladeira Duplex<br/> <input type="checkbox" name="iten" value="microondas" /> Microondas<br/> <input type="checkbox" name="iten" value="máquina de lavar " />Máquina de lavar <br/> <input type="checkbox" name="iten" value="telefone sem fio" />Telefone sem fio <br/> <input type="checkbox" name="iten" value="tv de LCD" />TV de LCD <br/> <input type="checkbox" name="iten" value="notebook"/>notebook<br/> <input type="submit" value="enviar"> </fieldset> </form> </body> </html> Para tratar a requisição enviada para pelo formulário acima descrito, sobrescreveremos o método dopost, como a seguir: 6

protected void dopost(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException { //O primeiro passo é capturar os atributos únicos String nome = req.getparameter("nome"); String telefone = req.getparameter("fone"); //Para o caso dos itens selecionados devemos usar o método //getparametervalues que devolve // uma Array de Strings com os valores selecionados String itens[] = req.getparametervalues("iten"); //String que receberá o conteúdo a ser exibido no body da resposta String resposta = "<h1> "+nome+" você selecionou os itens: </h1><br/>"; //Bloco onde serão gerados os números for(string s: itens){ resposta += s + "<br/>"; resposta += "<br/><br/><h3>entraremos em contato através do telefone: "+telefone+"</h3>"; resp.setcontenttype("text/html;charset=utf-8"); PrintWriter out = resp.getwriter(); out.println("<title>pesquisa</title>"); out.println(resposta); Redirecionamento no fluxo de páginas Para se fazer redirecionamento com Servlet, temos, principalmente, duas formas. A primeira utiliza o método sendredirect, existente nos objetos HttpServletResponse; a outra forma é utilizar o método forward dos objetos RequestDispatcher. A diferença entre os dois métodos é que o segundo pode repassar a requisição recebida para um outro Servlet, enquanto no primeiro a requisição é perdida. Vamos criar uma página html de erro (erro.html), que será alvo do redirecionamento, caso no nosso primeiro exemplo o usuário digite um valor numérico que gere uma exceção o fluxo será direcionado para essa página de erro. <html> <head> 7

<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>erro</title> </head> <body> <h1 style="color: red;">ocorreu uma exceção!</h1> </body> </html> Para que o fluxo seja redirecionado, devemos tratar as conversões de números existentes no método doget, como se segue. int quantidadedenumerosint = 0; int quantidadedeapostasint = 0; try{ quantidadedenumerosint = Integer.parseInt(quantidadeDeNumeros); quantidadedeapostasint = Integer.parseInt(quantidadeDeApostas); catch (Exception e) { //Redirecionamos caso ocorra uma exceção resp.sendredirect("erro.html"); A segunda forma de redirecionamento será demonstrado no método dopost. Nesse caso, redirecionaremos para um novo Servlet Erro, que exibirá uma mensagem caso o usuário não selecione pelo menos um item. Devemos importar a classe: javax.servlet.requestdispatcher. if(itens == null){ RequestDispatcher rd = req.getrequestdispatcher("erro"); rd.forward(req, resp); Nosso Servlet de Erro: import java.io.ioexception; import java.io.printwriter; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; @WebServlet("/Erro") public class Erro extends HttpServlet { protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); out.println("<title>pesquisa</title>"); //Nome que o nome passado para Segundo Servlet está //disponível pois a requisição em que o atributo estava inserido foi 8

//repassado para o Servlet Erro out.println(request.getparameter("nome")); 9