Sei sulla pagina 1di 6

Servlets ? Domíne-os!

(PARTE I)

Autor: Moacy Barbosa da Silva Jr.


(mbjunior)

Antes de tudo irei colocar uma frase que será motivacional para tudo que você queira
atingir um dia.

?...Ter confiança é a metade da luta pra conseguir alguma coisa.?

Bem, recomento antes de ler este tutorial dê uma olhada Aqui!

Objetivo
O objetivo deste tutorial é não só demistificar a tecnologia servlets, mas também torná-
lo íntimo da mesma.

Benchmark
Começamos apresentando tecnologias alternativas ao servlet para um breve
comparativo.

CGI ? (Common Gateway Interface)


Tecnologia onde qualquer requisição é necessário ser feito todo o processo de criação.
A linguagem que se popularizou para tal tecnologia foi Perl.

PHP
Tecnologia de código aberto quem vem tendo boa aceitação por parte de
desenvolvedores WEB.

ASP ? (Active Server Pages)


Tecnologia da Microsoft onde esta funciona através do container IIS também
proprietário.

ASP.NET ? (Active Server Pages)


Sucessora de ASP, esta tecnologia está agregada ao .NET Framework da Microsoft
onde este funciona sob a CLT(Common Language Runtime), semelhante a JVM.

JSP ? (Java Server Pages)


Tecologia que simplificou o desenvolvimento de aplicações WEB em Java, mas não
sucedeu servlets, pois em uma aplicação, você fatalmente necessitará das duas se
correlacionando.

O que Servlets tem a nos oferecer???

Desempenho: Diferente de CGI, não é preciso o processo de criação para cada


requisição.

Portabilidade: Como toda aplicação Java, você poderá migrar de SO no momento que
deseje que sua aplicação funcionará transparentemente.
Robustez: Você não precisa se procupar com destruição de objetos, coleta de resíduos
entre outras operações arquiteturais. Deixe a JVM fazer isso pra você!

Comercial: Java é uma tecnologia totalmente que se torna obiqua a cada dia que se
passa, por tanto, você obterá ganhos com isso $$$!!...

Como o container gerencia os Servlets.

Para realmente não ser preciso o processo de criação de um servet, toda requisição
vinda por parte de um cliente é analizada a assinatura do servlet em questão, caso este
coincida com a cópia do container, não será necessário o processo de criação. Uma
assinatura é composta da hora em que um servlet foi compilado pelo container e ainda
um pacote que identifica internamente a versão de compilação do servlet.

Ciclo de vida do Servlet

Pela especificação da tecnologia, existem serviços que são responsáveis pelo


gerenciamento do ciclo de vida de um servlet. Estes serviços provem criação,
recebimento de requisições e destruição.

init() - Método responsável pela inicialização do servlet, através deste, poderão ser
parametrizados um objeto responsável pela configuração de servlets ?
javax.servlet.ServletConfig ? onde este objeto carrega todos os parametros do
ambiente servlet. Estas configurações podem estar no descritor web.xml.
Um exemplo básico seria pôr a configuração para uma conexão de um banco onde um
servlet teria acesso a tais informações.

1. <?xml version="1.0" encoding="ISO-8859-1"?>


2. <!DOCTYPE web-app
3. PUBLIC "-//Sun Microsystems, Inc.//DTD Web
4. Application 2.3//EN"
5. "http://java.sun.com/dtd/web-app_2_3.dtd">
6.
7. <web-app>
8.
9. <display-name>Olá Mundo em Servlet!</display-name>
10. <description></description>
11.
12. <servlet>
13. <servlet-name>conection</servlet-name>
14.
15. <servlet-
class>br.com.javafree.tutorial.servlets.mbjunior.MBJuniorServletConection</ser
vlet-class>
16. <init-param>
17. <param-name>conectionURL</param-name>
18.
19. <param-value>jdbc:mysql://127.0.0.1:3306/db</param-value>
20. </init-param>
21. <init-param>
22. <param-name>driver</param-name>
23.
24. <param-value>org.gjt.mm.mysql.Driver</param-value>
25. </init-param>
26. <init-param>
27. <param-name>user</param-name>
28. <param-value>root</param-value>
29. </init-param>
30. </servlet>
31.
32. <servlet-mapping>
33. <servlet-name>conection</servlet-name>
34. <url-pattern>/servlet/conection</url-pattern>
35. </servlet-mapping>
36.
37. </web-app>

<?xml version="1.0" encoding="ISO-8859-1"?>


<!DOCTYPE w eb-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN"
"http://java.sun.com/dtd/w eb-app_2_3.dtd">

<w eb-app>

<display-name>Olá Mundo em Servlet!</display-name>


<description></description>

<servlet>
<servlet-name>conection</servlet-name>

<servlet-class>br.com.javafree.tutorial.servlets.mbjunior.MBJuniorServletConection</servlet-class>

Eu poderia ter um servlet responsável por conexões.


Seria mais ou menos assim.

1. package br.com.javafree.tutorial.servlets.mbjunior;
2.
3. import java.io.IOException;
4. import java.sql.Connection;
5. import java.sql.DriverManager;
6. import java.sql.SQLException;
7.
8. import javax.servlet.Servlet;
9. import javax.servlet.ServletConfig;
10. import javax.servlet.ServletException;
11. import javax.servlet.ServletRequest;
12. import javax.servlet.ServletResponse;
13.
14.
15. public class MBJuniorServletConection implements
16. Servlet {
17.
18. private static String CONECTION_URL = "conectionURL";
19. private static String DRIVER = "driver";
20. private static String USER = "user";
21.
22. private ServletConfig config;
23.
24. //método responsável por inicializar o servlet.
25. // aqui estou pegando o objeto responsável por obter
26. configurações do ambiente servlet.
27. public void init(ServletConfig config) throws
28. ServletException {
29. this.config = config;
30.
31. }
32.
33. //método responsável pelas requisições vindas do
34. cliente.
35. //Neste método irei obter minha conexão.
36. public void service(ServletRequest req,
37. ServletResponse resp)
38. throws ServletException,
39. IOException {
40.
41. //Irei obter meu valor parametrizados no descritor
42. atraves de chaves.
43. String conectionURL =
44. config.getInitParameter(CONECTION_URL);
45. String driver = config.getInitParameter(DRIVER);
46. String user = config.getInitParameter(USER);
47.
48. try {
49. //Carregadas as variaveis locais faça a conexão.
50. Class.forName(driver);
51. Connection connection =
52. DriverManager.getConnection(conectionURL,user,"");
53.
54. // Conexão efetuada...
55.
56. } catch (ClassNotFoundException e) {
57. throw new ServletException("O driver não está no
58. classpath da app.");
59. } catch (SQLException e) {
60. throw new ServletException("Erro na Conexão!!!");
61. }
62.
63.
64.
65.
66. }
67.
68. //método responsável pela destruição do servlet
69. public void destroy() {
70.
71. }
72.
73. /* (non-Javadoc)
74. * @see javax.servlet.Servlet#getServletConfig()
75. */
76. public ServletConfig getServletConfig() {
77. return this.config;
78. }
79.
80. /* (non-Javadoc)
81. * @see javax.servlet.Servlet#getServletInfo()
82. */
83. public String getServletInfo() {
84. return null;
85. }
86. }

package br.com.javafree.tutorial.servlets.mbjunior;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MBJuniorServletConection implements

É importante ressaltar que o método init só é invocado uma única vez quando o
container disponibilita o servlet mapeado.

sua assinatura é a seguinte:


public void init(ServletConfig config)throws
ServletException
Poderá ser lançada uma ServletException caso haja algum problema.

service() - método responsável pelo tratamento das requisições vindas por parte do
cliente.
Vale a pena ressaltar que este servlet só será invocado caso o servlet em questão esteja a
disposição para requisições. Este método possui a partir de sua especificação assinaturas
diferentes, mas este tópico será abordado no proximo tutorial, no momento iremos
considerar uma servlet generica possui tal assinatura:

public void service(ServletRequest


request,ServletResponse response) throws
SevletException,IOException
Ele poderá lançar uma ServletException casoo haja algum problema no contexto de
servlet e IOException caso haja problemas com recursos disponibilizados pelo
container.

destroy() - Método que é responsável por


destruir um servlet. Ele poderá ocorrer da seguinte forma:
- Por invocação do própio método por parte do cliente.
- Pelo container que ao identificar um servlet inativo
durante um determinado período.

Bem galera...
Essa foi a parte inicial, espero que todos tenham curtido, na proxima sessão
entenderemos mais profundamente os principais objetos da API e como eles poderão ser
úteis.
Até Mais!! :!: :!:

Autor: Moacy Barbosa da Silva Jr.


(mbjunior)

Potrebbero piacerti anche