Fundamentos de Servlets Conceitos e ciclo de vida Classes e Interfaces da API Exemplos de Servlets
Common Gateway Interface Aplicações Geração de documentos com conteúdo dinâmico Produzir resultados em sites de busca Gravar dados em arquivos ou SGBDs no servidor Forma O programa executa no lado do servidor Pode ser escrito em qualquer linguagem de programação Cada requisição pelo programa cria um novo processo idêntico na memória (ineficiente)
Common Gateway Interface Browser POST /cgi-bin/grava HTTP/1.0 accept:text/html user-agent: IE/6.0 content-type:application/x-www inum=11&qtty=1&price=300&fna me=maria&lname=joao&minit=c %C3+G%C3&addr=Av+Argemiro +Figueiredo,+985&cc=visa&ccn= 1234567&ccn=1234567 www.eu.com.br Servidor Web Script grava
Conceitos Um servlet é... Componente web escrito em Java capaz de atender a solicitações no modelo requisição-resposta O "CGI de Java" Vantagens de Servlets sobre CGI São multi-threaded Podem utilizar toda a API de Java A programação é orientada a objetos
Conceitos Ilustrando...
Codificação de Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class AloServlet extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException { } } resp.setcontenttype("text/html"); PrintWriter out = resp.getwriter(); out.println("<html><head><title>alo</title></head>"); out.println("<body><h1>alo Servlet</h1></body></html>");
Resultado da execução do Servlet
API de Servlets Métodos definidos em javax.servlet.servlet void init(servletconfig conf) void service(servletrequest req, ServletResponse resp) void destroy() ServletConfig getservletconfig() String getservletinfo() Alguns métodos de javax.servlet.http.httpservlet void doget(httpservletrequest req, HttpServletResponse resp) void dopost(httpservletrequest req, HttpServletResponse resp)
Ciclo de Vida de um HttpServlet O container recebe a requisição do cliente: Identifica, pela URL, a classe do servlet; Carrega a classe na memória; Instancia o servlet; Envia o método init() para o servlet. Com o Servlet instanciado e inicializado: O container cria um objeto HttpServletRequest e um HttpServletResponde e chama o método service() do servlet, passando os objetos como parâmetro; Este passo é repetido para cada requisiçãoresposta
Ciclo de Vida de um HttpServlet Por fim, quando o container é finalizado, ou quando há pouco espaço na memória, o Servlet é destruído: O container envia o método destroy() para que o Servlet realize sua faxina doméstica.
Ciclo de Vida de um HttpServlet O método service() sobreposto por HttpServlet determina qual método HTTP foi usado: Se GET, chama doget() Se POST, chama dopost()
Ciclo de Vida de um HttpServlet
Ciclo de Vida de um HttpServlet
Desenvolvimento de Servlet O desenvolvimento de aplicações web com servlets inclui os seguintes passos: Codificar o servlet; Compilar o servlet utilizando o arquivo JAR da API (e.g. servlet-api.jar); Implantar os arquivos.class no container; Ativar/testar o servlet utilizando um browser. A partir da especificação 2.2, a organização de servlets (e outros recursos) no container foi padronizada e chama-se Web Application.
Codificação de Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class AloServlet extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse resp) throws ServletException, IOException { } } resp.setcontenttype("text/html"); PrintWriter out = resp.getwriter(); out.println("<html><head><title>alo</title></head>"); out.println("<body><h1>alo Servlet</h1></body></html>");
Compilação e Implantação de Servlet Arquivo JAR no J2SE Obtém do container No Tomcat está em common/lib/servlet.jar Download em http://java.sun.com/products/servlets Compilação javac cp../servlets.jar;. AloServlet.java
Compilação e Implantação de Servlet Implantação no contexto raiz do Tomcat copiar MeuServlet.class para webapps/root/web- INF/classes Em webapps/root/web-inf/web.xml, colocar: <servlet> <servlet-name>alo</servlet-name> <servlet-class>aloservlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>alo</servlet-name> <url-pattern>/servlet/aloservlet</urlpattern> </servlet-mapping>
Testando o Servlet Num browser, digite a URL: http://servidor:8080/servlet/aloservlet Numa página HTML, ponha o link: <a href="http://servidor:8080/servlet/aloservlet"> Link </a> Num formulário HTML, especifique a ação: <form method="get action=" http://servidor:8080/servlet/aloservlet">... <input type="submit" value="ativar">
Resultado da execução do Servlet