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

Introdução Servlet Ciclo Vida - Tópicos Especiais em ... · 1)O utilizador vai a uma página feita com JSP. O browser web efetua o pedido através da Internet. 2)O pedido JSP é

Embed Size (px)

Citation preview

Servlet

Prof. Enzo Seraphim

Ciclo Vida

Exemplos

Servlet

Introdução

Visão Geral

▼ São objetos de uma subclasse de javax.servlet (javax.servlet.HttpServlet).

▼ Possuem um ciclo de vida.

▼ Incluem em seu código, as tags HTML de página Web.

▼ Atuam como uma camada intermediária entre as chamadas de um web browser (cliente) e os bancos de dados e/ou aplicações no servidor web.

▼ São executados por um servidor web.

JSP e Servlets

Cliente

Servidor Web

Documentos ComunsMáquina Servlet

Tradutor JSP

Documentos JSP

Servelts compilados

Requisição HTTP Resposta HTTP

1)O utilizador vai a uma página feita com JSP. O browser web efetua o pedido através da Internet.

2)O pedido JSP é enviado para o servidor web.

3)O servidor web reconhece o pedido especial (extensão .jsp) e entrega o JSP ao JSP Servlet Engine.

4)Se o JSP é acessado pela primeira vez, é processado, caso contrário passa para o passo 7.

Arquitetura JSP

5)O próximo passo é gerar um Servlet especial do JSP. Todo o HTML necessário é convertido em declarações println.

6)O código-fonte do servlet é compilado numa classe

7)É instanciado o Servlet, chamando os métodos init e service.

8)O código HTML produzido pelo Servlet é enviado via Internet.

9)Os resultados HTML são visualizados no web browser do utilizador.

Arquitetura JSP

<%@ page errorPage="myerror.jsp" %> <%@ page import="com.foo.bar" %> <html> <head> <%! int serverInstanceVariable = 1;%> <% int localStackBasedVariable = 1; %> <table> <tr><td><%= toStringOrBlank( "expanded inline data " + 1 ) %></td></tr>

package jsp_servlet;import com.foo.bar; … import javax.servlet.*; … class _myservlet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage { int serverInstanceVariable = 1; … public void _jspService( … ) throws … { javax.servlet.ServletConfig config = … Object page = this; PageContext pageContext = … javax.servlet.jsp.JspWriter out = … HttpSession session = … try { out.print( "<html>\r\n" ); out.print( "<head>\r\n" ); … // From <% int localStackBasedVariable = 1; %> int localStackBasedVariable = 1; … out.print( "<table>\r\n" ); out.print( " <tr><td>" ); out.print( toStringOrBlank( "expanded inline data " + 1 ) ); out.print( " </td></tr>\r\n" ); … } catch ( Exception _exception ) { // Redirect to error page in // <%@ page errorPage="myerror.jsp" %> }}}

Servidor Web

▼ Servidores JEE 6:– GlassFish-Sun– JEUS-TmaxSoft– Jboss*-RedHat

▼ Web container:– TomCat-Apache

▼ Servidores JEE 5:– GlassFish-Sun– JEUS-TmaxSoft– Jboss*-RedHat– Geronimo-Apache – WebSphere-IBM– WebLogic-Oracle

Servlet

Prof. Enzo Seraphim

Ciclo Vida

Exemplos

Servlet

Introdução

Pacote javax.servlet

▼ Classe

– GenericServlet

– HttpServlet

▼ Exceções

– ServletException

– UnavailableException

▼ Interfaces

– RequestDispatcher

– Servlet

– ServletConfig

– ServletContext

– ServletRequest

– ServletResponse

Classe herda de HttpServlet

▼ Todos os servlets devem implementar, direta ou indiretamente, a interface Servlet.

▼ Duas class implementam Servlets:▼ abstract class GenericServlet

implements Servlet– class MeuServlet extends GenericServlet

▼ abstract class HttpServlet implements Servlet– class MeuServlet extends HttpServlet

Classe HttpServlet

▼ Suas subclasses definem servlets aptos a operar com padrões HTTP de solicitação e resposta, em um site qquer cujo servidor tenha o devido suporte a Java.

▼ No servlet a ser escrito, deve estar sobreposto pelo menos um método da classe HttpServlet, geralmente:– doGet() ou do Post().

Classe HttpServlet

▼ service()– Implementação do método service() da

interface Servlet.– Recebe a solicitação HTTP padrão e a

envia ao método doQualquerCoisa implementado na classe.

▼ doGet()– Permite ao servlet operar com

solicitações HTTP efetuadas pelo método get (Query String) do protocolo HTTP.

▼ doPost()– Permite ao servlet operar com

solicitações efetuadas pelo método post().

▼ doDelete()– Permite ao servlet deletar a solicitação

(request).▼ doHead()

– Recebe a solicitação do método service() e manipula-a.

▼ doOptions(), doPut() e doTrace– Permite ao servlet operar com solicitações

tipo OPTIONS, PUT e TRACE.▼ getLastModified()

– Retorna um intervalo de tempo, em milisegundos, informando a última modificação do objeto HttpServletRerquest.

Classe HttpServlet

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <form method="POST" action="OlaMundo"> <input type="submit" value="Clique aqui"> </form></html>

Exemplo HTML

import java.io.*;import java.net.*;import javax.servlet.*;import javax.servlet.http.*;public class OlaMundo extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet OlaMundo</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Ola Mundo</h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}

doGet (Enviar dados Browser)

Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 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_5.xsd"> <servlet> <servlet-name>OlaMundo</servlet-name> <servlet-class>br.edu.unifei.servlet.OlaMundo</servlet-class> </servlet> <servlet-mapping> <servlet-name>OlaMundo</servlet-name> <url-pattern>/OlaMundo</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

Servlet

Prof. Enzo Seraphim

Ciclo Vida

Exemplos

Servlet

Introdução

Ciclo de Vida

init()

service()

destroy()

Servidor Web

Chamado após init()

termina a execução

Envia dados

Recebe dadosCliente Web

Interface Servlet

▼ void init (ServletConfig config)– Automaticamente invocado, somente

uma vez, durante o ciclo de execução do servlet, para inicializá-lo.

▼ ServletConfig getServletConfig()– Retorna uma referência para um objeto

que implementa a interface ServletConfig (fornece acesso às informações de configuração do servlet).

Interface Servlet

▼ void service (ServletRequest request, ServletResponse response)– Primeiro método chamado em cada

servlet para responder a uma solicitação do cliente.

▼ String getServletInfo()– Retorna uma string que contém

informações do servlet, como autor e versão.

▼ void destroy ()– Chamado qdo um servlet é finalizado

pelo servidor web em que está sendo executado.

Interfaces javax.servlet.http

▼ HttpServletRequest– Subinterface de ServletRequest, para

suporte a requisições de clientes via protocolo HTTP.

▼ HttpServletResponse– Subinterface de ServletResponse, para

suporte a operações de envio de resposta via Http.

▼ HttpSession– Interface que fornece suporte para o

estabelecimento e gerenciamento de sessões.

JavaServer PageExemplo Locadora

Prof. Enzo Seraphim

-login:String-cpf:String-nome:String

-id:int-locacao:Date-devolucao:Date

-codigo:int-nome:String

Cliente

Locacao

Filme

*

-login:String-cpf:String-nome:String

-id:int-locacao:Date-devolucao:Date

-codigo:int-nome:String

*

package br.edu.unifei.bd.locadora;

import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;

@Entitypublic class Filme {

@Id @GeneratedValue private int codigo; private String nome; //... Get´s e Set´s}

Persistência - Filme

Cliente Locacao Filme

<html> <head> <title>Cliente</title> </head> <body> <FORM ACTION="CadFilme" METHOD="POST"> Nome : <INPUT TYPE="TEXT" NAME="wwwNome"><BR> <INPUT TYPE="SUBMIT" VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Apagar"> </FORM> </body></html>

HTML - Filme

Servlet - Clientepublic class CadFilme extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SessionFactory sfac = new Configuration(). configure().buildSessionFactory(); Session se = sfac.openSession(); Transaction tx = se.beginTransaction(); Filme f = new Filme(); f.setNome(request.getParameter("wwwNome")); se.save(f); tx.commit(); se.close(); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head><title>Sucesso</title></h'ead>"); out.println("<body> out.println("<h2>sucesso</h2>"); out.println'("<a href=\"index.jsp\">Principal</a>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}

Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 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_5.xsd"> <servlet> <servlet-name>CadFilme</servlet-name> <servlet-class>br.edu.unifei.servlet.CadFilme</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadFilme</servlet-name> <url-pattern>/CadFilme</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

-login:String-cpf:String-nome:String

-id:int-locacao:Date-devolucao:Date

-codigo:int-nome:String

Cliente Locacao Filme

*

package br.edu.unifei.bd.locadora;

import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.OneToMany;

@Entitypublic class Cliente {

@Id private String login; private String CPF; private String nome;

@OneToMany private Set<Locacao> locacoes = new HashSet<Locacao>();

//... Get´s e Set´s}

Persistência - Cliente

<html> <head> <title>Cliente</title> </head> <body> <FORM ACTION="CadCliente" METHOD="POST"> Login: <INPUT TYPE="TEXT" NAME="wwwLogin"><BR> CPF: <INPUT TYPE="TEXT" NAME="wwwCpf"><BR> Nome: <INPUT TYPE="TEXT" NAME="wwwNome"><BR> <INPUT TYPE="SUBMIT" VALUE="Enviar"> <INPUT TYPE="RESET" VALUE="Apagar"> </FORM> </body></html>

HTML - Cliente

Servlet - Clientepublic class CadCliente extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { SessionFactory sfac = new Configuration(). configure().buildSessionFactory(); Session se = sfac.openSession(); Transaction tx = se.beginTransaction(); Cliente c = new Cliente(); c.setLogin(request.getParameter("wwwLogin")); c.setCpf(request.getParameter("wwwCpf")); c.setNome(request.getParameter("wwwNome")); se.save(c); tx.commit(); se.close(); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head><title>Sucesso</title></h'ead>"); out.println("<body> out.println("<h2>sucesso</h2>"); out.println'("<a href=\"index.jsp\">Principal</a>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } }}

Arquivo web.xml<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" 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_5.xsd"> <servlet> <servlet-name>CadFilme</servlet-name> <servlet-class>br.edu.unifei.servlet.CadFilme</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadFilme</servlet-name> <url-pattern>/CadFilme</url-pattern> </servlet-mapping> <servlet> <servlet-name>CadCliente</servlet-name> <servlet-class>br.edu.unifei.servlet.CadCliente</servlet-class> </servlet> <servlet-mapping> <servlet-name>CadCliente</servlet-name> <url-pattern>/CadCliente</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>

Servlet

Prof. Enzo Seraphim

Os logotipos, marcas comerciais e nomes de produtos citados nesta publicação tem apenas

o propósitos de identificação e podem ser marcas registradas

de suas respectivas companhias.