1 / 92

Java Avançado

Material cedido por: Daniel Arraes Pereira dap@cin.ufpe.br. Java Avançado. Java Servlets. Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br. Servlets.

emelda
Download Presentation

Java Avançado

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Material cedido por: Daniel Arraes Pereira dap@cin.ufpe.br Java Avançado Java Servlets Guilherme Kely de Melo Oliveira gkmo@cin.ufpe.br Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br

  2. Servlets • É a tecnologia Java em resposta à CGI (Common Gateway Interface). São programas que rodam no servidor Web, atuando como camada intermediária entre uma requisição vinda de um cliente HTTP e banco de dados ou aplicações no servidor Web. Common Gateway Interface: É uma especificação que permite que um programa, escrito em uma linguagem de programação qualquer, possa responder a requisições HTTP encaminhadas por um servidor web.

  3. Servlets • Suas tarefas são: • Ler todos os dados enviados pelo usuário. • Gerar resultados. • Formatar os resultados. • Ajustar os parâmetros da resposta HTTP. • Enviar a resposta ao cliente.

  4. Servlets • Por que usá-los? • Facilidade de uso. • Facilidade de desenvolvimento. • Maturidade da linguagem Java. Servlets são classes Java. • Eficientes • Independentes de browsers. • Robustez, segurança, Multiplataforma, possuem praticamente toda a plataforma Java disponível.

  5. Servlets • Como usá-los? • Escreve uma classe que extenda a classe Servlet sobrescrevendo os métodos relativos ao tipos de requisição. • Cria a estrutura de dirétorios necessária e faz o deploy do servlet em tal estrutura. • Realiza o mapeamento do servlet em uma(s) URL através do deployment descriptor da aplicação

  6. Servlet Hello World public class HelloWorldServlet extends HttpServlet { protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Hi</title></head>"); out.println("<body>"); out.println("Hello World!!"); out.println("</body>"); out.println("</html>"); out.close(); } }

  7. Servlet Hello World - Deploy • webapps • ROOT – Contexto principal. URL default. • [Nome do contexto] • Arquivos JSP • META-INF • WEB-INF • classes – Classes da aplicação (Servlets, ...) • lib – bibliotecas específicas da aplicação. *.jar. • Deployment Descriptor (web.xml)

  8. Servlet Hello WorldDeployment Descriptor (web.xml) • Arquivo que faz o mapeamento entre URLs e Servlets além de configurações de segurança, eventos, filtros, ...

  9. Servlet Hello WorldDeployment Descriptor (web.xml) <?xml version="1.0"encoding="UTF-8"?> <web-app id="WebApp_ID"version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>HelloWorld</display-name> <servlet> <description></description> <display-name>HelloWorldServlet</display-name> <servlet-name>HelloWorldServlet</servlet-name> <servlet-class>HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>/HelloWorldServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

  10. Servlet Hello World • Executando • http://localhost:8080/HelloWorld/HelloWorldServlet

  11. Ciclo de vida de um Servlet • Antes que o Servlet esteja pronto para atender as requisições do cliente, o container precisa realizar algumas tarefas para levar o Servlet até um estado no qual este possa atender tais requisições.

  12. Ciclo de vida de um Servlet

  13. Ciclo de Vida de Um Servlet

  14. Método service()

  15. A interface ServletConfig

  16. Parâmetros de inicialização <web-app> <servlet> <servlet-name>exemplo</servlet-name> <servlet-class>curso.ExemploServlet</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> // preloading </servlet> </web-app>

  17. Servlets e requisições • Suportam todos os tipos de requisições. Mapeadas em chamadas de métodos na instancia do Servlet em questão. • GET – doGet(...) • POST – doPost(...) • PUT – doPut(...) • DELETE – doDelete(...) • TRACE – doTrace(...) • HEAD – doHead(...) • OPTIONS – doOptions(...)

  18. Servlets e requisições

  19. Servlets e requisições • Exemplos • GET http://www.cin.ufpe.br/servlet/ServletProcurar?numero=12&codigo=1 • POST <form method=“POST” action=“http://www.cin.ufpe.br/servlet/ServletProcurar”> <input type=“text” name=“numero”> <input type=“text” name=“codigo”> <input type=“submit”> </form>

  20. Servlets e requisições: analisando • Interface ServletRequest • Provê métodos de acesso ao conteúdo da requisição que são relevantes a qualquer protocolo. • Pacote javax.servlet.*; • Interface HttpServletRequest • Extende ServletRequest • Provê métodos relativos ao protocolo HTTP. • Pacote javax.servlet.http.*;

  21. ServletRequest

  22. HttpServletRequest

  23. Servlets e requisições: Exemplo protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { String nome = request.getParameter(“name”); int idade = Integer.parseInt(request.getParameter(“age”)); fachada.cadastrarCliente(new Cliente(nome, idade)); response.sendRedirect(“sucesso.jsp”); }

  24. Prática 1 • Escreva um servlet que receba o nome e o telefone do usuário e retorne tais dados formatados em uma string passada ao servlet como parâmetro de inicialização • Use o método estático format da classe String

  25. Servlets - Enviando respostas • Interface ServletResponse • Provê métodos de resposta que são relevantes a qualquer protocolo. • Pacote javax.servlet.*; • Interface HttpServletResponse • Extende ServletResponse • Provê métodos relativos ao protocolo HTTP. • Pacote javax.servlet.http.*;

  26. ServletResponse

  27. HttpServletResponse

  28. Servlets – Enviando Repostas:Exemplo protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("application/jar"); File f = new File("test.jar"); byte[] bytearray = new byte[(int) f.length()]; FileInputStream is = new FileInputStream(f); is.read(bytearray); OutputStream os = res.getOutputStream(); os.write(bytearray); os.flush(); }

  29. Prática 2 • Crie um servlet que retorne uma imagem.

  30. Contextos • O contexto de uma aplicação é, fisicamente, o conjunto de componentes, arquivos: recursos que a compõem. (dentro do diretório do contexto). • Toda aplicação web deve possui um contexto único. • http://localhost:8080/contexto/hello • No caso da API de J2EE, os contextos são representados pela classe ServletContext.

  31. ServletContext • Classe que representa o contexto de uma aplicação. • Serve para comunicação entre servlets da mesma aplicação (através do próprio contexto) e servlets de aplicações diferentes (acessando diferentes contextos) entre outras funcionalidades.

  32. ServletContext

  33. ServletContext

  34. ServletContext

  35. ServletContext

  36. Interface ServletContext • As maneiras mais comuns de acessá-la são: • Através da requisição: … = request.getServletContext() • Através do próprio servlet: … = this.getServletContext() • Através da configuração: … = config.getServletContext()

  37. Prática 3 • Mude o servlet do exercício passado para que este carregue a image como um recurso do contexto e para que descubra o mime da mesma em tempo de execução.

  38. Sessões : Introdução • Motivação: • Guardar informações entre requisições de um cliente • Problema: • HTTP não mantém estado. • Soluções. • Campos ocultos em formulário. • Cookies • Reescrita de URLs • Sessões

  39. Sessões • É uma série de interações request-response sem interrupções, ou seja, para cada requisição parte da sessão, o servidor pode identificar que a requisição vem do mesmo cliente • Características: • Armazenadas no lado do servidor. • Possibilidade de se armazenar objetos Java. • Única de cada cliente. • Normalmente implementadas indiretamente através de Cookies ou reescrita de URLs. • Representada pela classe HttpSession

  40. HttpSession • Classe que representa uma sessão. • Criação / Aquisição • HttpSession s = request.getSession(boolean create) • create = true – se a sessão não existir, esta é criada e depois retornada; caso exista é, simplesmente, retornada. • create = false – se a sessão não existir, retorna null; caso exista retorna a sessão existente.

  41. HttpSession : Exemplo protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ HttpSession session = request.getSession(true); Usuario user = (User) session.getAttribute("usuario"); if (user != null){ //Faça alguma coisa }else{ session.invalidate(); response.sendRedirect("login.jsp"); } }

  42. HttpSession : Métodos

  43. HttpSession : Métodos

  44. HttpSession : Métodos

  45. HttpSession • Pode-se definir o Timeout de uma sessão no deploymente descriptor da aplicação. <web-app> … <session-config> <session-timeout>30</session-timeout> </session-config> … <web-app>

  46. Sessões • Importante: • A sessão não é enviada a cada requisição / resposta (lento e inseguro). Apenas o ID da sessão é transmitido através de um cookie com nome JSESSIONID. • A API de servlets permite o uso de sessões mesmo que o navegador do usuário nao suporte cookies. É preciso passar o valor do JSESSIONID como um parâmetro especial da requisição. Isso pode ser feito utilizando o método HttpServletResponse.encodeURL(). (URL rewriting)

  47. Cookies • Dados permanentes mantidos em um browser do cliente entre várias sessões. • Informações do tipo nome / valor. • Usados para armazenar perfis de usuários entre outras funcionalidades.

  48. Cookie • Classe • javax.servlet.http.Cookie • Criação • Cookie c = new Cookie(“chave”, “valor”); • Obtenção • Cookie[ ] cs = request.getCookies(); • Persistindo • response.addCookie(cookie);

  49. Cookie • Por padrão, existem enquanto a sessão existir. • Pode-se configurar o tempo de expiração de um Cookie através do método setMaxAge(int intervalo) • Intervalo > 0: tempo de vida em segundos. • Intervalo = 0: apaga o cookie instantaneamente. • Intevalo < 0: remove o cookie ao fim da sessão

  50. Cookie : métodos

More Related