Anda di halaman 1dari 85

1 de 85

ndice de contenido
1. Introduccin......................................................................................................................................................4
1.1 JSP...........................................................................................................................................................4
1.2 Servlet......................................................................................................................................................4
1.3 Servidores de aplicaciones.......................................................................................................................4
1.3.1 WebSphere......................................................................................................................................5
1.3.2 GlassFish.........................................................................................................................................5
1.3.3 Tomcat.............................................................................................................................................6
1.3.4 JBoss...............................................................................................................................................7
2. Modelos J2EE - JEE.........................................................................................................................................9
2.1 Modelo J2EE..........................................................................................................................................10
2.2 Modelo JEE............................................................................................................................................12
2.2.1 Comunicacin en JEE...................................................................................................................13
2.2.2 Componentes Web........................................................................................................................14
2.2.3 Componentes de negocio...............................................................................................................14
2.2.4 EIS.................................................................................................................................................15
2.2.5 Contenedores JEE.........................................................................................................................15
2.3 Historia...................................................................................................................................................17
3. JSP..................................................................................................................................................................18
3.1 JSP.........................................................................................................................................................18
3.2 Scriptlets................................................................................................................................................19
3.3 Declaraciones.........................................................................................................................................20
3.4 Atributos................................................................................................................................................22
3.4.1 import............................................................................................................................................22
3.4.2 contentType...................................................................................................................................22
3.4.3 isThreadSafe .................................................................................................................................22
3.4.4 session...........................................................................................................................................23
3.4.5 buffer ............................................................................................................................................23
3.4.6 autoFlush ......................................................................................................................................23
3.4.7 errorPage ......................................................................................................................................23
3.4.8 isErrorPage ...................................................................................................................................23
3.4.9 Ejemplo.........................................................................................................................................23
3.4.10 include.........................................................................................................................................26
3.4.11 include y flush.............................................................................................................................27
3.5 request....................................................................................................................................................29
4. Servlet.............................................................................................................................................................31
4.1 Estructura bsica....................................................................................................................................31
4.2 Hola Mundo...........................................................................................................................................32
4.3 Mtodos.................................................................................................................................................36
4.3.1 String getParameter(String name).................................................................................................36
4.3.2 String[ ] getParameterValues(String name)..................................................................................40
5. Encapsulacin (Java Bean).............................................................................................................................43
5.1 Mtodos accesadores: get......................................................................................................................43
5.2 Mtodos mutadores: set.........................................................................................................................43
5.3 Ejemplo..................................................................................................................................................44
6. JDBC..............................................................................................................................................................46
6.1 Qu la API de JDBC 2.0 Incluye.........................................................................................................46
6.2 Qu es la API de JDBC?......................................................................................................................47
6.3 Qu hace la API de JDBC hacer?........................................................................................................48
6.4 Conexin de Informacin general..........................................................................................................48
6.5 Establecer una conexin.........................................................................................................................48
6.6 URL de Uso General..............................................................................................................................49
6.7 JDBC URL.............................................................................................................................................50
6.8 Liberacin DBMS Recursos..................................................................................................................50
6.9 DriverManager Informacin general......................................................................................................51
6.10 Crear una conexin..............................................................................................................................51

2 de 85

6.11 Eliminar datos......................................................................................................................................58


6.12 Actualiza registro.................................................................................................................................62
6.13 Listar informacin................................................................................................................................71
7. Instalacin de PostgreSQL.............................................................................................................................75

3 de 85

1. Introduccin
1.1

JSP

JavaServer Pages (JSP) es una tecnologa Java que permite generar contenido dinmico para web,
en forma de documentos HTML, XML o de otro tipo.
Esta tecnologa es un desarrollo de la compaa Sun Microsystems. La Especificacin JSP
1.2 fue la primera que se liber y en la actualidad est disponible la Especificacin JSP 2.1.
Las JSP's permiten la utilizacin de cdigo Java mediante scripts. Adems, es posible
utilizar algunas acciones JSP predefinidas mediante etiquetas. Estas etiquetas pueden ser
enriquecidas mediante la utilizacin de Bibliotecas de Etiquetas (TagLibs o Tag Libraries) externas
e incluso personalizadas.
El sitio oficial es:
http://java.sun.com/products/jsp/

1.2

Servlet

Un servlet es un objeto que se ejecuta en un servidor o contenedor JEE, especialmente diseado


para ofrecer contenido dinmico desde un servidor web, generalmente HTML. Otras opciones que
permiten generar contenido dinmico son con los lenguajes ASP, PHP, JSP (un caso especial de
servlet) y Python. Forman parte de JEE (Java Enterprise Edition), que es una ampliacin de JSE
(Java Standard Edition).
El uso ms comn de los servlets es generar pginas web de forma dinmica a partir de los
parmetros de la peticin que enve el navegador web.
GlassFish v3 implementa la especificacin de Java Servlet 3.0 y GlassFish v2.1 implementa
la especificacin de Java Servlet 2.5
El sitio oficial es:
http://java.sun.com/products/servlet/reference/index.html

1.3

Servidores de aplicaciones

En informtica, se denomina servidor de aplicaciones a un servidor en una red de computadores


que ejecuta ciertas aplicaciones.
Usualmente se trata de un dispositivo de software que proporciona servicios de aplicacin a
las computadoras cliente. Un servidor de aplicaciones generalmente gestiona la mayor parte (o la
totalidad) de las funciones de lgica de negocio y de acceso a los datos de la aplicacin. Los

4 de 85

principales beneficios de la aplicacin de la tecnologa de servidores de aplicacin son la


centralizacin y la disminucin de la complejidad en el desarrollo de aplicaciones. Si bien el trmino
es aplicable a todas las plataformas de software, hoy en da el trmino servidor de aplicaciones se
ha convertido en sinnimo de la plataforma Java EE (antes J2EE) de Sun Microsystems.

1.3.1 WebSphere
WebSphere es una familia de productos de software propietario de IBM, aunque el trmino se
refiere de manera popular a uno de sus productos especficos: WebSphere Application Server
(WAS). WebSphere ayud a definir la categora de software middleware y est diseado para
configurar, operar e integrar aplicaciones de e-business a travs de varias plataformas de red
usando las tecnologas del Web.
La familia de productos WebSphere adems incluye herramientas para disear procesos de
negocio (WebSphere Business Modeler), para integrarlos en las aplicaciones existentes
(WebSphere Designer) y para ejecutar y monitorizar dichos procesos (WebSphere Process Server,
WebSphere Monitor).

El sitio oficial es:


http://www-01.ibm.com/software/websphere/

1.3.2 GlassFish
GlassFish es un servidor de aplicaciones desarrollado por Sun Microsystems que implementa las
tecnologas definidas en la plataforma Java EE y permite ejecutar aplicaciones que siguen esta
especificacin. La versin comercial es denominada Sun GlassFish Enterprise Server. Es gratuito y
de cdigo libre, se distribuye bajo un licenciamiento dual a travs de la licencia CDDL y la GNU
GPL.
GlassFish est basado en el cdigo fuente donado por Sun y Oracle Corporation, ste

5 de 85

ltimo proporcion el mdulo de persistencia TopLink. GlassFish tiene como base al servidor Sun
Java System Application Server de Sun Microsystems, un derivado de Apache Tomcat, y que usa
un componente adicional llamado Grizzly que usa Java NIO para escalabilidad y velocidad.

El sitio oficial es:


https://glassfish.dev.java.net/

1.3.3 Tomcat
Tomcat (tambin llamado Jakarta Tomcat o Apache Tomcat) funciona como un contenedor de
servlets desarrollado bajo el proyecto Jakarta en la Apache Software Foundation. Tomcat
implementa las especificaciones de los servlets y de JavaServer Pages (JSP) de Sun
Microsystems.
Tomcat no es un servidor de aplicaciones, como JBoss o JOnAS. Incluye el compilador
Jasper, que compila JSPs convirtindolas en servlets. El motor de servlets de Tomcat a menudo se
presenta en combinacin con el servidor web Apache.
Tomcat puede funcionar como servidor web por s mismo. En sus inicios existi la
percepcin de que el uso de Tomcat de forma autnoma era slo recomendable para entornos de
desarrollo y entornos con requisitos mnimos de velocidad y gestin de transacciones. Hoy en da
ya no existe esa percepcin y Tomcat es usado como servidor web autnomo en entornos con alto
nivel de trfico y alta disponibilidad.

Tomcat 3.x (distribucin inicial)

Implementado a partir de las especificaciones Servlet 2.2 y JSP 1.1

Recarga de servlets

Funciones bsicas HTTP

Tomcat 4.x

Implementado a partir de las especificaciones Servlet 2.3 y JSP 1.2

Contenedor de servlets rediseado como Catalina

Motor JSP rediseado con Jasper

6 de 85

Conector Coyote

Java Management Extensions (JMX), JSP Y administracin basada en Struts

Tomcat 5.x

Implementado a partir de las especificaciones Servlet 2.4 y JSP 2.0

Recoleccin de basura reducida

Capa envolvente nativa para Windows y Unix para la integracin de las plataformas

Anlisis rpido JSP

Tomcat 6.x

Implementado de Servlet 2.5 y JSP 2.1

Soporte para Unified Expression Language 2.1

Diseado para funcionar en Java SE 5.0 y posteriores

Soporte para Comet a travs de la interfaz CometProcessor

El sitio oficial es:


http://tomcat.apache.org/

1.3.4 JBoss
JBoss es un servidor de aplicaciones J2EE de cdigo abierto implementado en Java puro. Al estar
basado en Java, JBoss puede ser utilizado en cualquier sistema operativo que lo soporte. Los
principales desarrolladores trabajan para una empresa de servicios, JBoss Inc., adquirida por Red
Hat en Abril del 2006, fundada por Marc Fleury, el creador de la primera versin de JBoss. El
proyecto est apoyado por una red mundial de colaboradores. Los ingresos de la empresa estn
basados en un modelo de negocio de servicios.

El sitio oficial es:

7 de 85

http://www.jboss.org/

8 de 85

2. Modelos J2EE - JEE


J2EE es una especificacin que define una plataforma de desarrollo empresarial, a la que
llamaremos la plataforma J2EE.

La plataforma J2EE est formada de varios componentes:

Un conjunto de especificaciones.

Un test de compatibilidad: El J2EE Compatibility Test Suite (CTS).

La implementacin de referencia de J2EE.

Un conjunto de guas de desarrollo y de buenas prcticas aconsejadas denominadas


J2EE BluePrints

En la especificacin se encuentra bajo el JSR-151, se definen, de manera muy general, las pautas,
reglas y servicios que han de seguir y ofrecer los diferentes servidores de aplicaciones que quieran
implementar la plataforma J2EE. Para acceder http://jcp.org/en/jsr/detail?id=151

Los servicios que han de ofrecer los servidores de aplicaciones que implementen la plataforma
J2EE estn a su vez definidos por diferentes especificaciones. Estas especificaciones definen con
mucho ms detalle los diferentes componentes de los servidores de aplicaciones, como puedan ser
un contenedor Web, un servidor de mensajera, el sistema de seguridad, otros.
De algn modo, se podra decir que la especificacin J2EE engloba a un gran conjunto de
especificaciones. Por poner un ejemplo. En la especificacin de J2EE 1.4 se definen lo siguiente:

JSR-109, (Servicios Web)

JSR-67, (JAXM, Java API for XML Messaging)

JSR-93, (JAXR, Java API for XML Registries)

JSR-77, (Configuracin y control)

JSR-88, (API de despliegue)

JSR-115, (Interfaz de servicios de autorizacin)

JSR-56, (JNLP, Ejecucin remota de aplicaciones)

JSR-112, (JCA 2.0, Arquitectura de conectores)

JSR-152, (JSP 1.3, Java Server Pages)

JSR-152, (Servlets 2.4)

JSR-153, (EJB 2.1, Enterprise Java Beans)

9 de 85

JSR-9XX, (JAXP 1.2, Soporte de esquemas XML)

JSR-9XX, (JMS 1.1, API de mensajera)

Como se puede ver, todas estas especificaciones tienen asociado un JSR, regido por un comit de
empresas, asociaciones o individuos que se aseguran de crear dichas especificaciones y de que
vayan evolucionando. La gran importancia de toda esta enorme lista de especificaciones radica en
que cuando utilizamos un servidor de aplicaciones que implementa la plataforma J2EE, los
desarrolladores, obtenemos de manera automtica todos estos servicios. Es decir, se pone a
nuestra disposicin una gran caja de herramientas que podemos aprovechar para realizar
aplicaciones de una manera mucho ms eficaz.
Hay que tener presente que cada una de estas especificaciones puede utilizarse
perfectamente por separado.

2.1

Modelo J2EE

La plataforma de J2EE define un modelo de programacin encaminado a la creacin de


aplicaciones basadas en n-capas. Tpicamente una aplicacin puede tener cinco capas diferentes:

Capa de cliente

Representa la interfaz de usuario que maneja el cliente. Se forma a parir


de HTML, JavaScript, CSS, Applet, DHTML, Active X

Capa de presentacin

Representa el conjunto de componentes que generan la informacin que


se representar al cliente. Tpicamente se crear a travs de
componentes basados en Servlets y JSP.

Capa

de

lgica

negocio

de Contiene nuestros componentes de negocio reutilizables (por ejemplo,


realizar un pedido, pagar una cuenta). Normalmente se forma a partir de
componentes EJB.

Capa de integracin:

Aqu se encuentran componentes que nos permiten hacer ms


transparente el acceso a la capa de sistemas de informacin. Por ejemplo
este es el lugar idneo para implementar una lgica de objetos de acceso
a datos, DAO (Data Access Objects).

Capa de sistemas de Esta capa engloba a nuestros sistemas de informacin: bases de datos
informacin:

relacionales, bases de datos orientadas a objetos, sistemas legacy


(sistemas no generados con J2EE, por ejemplo sistemas generados en
Cobol o una ERP como SAP), otros.

10 de 85

11 de 85

2.2

Modelo JEE

Java Platform, Enterprise Edition o Java EE (anteriormente conocido como Java 2 Platform,
Enterprise Edition o J2EE hasta la versin 1.4) es una plataforma de programacinparte de la
Plataforma Javapara desarrollar y ejecutar software de aplicaciones en Lenguaje de
programacin Java con arquitectura de N niveles distribuida, basndose ampliamente en
componentes de software modulares ejecutndose sobre un servidor de aplicaciones. La
plataforma Java EE est definida por una especificacin. Similar a otras especificaciones del Java
Community Process, Java EE es tambin considerada informalmente como un estndar debido a
que los suministradores deben cumplir ciertos requisitos de conformidad para declarar que sus
productos son conformes a Java EE; estandarizado por The Java Community Process / JCP.
Java EE incluye varias especificaciones de API, tales como JDBC, RMI, e-mail, JMS,
Servicios Web, XML, etc y define cmo coordinarlos. Java EE tambin configura algunas
especificaciones nicas para Java EE para componentes. Estas incluyen Enterprise JavaBeans,
servlets, portlets (siguiendo la especificacin de Portlets Java), JavaServer Pages y varias
tecnologas de servicios web. Esto permite al desarrollador crear una Aplicacin de Empresa
portable entre plataformas y escalable, a la vez que integrable con tecnologas anteriores. Otros
beneficios aadidos son, por ejemplo, que el servidor de aplicaciones puede manejar
transacciones, la seguridad, escalabilidad, concurrencia y gestin de los componentes
desplegados, significando que los desarrolladores pueden concentrarse ms en la lgica de
negocio de los componentes en lugar de en tareas de mantenimiento de bajo nivel.
Aplicaciones multicapa distribuidas
La plataforma Java EE utiliza un modelo de aplicacin distribuida multicapa para
aplicaciones empresariales. Lgica de la aplicacin se divide en componentes segn la funcin, y
los componentes de distintas aplicaciones que componen una aplicacin Java EE se instalan en
mquinas diferentes dependiendo del nivel en el entorno de mltiples niveles Java EE al que
pertenece el componente de aplicacin.
Aunque una aplicacin Java EE puede constar de los tres o cuatro niveles, las aplicaciones
Java EE multicapa se consideran en general en tres niveles, ya que estn distribuidas en tres
localidades:

Las mquinas clientes

El servidor Java EE

La base de datos o el legado de las mquinas en la parte final.

Aplicaciones en tres niveles que funcionan de esta manera ampliar el estndar de dos niveles y el
modelo de cliente servidor mediante la colocacin de un servidor de aplicaciones multiproceso entre
la aplicacin cliente y el almacenamiento de datos.

12 de 85

2.2.1 Comunicacin en JEE


La Figura siguiente muestra los diferentes elementos que pueden hacerse a nivel de cliente. El
cliente se comunica con la capa de negocio se ejecuta en el servidor de Java EE, ya sea
directamente o, como en el caso de un cliente que se ejecuta en un navegador, yendo a travs de
las pginas JSP o servlets que se ejecutan en la capa web

13 de 85

2.2.2 Componentes Web


Componentes Web Java EE son los servlets o pginas creadas con tecnologa JSP (pginas
JSP) y / o la tecnologa JavaServer Faces:

Servlets son las clases de lenguaje Java de programacin dinmica que da respuestas de
las solicitudes y proceso de construccin.

Las pginas JSP son documentos basados en texto que se ejecutan como servlets pero
permiten una aproximacin ms natural a la creacin de contenido esttico.

La tecnologa JavaServer Faces se basa en la tecnologa de servlets y JSP y proporciona


un marco de interfaz de usuario de componentes para aplicaciones web.

Pginas HTML estticas y applets se combinan con componentes web durante el montaje de
solicitud, pero no se consideran componentes web de la especificacin Java EE. Clases de utilidad
en el cliente puede combinarse con los componentes Web, pero no se consideran componentes
Web.
Como se muestra en la Figura los niveles web y cliente, puede incluir un componente
JavaBeans para gestionar la entrada del usuario y enviar la entrada a un Enterprise Bean en el
nivel de negocio de JEE

2.2.3 Componentes de negocio


El cdigo de negocio, que es la lgica que resuelve o satisface las necesidades de un dominio
particular de negocios como la banca, venta al por menor, o la financiacin, est a cargo de un
Enterprise Bean que se ejecuta en la capa de negocio. Figura muestra cmo un Enterprise Bean

14 de 85

recibe los datos de los programas cliente, los procesos (si es necesario), y los enva al Legacy
System o a la base de datos. Un bean de empresa tambin recupera datos desde el
almacenamiento, procesos (si es necesario), y lo enva de nuevo al programa cliente.

2.2.4 EIS
La empresa de nivel de informacin del sistema se encarga EIS incluye:

Software

Sistemas de infraestructura de la empresa, tales como la planificacin de recursos


empresariales (ERP), procesamiento de transacciones mainframe, sistemas de base de
datos y otros sistemas de informacin heredados. Por ejemplo, los componentes de
aplicaciones Java EE necesidad de tener acceso a los sistemas de informacin de la
empresa para la conectividad de base de datos.

2.2.5 Contenedores JEE


Los contenedores son la interfaz entre un componente y la plataforma de bajo nivel de
funcionalidad especfica que soporta el componente. Antes que una componente web, EJB o de
cliente de la aplicacin puede ser ejecutado, debe ser ensamblado en un mdulo Java EE.
El proceso de ensamblado consiste en especificar la configuracin de contenedores para
cada componente en la aplicacin Java EE y para la aplicacin Java EE en s. El contenedor debe
personalizar la configuracin de soporte subyacente proporcionada por el servidor de Java EE,
incluidos los servicios tales como seguridad, gestin de transacciones, Java Naming and Directory
15 de 85

InterfaceTM (JNDI) las bsquedas, y la conectividad remota. stos son algunos de los aspectos
ms destacados:

El modelo de seguridad de Java EE permite configurar un componente para que los


recursos del sistema sean accesibles nicamente por usuarios autorizados.

El modelo de transacciones Java EE permite especificar las relaciones entre los mtodos
que conforman una sola transaccin, de modo que todos los mtodos en una sola
transaccin se tratan como una sola unidad.

Los servicios de bsqueda JNDI proporcionar una interfaz unificada para mltiples nombres
y los servicios de directorio en la empresa de manera que los componentes de aplicacin
puede tener acceso a estos servicios.

El modelo de Java EE de conectividad remota gestiona la comunicacin de bajo nivel entre


los clientes y los EJB. Despus de un EJB se crea, un cliente llama a los mtodos en l
como si estuviera en la misma mquina virtual.

El contenedor tambin administra los servicios no configurable como los ciclos de vida del servlet,
la puesta en comn de recursos de conexin de bases de datos, la persistencia de datos y el
acceso a la API de la plataforma Java EE.
El proceso de implementacin instala los componentes de aplicaciones Java EE en los
contenedores Java EE como se ilustra en la Figura.

16 de 85

2.3

Historia

La especificacin original J2EE fue desarrollada por Sun Microsystems.

Comenzando con J2EE 1.3, la especificacin fue desarrollada bajo el Java Community
Process. JSR 58 especifica J2EE 1.3 y JSR 151 especifica J2EE 1.4.

El SDK de J2EE 1.3 fue liberado inicialmente como beta en abril de 2001. La beta del SDK
de J2EE 1.4 fue liberada por Sun en diciembre de 2002.

La especificacin Java EE 5 fue desarrollada bajo el JSR 244 y la liberacin final fue hecha
el 11 de mayo de 2006.

17 de 85

3. JSP
JSP implementa la parte dinmica de nuestras pginas Web del HTML estticas. Simplemente
escribimos el HTML regular de la forma normal y encerramos el cdigo de las partes dinmicas en
unas etiquetas especiales, la mayora de las cuales empiezan con "<%" y terminan con "%>. Por
ejemplo:
La fecha y hora actual: <%= new java.util.Date() %>

Los JSP son transformados, en el proceso de compilacin, en un Servlet

JSP

3.1

Una expresin JSP se usa para insertar valores Java


<%= expresin Java %>

Por ejemplo, aqu se muestra la fecha y hora y un nmero aleatorio.


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%= new java.util.Date() %><br />
<%= new java.util.Random().nextDouble() %>
</body>
</html>

Resultado:

18 de 85

Scriptlets

3.2

Si queremos hacer algo ms complejo que insertar una simple expresin, los scriptlets JSP nos
permiten insertar cdigo java arbitrario dentro del servlet que ser construido al generar el JSP.

<% Cdigo Java %>

Ejemplo
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
Buenos
<%
java.util.Calendar currTime = new java.util.GregorianCalendar();
if (currTime.get(currTime.HOUR_OF_DAY) < 12)
{
%>
Dias!
<%
}
else if (currTime.get(currTime.HOUR_OF_DAY) < 18)
{
%>
Tardes!
<%
}
else
{
%>
Noches!
<%
}
%>
</body>
</html>

19 de 85

Resultado:

Declaraciones

3.3

Una declaracin JSP nos permite definir mtodos o campos que sern insertados dentro del cuerpo
principal de la clase servlet (fuera del mtodo service que procesa la peticin). Tienen la siguiente
forma:
<%! Cdigo Java%>

Sirve, por ejemplo, para controlar los acceso a una pgina mientras el servidor este operativo.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%! private int recuentoAccesos = 0; %>
Accesos a la p&aacute;gina desde el reinicio del servidor:
<%= ++recuentoAccesos %>
</body>
</html>

20 de 85

Si se cierra la ventana en el prximo intento se tendr:

Si se hace clic en actualizar se produce el mismo resultado.

Tambin se puede definir un mtodo


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%!
public String miMetodo(String parametro)
{
return parametro;
}
%>
El parmetro recibido es: <%= miMetodo("Hola Mundo") %>
</body>
</html>

21 de 85

3.4

Atributos

Alguno de los atributos manejados habitualmente por un JSP son:

3.4.1 import
Permite especificar los paquetes que debern ser importados por el servlet (al cual se traduce la
pgina jsp). El servlet importa por defecto al menos:

java.lang.*

javax.servlet.*

javax.servlet.jsp.*

javax.servlet.http.*

<@page import =paquete.clase1,..., paquete.claseN %>


Por ejemplo:
<@page import =java.util.*, coreservlets.* %>

3.4.2 contentType
Indica el tipo MIME del documento que ser devuelto
<@page contentType=Tipo-MIME %>
<@page contentType=Tipo-MIME; charset=Conjunto-De-Caracteres %>

Por ejemplo: La salida del out.println() o los elementos de expresin (<%= object%>) se convierten
automticamente a la codificacin seleccionada. Adems, la pgina en s misma se interpreta como
parte de este codificacin.
<%@ page contentType="text/html; charset=UTF-8" %>

3.4.3 isThreadSafe
El comportamiento normal de un servlet es que atiende a varias peticiones simultaneas
concurrentemente. Si el servlet integra la interfaz SingleThreadModel, entonces se garantizar que
no habr accesos simultneos a la misma instancia del Servlet; entonces, en este caso, se
encolarn las peticiones.
<@page isThreadSafe = true %>

<%! --Valor predeterminado--%>

<@page isThreadSafe = false %>

Este atributo se encuentra deprecado en la versin 2.4 de Servlet. Por ende, se recomienda el uso
de bloques synchronized

22 de 85

3.4.4 session
Controla si la pgina participa en sesiones HTTP. Un valor false provoca un error al traducir la
pgina JSP a servlet.
<@page session =true %>

<%! --Valor predeterminado--%>

<@page session =false %>

3.4.5 buffer
Establece el tamao del buffer utilizado por la variable out, que es tipo JspWriter (una subclase de
PrintWriter).
<@page buffer =32kb %>

3.4.6 autoFlush
Controla si el buffer resultante deber ser automticamente descargado cuando est lleno o si debe
generar una excepcin cuando se sobresature.
<@page autoFlush =true %>

<%! --Valor predeterminado--%>

<@page autoFlush =false %>

3.4.7 errorPage
Especifica que una pgina JSP que deber procesar cualquier excepcin arrojadas pero no
capturadas en la pgina en curso
<%@ page errorPage = "error.html"%>

3.4.8 isErrorPage
Indica si la pgina en curso puede ser utilizada como una pgina de error para otra pgina JSP.
<@page isErrorPage =true %>
<@page isErrorPage =false %>

<%! --Valor predeterminado--%>

3.4.9 Ejemplo
Vamos a crear una pgina de error. Consideremos el siguiente cdigo sin manejo de error:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%! private double divideXY(String x, String y){

23 de 85

double z =0.0;
z = Double.parseDouble(x)/Double.parseDouble(y);
return z;
}
%>
<%= divideXY("5.2","0.0") %>
</body>
</html>

El resultado es:

Ahora para el caso:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%! private double divideXY(String x, String y){
double z =0.0;
z = Double.parseDouble(x)/Double.parseDouble(y);
return z;
}
%>
<%= divideXY("a","2.1") %>
</body>
</html>

24 de 85

Entonces, dependiendo del error se generan mensajes muy distintos. Vamos a agregar una pgina
de error:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%@page errorPage="Error.jsp" %> //Pgina de error
<%! private double divideXY(String x, String y){
double z =0.0;
z = Double.parseDouble(x)/Double.parseDouble(y);
return z;
}
%>
<%= divideXY("a","2.1") %>
</body>
</html>

La pgina que maneja el error es:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%@page import="java.io.*" %>

//Para crear un objeto de PrintWriter

<%@page isErrorPage="true" %>

//Para usar esta pgina como de error

25 de 85

<table border="1">
<tbody>
<tr>
<td>Error al calcular la divisin</td>
</tr>
</tbody>
</table>
index.jsp ha informado del siguiente error:
<i><%= exception %></i> //Captura la excepcin
<br /><br />
Este problema sucedi en el siguiente lugar:<hr />
<% exception.printStackTrace(new PrintWriter(out)); %> //Muestra la traza del error
</body>
</html>

3.4.10

include

Se usa para incluir un archivo en el documento JSP principal.


<%@include file=URL relativo %>

Vamos a incluir una pgina que har las veces de pie de pgina
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<table border="1">
<tbody>

26 de 85

<tr>
<td>Esta es la pgina principal</td>
</tr>
</tbody>
</table>
<%@include file="piePagina.jsp" %> //Pgina que ser incluida
</body>
</html>

La pgina con el cdigo a adicionar es la siguiente. Notar que debe tener la estructura para ser
incrustada dentro de otra pgina html.
<%@page import="java.util.Date" %>
<%! private int recuentoAccesos = 0;
private Date fechaAcceso = new Date();
private String hostAcceso = "<I>No hay acceso anterior </I>";
%>
<hr>
Esta pgina &copy; 2010
<a href="http://www.mi-empresa.com/">www.mi-empresa.com</a>.
Esta pgina a sido accedida <%= ++recuentoAccesos %> veces desde que se reinici el servidor.
Fue accedida por ltima vez desde <%= hostAcceso %> a las <%= fechaAcceso %>.
<% hostAcceso = request.getRemoteHost(); %>
<% fechaAcceso = new Date(); %>

3.4.11

include y flush

Permite insertar ficheros (no JSP) en una pgina que est siendo generada. Sirve, como se ver en
el ejemplo siguiente, para insertar un bloque de texto que requiere ser constantemente cambiado.
<jsp:include page="URL relativo" flush="true" />

27 de 85

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<jsp:include page="Texto1.html" flush="true" />
<hr />
<jsp:include page="Texto1.html" flush="true" />
</body>
</html>

El archivo Texto1.html
DT de Boca califica como "barbara" la gran actuacion de Gary Medel
<br />
El chileno, junto a sus dos companeros en el mediocampo, se llevo
loas de parte de Abel Alves tras derrotar con claridad a Lanus
<a href="http://www.terra.cl/deportes/index.cfm?accion=futbolnacional&id_reg=1354307">...</a>

El archivo Texto2.html
Alexis Sanchez se pondra la camiseta de River Plate
<br />
El vocero de Udinese, Guido Gomirato, informo que el
director deportivo de la institucin italiana le dijo
que el delantero chileno se iria al club argentino a prestamo.
<a href="http://www.emol.com/noticias/deportes/detalle/detallenoticias.asp?idnoticia=265530">...</a>

Resultado:

28 de 85

3.5

request

Atributos del objeto Request: El objeto request contiene gran cantidad de informaci?n sobre la
petici?n que se ha hecho al servidor, como el m?todo usado (get/post), la IP del cliente, etc.
Afortunadamente, el objeto request tiene un m?todo llamado getAttributeNames() que devuelve un
objeto de la clase java.util.Enumeration con el nombre de todos los atributos del objeto. As?, para
obtener toda la informaci?n de dicho objeto, podemos utilizar el siguiente c?digo:
<%
java.util.Enumeration enum;
String atributo;
enum = request.getAttributeNames(); // Leemos todos los atributos del request
while (enum.hasMoreElements()) {
atributo = (String) enum.nextElement();
%>
<%=atributo%> = <%=request.getAttribute(atributo)%> <BR>
<%
} // del while
%>

Par?metros: Adem?s de los atributos anteriores, es muy interesante saber qu? par?metros ha
recibido el JSP a trav?s del objeto request. La manera m?s sencilla de mostrarlos todos es muy
similar a la anterior:
<%
java.util.Enumeration enum;
String parametro;
enum = request.getParameterNames(); // Leemos todos los par?metros recibidos
while (enum.hasMoreElements()) {
parametro = (String) enum.nextElement();
%>
<%=parametro%> = <%=request.getParameter(parametro)%> <BR>
<%
}

Objetos de sesin: Objetos de sesin: Por ltimo, aunque no menos importante, suele ser
interesante conocer el contenido de la sesin. Para ello, utilizamos un cdigo muy similar a los

29 de 85

anteriores, aunque con alguna pequea diferencia:

<%
java.util.Enumeration enum;
String elemento;
session = request.getSession(true); // Creamos la sesin, si no existe
%>
Sesin activa desde: <%=new java.util.Date(session.getCreationTime())%%> <BR>
Ultimo acceso: <%=new java.util.Date(session.getLastAccessedTime())%> <BR>
Contenido: <BR><BR>
<%
enum = session.getAttributeNames(); // Leemos todos los objetos de sesion
while (enum.hasMoreElements()) {
elemento = (String) enum.nextElement();
%>
<%=elemento%> = <%=session.getAttribute(elemento)%> <BR>
<%
} // del while
%>

30 de 85

4. Servlet
Son programas que se ejecutan en un servidor Web compatible con la tecnologa servlets como
Tomcat.

Los servlets actan como una capa intermedia entre la peticin de un clientes de un
navegador Web y una base de datos.

Generan pginas web de forma dinmica a partir de los parmetros de la peticin que enve
el navegador web.

Un servlets podra ser responsable de tomar los datos de un formulario HTML de entrada y aplicar
la lgica del negocio utilizada para actualizar la base de datos.

Implementacin completa para la versin J2EE se encuentra en:


http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/package-summary.html

4.1

Estructura bsica

Cuando un servlet acepta una llamada de un cliente, recibe dos objetos:

Un ServletRequest, que encapsula la comunicacin desde el cliente al servidor. Contiene


los mtodos que permiten encontrar informacin entrante como datos de un formulario,
cabeceras de peticin HTTP y el nombre de un Host de un cliente

Un ServletResponse, que encapsula la comunicacin de vuelta desde el servlet hacia el


cliente. Contiene los mtodos que permiten especificar lneas de respuesta HTTP (200,
404, etc.), cabeceras de respuesta (Content-Type, Set-Cookie, etc.), y, todava ms
importante, nos permiten obtener un PrintWriter usado para enviar el contenido del
documento al cliente

ServletRequest

Estacin de trabajo

ServletResponse

Servidor

31 de 85

4.2

Hola Mundo

Crear un servlet en Netbeans:

Paso 1: Crear un proyecto Web

Paso 2: Elija un nombre para el proyecto y una carpeta de almacenamiento

32 de 85

Paso 3: Selecciones el servidor de aplicaciones o Web y una versin de java:

Paso 4: Selecciones un FrameWork:

33 de 85

Paso 5: selecciones la siguiente opcin

Paso 6: Ponga nombre al servlet y al package que lo contiene y hacer clic en Finish:

34 de 85

package dat;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Prueba extends HttpServlet { //Se debe heredar desde la clases HttpServlet
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //Se debe implementar este mtodo
response.setContentType("text/html;charset=UTF-8"); //Procesa datos en html, codificacin UTF-8
PrintWriter out = response.getWriter(); //Objeto para mostrar datos
try { //Se forma el html
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet Prueba</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hola Mundo</h1>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override //Maneja un envo de datos get
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override //Maneja un envo de datos post
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

35 de 85

Se debe configurar el Netbeans para que la aplicacin corra desde este Servlet, desde las
Properties del proyecto

La ejecucin genera:

4.3

Mtodos

A continuacin se describen algunos de los mtodos usados con mayor frecuencia en un Servlet y
que tiene relacin con el objetivo de este captulo

4.3.1 String getParameter(String name)


Mtodo que recupera un parmetro de la request. Devuelve un String con el valor del parmetro o
null en caso de que no exista el parmetro que se intenta recuperar.
Vamos a considerar un formulario de ingreso de user y password y vamos a recuperar sus
parmetros. Para esto vamos a crear el index.jsp, recuperamos y mostramos los valores en el
servlet DataFomulario.java.

36 de 85

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="http://localhost:8080/PruebaServlet/DataFomulario" method="post">
<table border="0" align="center">
<tbody>
<tr>
<td>User: </td>
<td><input type="text" name="usuario" value="" /></td>
</tr>
<tr>
<td>Password: </td>
<td><input type="password" name="pass" value="" /></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="OK" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

package dat;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DataFomulario extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String usuario = request.getParameter("usuario"); //Recupera el usuario desde el formulario
String pass = request.getParameter("pass"); //Recupera el password desde el formulario

37 de 85

PrintWriter out = response.getWriter();


try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet DataFomulario</title>");
out.println("</head>");
out.println("<body>");
out.println("Usuario: " + usuario);
out.println("<p>Password: " + pass);
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

38 de 85

Para probar se tiene:

Luego el servlet muestra:

Laboratorio: Tiempo estimado, 45 minutos


Se pide crear el siguiente formulario y recuperar y mostrar usando un servlet la siguiente
informacin

39 de 85

4.3.2 String[ ] getParameterValues(String name)


Mtodo que recupera los mltiples valores asociados a un parmetro de la request. Devuelve un
array de String con todos los valores del parmetro o null en caso de que no exista el parmetro
que se intenta recuperar. El tpico ejemplo de uso del mtodo es cuando una lista desplegable tien
opcin para seleccionar ms de un valor:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="http://localhost:8080/Ejemplo1_11/RecuperaMultiple" method="POST">
<table align="center">
<tbody>
<tr>
<td>Color(es): </td>
<td><select name="" multiple> //multiple indica que se puede seleccionar ms de un valor
<option>Rojo</option>
<option>Negro</option>
<option>Azul</option>
<option>Blanco</option>
<option>Naranjo</option>
<option>Caf</option>
<option>Verde</option>
<option>Lila</option>
</select></td>
</tr>
<tr>
<td colspan="2" align="center">

40 de 85

<input type="submit" value="OK" />


</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

package dat;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="RecuperaMultiple", urlPatterns={"/RecuperaMultiple"})
public class RecuperaMultiple extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
String[] color = request.getParameterValues("color"); //Recupera los valores
PrintWriter out = response.getWriter();
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet RecuperaMultiple</title>");
out.println("</head>");
out.println("<body>");
for(String colo: color) //Muestra los valores
out.println(colo + "<br />");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);

41 de 85

}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

Resultado:

42 de 85

5. Encapsulacin (Java Bean)


En programacin modular, y ms especficamente en programacin orientada a objetos, se
denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto
de manera que slo se puede cambiar mediante las operaciones definidas para ese objeto.
Cada objeto est aislado del exterior, es un mdulo natural, y la aplicacin entera se reduce a un
agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto
contra su modificacin por quien no tenga derecho a acceder a ellos, eliminando efectos
secundarios e interacciones.
De esta forma el usuario de la clase puede obviar la implementacin de los mtodos y propiedades
para concentrarse slo en cmo usarlos. Por otro lado se evita que el usuario pueda cambiar su
estado de maneras imprevistas e incontroladas.
Otra definicin un tanto ms simple: La encapsulacin consiste en ocultar la complejidad de
una clase e impedir accesos no autorizados
Java, como lenguaje orientado a objetos puro que es, implementa la encapsulacin (o
encapsulamiento) perfectamente. Este concepto consiste en la ocultacin del estado, o lo que es lo
mismo, de los datos miembro de un objeto, de forma que slo es posible modificar los mismos
mediante las operaciones (mtodos, en Java) definidos para dicho objeto. Ms especficamente:
Para implementar la encapsulacin en java debemos:

Declara nuestras variable de instancia de la clase como private

Inicializar las variables en sus valores por defecto o los convenientes para el desarrollo

Se debe declarar al menos un mtodo constructor de la clase sin parmetros

Para cada variable declarar mtodos accesadores (conocidos como mtodos get) y
mtodos mutadores (conocidos como mtodos set)

5.1

Mtodos accesadores: get

Los mtodos que utilizan formas estndar de recuperacin de datos de un objeto se denominan
accesores.

5.2

Mtodos mutadores: set

Los mtodos estndar establecen, recuperan o cambian los datos de un objeto

43 de 85

5.3

Ejemplo

Por ejemplo, si consideramos la clase estudiante con los atributos edad y nota, se tiene:

package dat;
public class Estudiante {
private int edad=0;
private double nota =0.0;
public Estudiante(){ }
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public double getNota() {
return nota;
}
public void setNota(double nota) {
this.nota = nota;
}
}

Con estos mtodos se pueden incorporar restricciones a los valores ingresados . Por ejemplo, en el
caso de la edad se pueden permitir slo valores > 0 cero. As el mtodo sera ahora:

44 de 85

void setEdad(int edad){


if(edad <= 0)
this.edad = 0;
else
this.edad= edad;
}
Tambin se puede, por ejemplo, en el caso de la nota permitir slo valores entre 1.0 y 7.0, asignado
1.0 para otros casos
void setNota(double nota){
if (nota >=1.0 && nota <=7.0)
this.nota = nota;
else
this.nota = 1.0
}

45 de 85

6. JDBC
Java Database Connectivity, ms conocida por sus siglas JDBC, es una API que permite la
ejecucin de operaciones sobre bases de datos desde el lenguaje de programacin Java,
independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se
accede, utilizando el dialecto SQL del modelo de base de datos que se utilice.
El API JDBC se presenta como una coleccin de interfaces Java y mtodos de gestin de
manejadores de conexin hacia cada modelo especfico de base de datos. Un manejador de
conexiones hacia un modelo de base de datos en particular es un conjunto de clases que
implementan las interfaces Java y que utilizan los mtodos de registro para declarar los tipos de
localizadores a base de datos (URL) que pueden manejar. Para utilizar una base de datos
particular, el usuario ejecuta su programa junto con la biblioteca de conexin apropiada al modelo
de su base de datos, y accede a ella estableciendo una conexin, para ello provee el localizador a
la base de datos y los parmetros de conexin especficos. A partir de all puede realizar con
cualquier tipo de tareas con la base de datos a las que tenga permiso: consulta, actualizacin,
creacin, modificacin y borrado de tablas, ejecucin de procedimientos almacenados en la base
de datos, etc.

La especificacin se encuentra en:


http://java.sun.com/javase/6/docs/technotes/guides/jdbc/

6.1

Qu la API de JDBC 2.0 Incluye

La API de JDBC 2.0 incluye todas las de la API que es parte de Java SE, y tambin la API de JDBC
en la extensin estndar de la API. La lista siguiente se definen diversos trminos utilizados para
hablar de la API de JDBC.
La API de JDBC completa, incluyendo el paquete tanto la java.sql (el API de JDBC 2.0
Core) y el paquete de javax.sql (la extensin estndar de la API de JDBC). El J2EE, incluye el total
de la API de JDBC 2.0.
La API de JDBC que es parte de Java SE, que incluye la API de JDBC 1.0, ms la nueva
API de JDBC aadido en el paquete java.sql. Algunas de las nuevas caractersticas de este
paquete son los conjuntos de resultados desplazable, actualizaciones de proceso por lotes,
actualizaciones de programas, y apoyo los nuevos tipos de SQL3.

46 de 85

La API javax.sql, puede ser descargado de http://java.sun.com/products/jdbc. Este paquete


hace que sea ms fcil de construir aplicaciones de servidor utilizando la plataforma Java,
proporcionando una arquitectura abierta que soporta pool de conexiones y de las transacciones
distribuidas que abarcan varios servidores de base de datos. La API de DataSource desempea un
papel integral en estas capacidades y tambin trabaja con los nombres de JavaTM y Directorio
Interfacetm (JNDI) para mejorar la portabilidad y hacer ms fcil el mantenimiento del cdigo. El
paquete de javax.sql tambin proporciona la API de RowSet lo que hace que sea fcil de manejar
conjuntos de datos desde prcticamente cualquier fuente de datos como componentes
JavaBeansTM.
El paquete java.sql el API de JDBC 2.0 Core, que incluye el API de JDBC 1.0, ms la nueva
API aadido en el J2SE
En consonancia con la poltica de mantener la compatibilidad hacia atrs, las aplicaciones
escritas usando la API de JDBC 1.0 seguir funcionando tanto con el Java y J2EE, al igual que
siempre han corrido. Aplicaciones de las funciones utilizando aadido en la API de JDBC 2.0, por
supuesto, deben ser ejecutados con un controlador compatible con estas caractersticas.

6.2

Qu es la API de JDBC?

La API de JDBC es una API de Java para acceder a prcticamente cualquier tipo de datos. La API
de JDBC consiste en un conjunto de clases e interfaces escritas en Java lenguaje de programacin
que proporciona un API estndar para la herramienta / desarrolladores de bases de datos y permite
escribir aplicaciones de bases de datos usando una fuerza industrial de todas las API de Java.
La API de JDBC hace que sea fcil enviar comandos SQL a los sistemas de bases de
datos relacionales y apoya todos los dialectos de SQL. Pero la API de JDBC 2.0 va ms all de
SQL, tambin por lo que es posible interactuar con otros tipos de fuentes de datos, como archivos.
El valor de la API de JDBC es que una aplicacin puede acceder a prcticamente cualquier
fuente de datos y ejecutar en cualquier plataforma con una mquina virtual de Java. En otras
palabras, con la API de JDBC, no es necesario escribir un programa para acceder a una base de
datos Sybase, otro programa para acceder a una base de datos Oracle, otro programa para
acceder a una base de datos DB2 de IBM, y as sucesivamente. Uno puede escribir un solo
programa usando el API de JDBC, y el programa ser capaz de enviar de SQL u otras
declaraciones a la fuente de datos adecuado. Y, con una aplicacin escrita en el lenguaje de
programacin Java, uno no tiene que preocuparse acerca de la escritura para ejecutar las
diferentes aplicaciones en diferentes plataformas. La combinacin de la plataforma Java y la API de
JDBC permite al programador escribir una vez y ejecutar en cualquier lugar.
El lenguaje de programacin Java, siendo robusto, seguro, fcil de usar, fcil de entender, y
descargar automticamente en una red, es una base excelente para aplicaciones de lenguaje de
base de datos. Lo que se necesita es una manera para las aplicaciones Java para hablar con una
variedad de diferentes fuentes de datos. JDBC es el mecanismo para hacer esto.

47 de 85

Directores de MIS, como la combinacin de la plataforma Java y la tecnologa JDBC porque


hace que la difusin de informacin fcil y econmica. Las empresas pueden seguir utilizando sus
bases de datos instaladas y acceso a la informacin fcilmente, incluso si se almacena en distintos
sistemas de gestin de bases de datos u otras fuentes de datos. El tiempo de desarrollo de nuevas
aplicaciones es corto. De instalacin y control de versiones son muy simplificado. Un programador
puede escribir una aplicacin o una actualizacin de una vez, lo puso en el servidor, y todo el
mundo tiene acceso a la ltima versin. Y para las empresas que venden servicios de informacin,
la combinacin de la tecnologa Java y JDBC ofrece una mejor forma de salir actualizaciones de la
informacin a los clientes externos.

6.3

Qu hace la API de JDBC hacer?

En trminos simples, una tecnologa basada en JDBC driver (controlador JDBC ") permite hacer
tres cosas:

1. Establecer una conexin con una fuente de datos


2. Enviar consultas y actualizar las declaraciones a la fuente de datos
3. Proceso de los resultados

6.4

Conexin de Informacin general

Un objeto Connection representa una conexin con una base de datos. Una sesin de conexin
incluye las instrucciones SQL que se ejecutan y los resultados que se devuelven en la conexin.
Una sola aplicacin puede tener una o ms conexiones con una sola base de datos, o puede tener
conexiones con muchas bases de datos diferentes.
Un usuario puede obtener informacin sobre la base de datos un objeto de Connection
invocando

el

mtodo

de

Connection.getMetaData.

Este

mtodo

devuelve

un

objeto

DatabaseMetaData que contiene informacin sobre tablas de la base de datos, la gramtica de


SQL que soporta, sus procedimientos almacenados, las capacidades de esta conexin, y as
sucesivamente.

6.5

Establecer una conexin

La forma tradicional de establecer una conexin con una base de datos es llamar a la
DriverManager.getConnection mtodo. Este mtodo toma una cadena que contiene una direccin
URL. La clase DriverManager conocida como la capa de gestin de JDBC, intenta localizar un
controlador que puede conectarse a la base de datos correspondiente a dicha URL. La clase
DriverManager mantiene una lista de clases Driver registrados, y cuando el getConnection mtodo
se llama, comprueba con cada conductor en la lista hasta que encuentre uno que pueda conectarse
48 de 85

a la base de datos especificada en la URL. El mtodo de Driver connect utiliza esta URL para
realmente establecer la conexin.
El cdigo siguiente es un ejemplo de la apertura de una conexin a una base de datos
ubicada en la jdbc:odbc:wombat con un ID de usuario de oboy y 12Java como la contrasea:
String url = "jdbc:odbc:wombat";
Connection con = DriverManager.getConnection(url, "oboy", "12Java");

El JDBC 2.0 proporciona la interfaz DataSource como una alternativa a la DriverManager para
establecer una conexin. Cuando una clase DataSource se ha aplicado adecuadamente, el objeto
DataSource se puede utilizar para producir objetos Connection que participan en la agrupacin de
conexiones y / o objetos Connection que pueden participar en transacciones distribuidas.
DataSource es la alternativa preferida para la creacin de una conexin.
Una aplicacin utiliza un objeto Connection producido por DataSource de manera
esencialmente es la misma que utiliza un objeto Connection producido por el DriverManager.
Si un objeto Connection es parte de una transaccin distribuida, una aplicacin no debe
llamar a los mtodos Connection.commit o Connection.rollback, el modo de confirmacin. Estos
pudieran interferir con el manejo del administrador de transacciones distribuida.

6.6

URL de Uso General

Cuando una aplicacin que utiliza el DriverManager para crear un objeto Connection debe proveer
una direccin URL para el mtodo DriverManager.getConnection. Dado que las direcciones URL a
menudo causan una cierta confusin, lo primero que le dar una breve explicacin de las
direcciones URL en general y luego ir a una discusin de JDBC URL.
La primera parte de una URL especifica el protocolo usado para acceder a la informacin, y
siempre es seguido por dos puntos. Algunos protocolos comunes son ftp que especifica "file
transfer protocol" y http que especifica "protocolo de transferencia de hipertexto". Si el protocolo es
file se indica que el recurso est en un sistema de archivos local en lugar de en Internet.
ftp://javasoft.com/docs/JDK-1_apidocs.zip
http://java.sun.com/products/JDK/CurrentRelease
file:/home/haroldw/docs/tutorial.html

El resto de la URL, todo despus de los primeros dos puntos, da informacin sobre dnde se
encuentra la fuente de datos. Si el protocolo es file el resto de la URL es la ruta para el archivo.
Para el ftp protocolos y http el resto de la direccin identifica al host y, opcionalmente, puede dar
una ruta de acceso a un sitio ms especfico.

49 de 85

6.7

JDBC URL

Una URL JDBC proporciona una forma de identificar una fuente de datos para que el controlador
apropiado lo reconocer y establecer una conexin con l. Driver escritores son los que realmente
determinar cul es la URL de JDBC que identifica a un conductor particular ser. Los usuarios no
tendrn que preocuparse sobre cmo formar una URL JDBC, sino que simplemente utilizan la URL
suministrado con los controladores que estn utilizando. Papel de JDBC es recomendar algunas
convenciones para los escritores de conductor a seguir en la estructuracin de sus JDBC URL.
La sintaxis estndar para JDBC URL se muestra aqu. Consta de tres partes, que estn
separados por dos puntos.
jdbc:<subprotocol>:<subname>

Las tres partes de una URL JDBC se desglosan de la siguiente manera:

1. jdbc en el protocolo. El protocolo en una URL JDBC es siempre jdbc


2. <subprotocol> nombre del conductor o el nombre de un mecanismo de conectividad de
bases de datos, que puede ser apoyado por uno o ms conductores. Un ejemplo destacado
de un nombre de Subprotocolo es odbc que ha sido reservado para las URL que
especifique los nombres de datos ODBC estilo de fuente. Por ejemplo, para acceder a una
base de datos a travs de un puente JDBC-ODBC, se podra utilizar una URL como la
siguiente:
jdbc:odbc:fred

3. <subname> manera de identificar la fuente de datos. El subname puede variar,


dependiendo de la Subprotocolo, y puede tener cualquier sintaxis interna del escritor
conductor elija, incluyendo un subsubname. El punto de un subname es dar suficiente
informacin para localizar el origen de datos. En el ejemplo anterior, fred es suficiente
porque ODBC proporciona el resto de la informacin. Una fuente de datos en un servidor
remoto requiere ms informacin, sin embargo. Si la fuente de datos es accesible a travs
de Internet, por ejemplo, la direccin de red debe incluirse en la URL JDBC como parte de
la subname y deben adherirse a la direccin siguiente convencin de nomenclatura
estndar:
//hostname:port/subsubname

6.8

Liberacin DBMS Recursos

Se recomienda que los programadores de cerrar explcitamente las conexiones y las declaraciones
que han creado cuando ya no son necesarios.
Un programador de escribir cdigo en el lenguaje de programacin Java y que no utilice

50 de 85

ninguna de recursos externos, no necesita preocuparse por la gestin de memoria. El recolector de


basura elimina automticamente los objetos cuando ya no se utiliza y libera la memoria que se
utiliza. Cuando la memoria se est agotando, se reciclan los objetos desechados, haciendo que la
memoria que ocupan actualmente disponible para la reutilizacin rpida.
Sin embargo, si una aplicacin utiliza los recursos externos, como lo hace cuando tiene
acceso a un DBMS con la API de JDBC, el recolector de basura no tiene manera de conocer el
estado de esos recursos. Por lo tanto, se recomienda que los programadores explcitamente cerrar
todas las conexiones (con el mtodo Connection.close y declaraciones con el mtodo
Statement.close tan pronto como ya no son necesarios, liberando as recursos DBMS tan pronto
como sea posible. Esto se aplica especialmente a las aplicaciones que estn destinados a trabajar
con DBMS diferentes debido a las variaciones de un SGBD a otro.
Tenga en cuenta que el mtodo Connection.isClosed est garantizada para regresar true
slo cuando es llamado por el mtodo de Connection.close ha sido llamado. Como resultado de
ello, un programador no puede depender de este mtodo para indicar si la conexin es vlida o no.
En cambio, un cliente tpico de JDBC puede determinar que una conexin no es vlida por la
captura de la excepcin que se produce cuando se intenta una operacin de JDBC.

6.9

DriverManager Informacin general

La clase DriverManager es la capa de gestin tradicional de JDBC, de trabajo entre el usuario y los
controladores. Se realiza un seguimiento de los controladores que estn disponibles y se ocupa de
establecer una conexin entre una base de datos y el controlador apropiado. Adems, la clase
DriverManager atiende a aspectos como los plazos de acceso y el controlador de impresin de
registro y mensajes de seguimiento.
Para aplicaciones simples, el nico mtodo en la clase DriverManager que un programador
en general necesita usar directamente es DriverManager.getConnection. Como su nombre lo indica,
este mtodo se establece una conexin a una base de datos.

6.10 Crear una conexin


Para esto se va a crear una clase que proporciones el servicio y en la cual se puedan configurar en
duro sus parmetros.

package conec;
public class ConexionBD {
private static String url= "jdbc:mysql://localhost/dgac"; //Se conecta a la base de datos dgac
private static String user= "root"; //El usuario es root

51 de 85

private static String pass= "root"; //La clave del usuario root es root
public static String getDriver() {
String driver= "com.mysql.jdbc.Driver"; //Declara el Driver a usar
return driver;
}
public static String getUrl() { //Retorna la url con la ubicacin de la base de datos
return url;
}
public static String getUser() { //Retorna el usuario de conexin a la base de datos
return user;
}
public static String getPass() { //Retorna el password del usuario de conexin a la base de
datos
return pass;
}
}

Insertar datos
Vamos a considera el siguiente formulario para trabajar con la tabla cliente en la base de datos
dgac:

create table alumno(


rut varchar(50),
edad int,
sexo boolean,
primary key(rut)
);

52 de 85

Se debe declarar el driver segn se muestra:

53 de 85

El resultado de esto se puede preciar:

EL JSP que pide la informacin es:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="http://localhost:8080/Ejemplo1_20/ProcesaInsertar" method="POST">
<table border="1" align="center">
<tbody>
<tr>
<td>Rut: </td>
<td><input type="text" name="rut" value="" /></td>
</tr>
<tr>
<td>Edad: </td>
<td><select name="edad">
<option>20</option>
<option>21</option>
<option>22</option>
<option>23</option>
<option>24</option>
<option>25</option>
<option>26</option>
<option>27</option>
<option>28</option>

54 de 85

<option>29</option>
<option>30</option>
</select></td>
</tr>
<tr>
<td>Sexo: </td>
<td><input type="radio" name="sexo" value="1" />Mujer
<input type="radio" name="sexo" value="0" />Hombre</td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="OK" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

El siguiente servlet recibe los datos y los procesa llamando a la clase que provoca la conexin:

package proc;
import conec.ConexionBD;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="ProcesaInsertar", urlPatterns={"/ProcesaInsertar"})
public class ProcesaInsertar extends HttpServlet {

55 de 85

protected void processRequest(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
int n=0;
String rut = request.getParameter("rut"); //Recupera rut
int edad = Integer.parseInt(request.getParameter("edad")); //Recupera edad
int sexo = Integer.parseInt(request.getParameter("sexo")); //Recupera sexo
PrintWriter out = response.getWriter();
try {
Class.forName(ConexionBD.getDriver()); //Declara el driver a usar
} catch (ClassNotFoundException ex) {
Logger.getLogger(ProcesaInsertar.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Connection con = DriverManager.getConnection(ConexionBD.getUrl(),
ConexionBD.getUser(),
ConexionBD.getPass()); //Crea el objeto de conexin
Statement st = con.createStatement(); //Crear el objeto para proceso
String SQL=" insert into cliente (rut,edad,sexo) values (' "+
rut + "'," +
edad + "," +
sexo + ");"; //Crear la SQL para insertar el registro
n = st.executeUpdate(SQL); //Ejecuta el proceso de insertar el registro
st.close(); //cierra el objeto
con.close(); //cierra el objeto
} catch (SQLException ex) {
Logger.getLogger(ProcesaInsertar.class.getName()).log(Level.SEVERE, null, ex);
}
if(n==0){
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("NO se inserto el registro");
out.println("</body>");
out.println("</html>");

56 de 85

} finally {
out.close();
}
}
else
{
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("SI se inserto el registro");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

57 de 85

Los datos usados para las pruebas fue:

Observacin: Es una mala tcnica el ejecutar todo el proceso es una sola clase (en este caso el
servlet). En el captulo II se desarrolla el mismo proceso usando el patrn de diseo MVC que
proporciona una mejor estructuracin de la programacin para ejecutar mantenciones.

6.11 Eliminar datos


Siguiendo con el ejemplo anterior vamos a pedir el rut y procedemos a eliminar el registro asociado.
Los registros insertados en la tabla son:

58 de 85

El JSP que lee el rut:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Elimina</title>
</head>
<body>
<form action="http://localhost:8080/Ejemplo1_20/ProcesaEliminar" method="POST">
<table border="1" align="center">
<tbody>
<tr>
<td>Rut: </td>
<td><input type="text" name="rut" value="" /></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="OK" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

El servlet que elimina el registro:

package proc;
import conec.ConexionBD;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
59 de 85

import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="ProcesaEliminar", urlPatterns={"/ProcesaEliminar"})
public class ProcesaEliminar extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
int n=0;
String rut = request.getParameter("rut"); //Lee el rut
PrintWriter out = response.getWriter();
try {
Class.forName(ConexionBD.getDriver());
} catch (ClassNotFoundException ex) {
Logger.getLogger(ProcesaEliminar.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Connection con = DriverManager.getConnection(ConexionBD.getUrl(),
ConexionBD.getUser(),
ConexionBD.getPass());
Statement st = con.createStatement();
String SQL=" delete from cliente where rut='" + rut +"';"; //Elimina el registro
n = st.executeUpdate(SQL);
st.close();
con.close();
} catch (SQLException ex) {
Logger.getLogger(ProcesaEliminar.class.getName()).log(Level.SEVERE, null, ex);
}
if(n==0){
try {
out.println("<html>");

60 de 85

out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("NO se elimino el registro");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
else
{
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("SI se elimino el registro");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override

61 de 85

public String getServletInfo() {


return "Short description";
}
}

6.12 Actualiza registro


El objeto es recuperar los rut en una lista desplegable comenzando por recuperar los datos del
primer registro y luego dependiendo de la eleccin de rut de la lista desplegable mostrar los datos
correspondientes. Esto se ha programado:

1. Recuperan desde la base de datos en el JSP usando JDBC


2. Almacenar esta informacin en un Array manejado por Javascript que muestra la
informacin particular de cada registro.
El cdigo comentado es:

62 de 85

<html>
<head>
<%@page import="java.sql.*" %> //Importa package
<%@page import="java.util.Vector" %>
<%@page import="conec.*" %>
<%@page import="bean.*" %>
<%
Vector<Cliente> dat = new Vector<Cliente>(); //Almacena los datos recuperados
try {
Class.forName(ConexionBD.getDriver());
} catch (ClassNotFoundException ex) {
}
try {
Connection con = DriverManager.getConnection(ConexionBD.getUrl(),
ConexionBD.getUser(),
ConexionBD.getPass());
Statement st = con.createStatement();
String SQL=" select rut, edad, sexo from cliente order by 1;"; //Consulta
ResultSet rs = st.executeQuery(SQL); //Manda a ejecucin la consulta
while(rs.next()){ //Recupera los registros
String rutRecupera = rs.getString(1);
int edadRecupera = rs.getInt(2);
int sexoRecupera = rs.getInt(3);
//Almacena la informacin en el Vector
dat.add(new Cliente(rutRecupera, edadRecupera, sexoRecupera));
}
st.close();
rs.close();
con.close();
} catch (SQLException ex) {
}
String[] rut = new String[dat.size()]; //Almacena los rut recuperados
int[] edad = new int[dat.size()]; //Almacena las edades recuperados
int[] sexo = new int[dat.size()]; //Almacena el sexo recuperado
//Almacena la informacin en los arreglos anteriores

63 de 85

int i=0;
for(Cliente dato: dat){
rut[i] = dato.getRut();
edad[i] = dato.getEdad();
sexo[i] = dato.getSexo();
i++;
}
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Actualizar</title>
<script language="javascript" type="text/javascript">
//Array para almacenar los datos desde java a javascript
var rutJS = new Array();
var edadJS = new Array();
var sexoJS = new Array();
var rangoEdad = new Array(20,21,22,23,24,25,26,27,28,29,30);
//Funcin que se gatilla en la partida del formulario llamado desde el body del html
function partida() {
//Transfiere los datos desde java a Javascript
<% for (i=0; i<rut.length; i++) { %>
rutJS[<%= i %>] = "<%= rut[i] %>";
edadJS[<%= i %>] = "<%= edad[i] %>";
sexoJS[<%= i %>] = "<%= sexo[i] %>";
<% } %>
//Asigna el largo de la lista desplegable de los rut
document.getElementById("Select1").length = rutJS.length;
for (i = 0; i < rutJS.length; i++) {
//Valor que se devuelve desde el select
document.getElementById("Select1").options[i].value = rutJS[i];
//Valor que se muestra en el select
document.getElementById("Select1").options[i].text = rutJS[i];
}
//Asigna el largo de la lista desplegable de los aos
document.getElementById("Select2").length = rangoEdad.length;
for (i = 0; i < rangoEdad.length; i++) {
//Valor que se devuelve desde el select
document.getElementById("Select2").options[i].value = rangoEdad[i];
//Valor que se muestra en el select
document.getElementById("Select2").options[i].text = rangoEdad[i];
}
//Busca la edad del primer cliente y la muestra en la lista desplegable

64 de 85

for(i=0;i<rangoEdad.length;i++)
if((i+20)==edadJS[0])
document.getElementById("Select2").selectedIndex=i;
//Busca el sexo del primer cliente y la muestra en los RadioButtom
if(sexoJS[0]==1)
document.getElementsByName("sexo").item(0).checked=true;
if(sexoJS[0]==0)
document.getElementsByName("sexo").item(1).checked=true;
}
//Funcin que se gatilla cada vez que se selecciona un nuevo rut llamado desde Select1
function cambia() {
//Recupera el ndice desde el rut (0,1,2,...)
var n = document.getElementById("Select1").selectedIndex;
//Aqu se desarrollan dos procesos: 1: Busca el ndice en el Array rangoEdad que tiene el
//valor de edad buscado (edadJS[n]). 2: Ese ndice es transferido a la lista desplegable
//del la edad y as se muestra el valor asociado
for(i=0;i<rangoEdad.length;i++)
if((i+20)==edadJS[n])
document.getElementById("Select2").selectedIndex=i;
//Recupera el valor del sexo buscado (sexoJS[n]) y dependiendo del valor lo muestra
if(sexoJS[n]==1)
document.getElementsByName("sexo").item(0).checked=true;
if(sexoJS[n]==0)
document.getElementsByName("sexo").item(1).checked=true;
}
</script>
</head>
<body onload="partida();"> //En la partida del formulario llama los iniciales del primer registro
<form id="Form1" name="form1"
action="http://localhost:8080/Ejemplo1_20/ProcesaActualizar" method="POST">
<table style="width: 300px;">
<tr>
<td>
Rut:
</td>
<td>
//Llama a la funcin cada vez que se produce un cambio
<select id="Select1" name="rut" onchange="cambia();">
<option></option>
</select>

65 de 85

</td>
</tr>
<tr>
<td>
Edad:
</td>
<td>
<select id="Select2" name="edad">
<option></option>
</select>
</td>
</tr>
<tr>
<td>
Sexo:
</td>
<td>
<input type="radio" name="sexo" value="1" />Mujer
<input type="radio" name="sexo" value="0" />Hombre
</td>
</tr>
</table>
</form>
</body>
</html>

Los datos en la tabla son:

66 de 85

Al partir el formulario se tiene:

Al hacer clic sobre uno de los rut:

La segunda parte es almacenar los datos recuperados desde el formulario:

package proc;
import conec.ConexionBD;
import java.io.IOException;
import java.io.PrintWriter;

67 de 85

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="ProcesaActualizar", urlPatterns={"/ProcesaActualizar"})
public class ProcesaActualizar extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
int n=0;
String rut = request.getParameter("rut");
int edad = Integer.parseInt(request.getParameter("edad"));
int sexo = Integer.parseInt(request.getParameter("sexo"));
PrintWriter out = response.getWriter();
try {
Class.forName(ConexionBD.getDriver());
} catch (ClassNotFoundException ex) {
Logger.getLogger(ProcesaEliminar.class.getName()).log(Level.SEVERE, null, ex);
}
try {
Connection con = DriverManager.getConnection(ConexionBD.getUrl(),
ConexionBD.getUser(),
ConexionBD.getPass());
Statement st = con.createStatement();
String SQL=" update cliente " +
" set edad =" +edad+ "," +
" sexo="+sexo+
" where rut='"+rut+"';";
n = st.executeUpdate(SQL);
st.close();

68 de 85

con.close();
} catch (SQLException ex) {
Logger.getLogger(ProcesaEliminar.class.getName()).log(Level.SEVERE, null, ex);
}
if(n==0){
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("NO se actualizo el registro");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
else
{
try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ProcesaInsertar</title>");
out.println("</head>");
out.println("<body>");
out.println("SI se actualizo el registro");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

69 de 85

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

Los datos de prueba son:

70 de 85

Los datos en la base de datos son:

6.13 Listar informacin


EL JSP que llama al servlet que proceso los datos:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form action="http://localhost:8080/Ejemplo1_20/ListaInformacion" method="POST">
<table border="0" align="center">
<tbody>
<tr>
<td><input type="submit" value="OK" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

EL servlet de proceso es:

package proc;
import bean.Cliente;
import conec.ConexionBD;
import java.io.IOException;
71 de 85

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name="ListaInformacion", urlPatterns={"/ListaInformacion"})
public class ListaInformacion extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
Vector<Cliente> dat = new Vector<Cliente>();
PrintWriter out = response.getWriter();
try {
Class.forName(ConexionBD.getDriver());
} catch (ClassNotFoundException ex) {
}
try {
Connection con = DriverManager.getConnection(ConexionBD.getUrl(),
ConexionBD.getUser(),
ConexionBD.getPass());
Statement st = con.createStatement();
String SQL=" select rut, edad, sexo from cliente order by 1;";
ResultSet rs = st.executeQuery(SQL);
while(rs.next()){
String rutRecupera = rs.getString(1);
int edadRecupera = rs.getInt(2);

72 de 85

int sexoRecupera = rs.getInt(3);


dat.add(new Cliente(rutRecupera, edadRecupera, sexoRecupera));
}
st.close();
rs.close();
con.close();
} catch (SQLException ex) {
}

try {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ListaInformacion</title>");
out.println("</head>");
out.println("<body>");
out.println("<table align='center' border='1'>");
out.println("<tr><td>Edad</td><td>Aos</td><td>Sexo</td></tr>");
String sexoTipo = "";
int i=0;
for(Cliente dato: dat){
if(dato.getSexo()==1)
sexoTipo="Mujer";
else
sexoTipo="Hombre";
out.println("<tr><td>"+dato.getRut()+"</td><td>"+dato.getEdad()
+"</td><td>"+sexoTipo+"</td></tr>");
i++;
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)

73 de 85

throws ServletException, IOException {


processRequest(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}

El resultado es:

74 de 85

7. Instalacin de PostgreSQL
Vamos a ver la instalacin de la versin 8.4.2-1

Paso 1

Paso 2:

75 de 85

Paso 3:

Paso 4: Poner password al super-usuario, por ejemplo tabu2000

76 de 85

Paso 5: Seleccionar el puerto

Paso 6:

77 de 85

Paso 7:

Paso 8:

78 de 85

Paso 9:

Paso 9:

79 de 85

Paso 10:

Para bajar el Driver de JDBC2, JDBC3 JDBC4 se debe acceder a:


http://www.postgresql.org/download/products/2

80 de 85

Bajar la versin JDBC4 Postgresql Driver, Version 8.4-701

81 de 85

Paso 11:

Paso 12:

82 de 85

Paso 13:

Paso 14:

83 de 85

Paso 15:

Paso 16:

84 de 85

Paso 17:

85 de 85

Anda mungkin juga menyukai