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
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
1.3
Servidores de aplicaciones
4 de 85
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).
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.
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.
Recarga de servlets
Tomcat 4.x
6 de 85
Conector Coyote
Tomcat 5.x
Capa envolvente nativa para Windows y Unix para la integracin de las plataformas
Tomcat 6.x
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.
7 de 85
http://www.jboss.org/
8 de 85
Un conjunto de especificaciones.
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:
9 de 85
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
Capa de cliente
Capa de presentacin
Capa
de
lgica
negocio
Capa de integracin:
Capa de sistemas de Esta capa engloba a nuestros sistemas de informacin: bases de datos
informacin:
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:
El servidor Java EE
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
13 de 85
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.
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
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
InterfaceTM (JNDI) las bsquedas, y la conectividad remota. stos son algunos de los aspectos
ms destacados:
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 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
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() %>
JSP
3.1
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.
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ágina desde el reinicio del servidor:
<%= ++recuentoAccesos %>
</body>
</html>
20 de 85
21 de 85
3.4
Atributos
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.*
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 %>
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 %>
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 %>
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 %>
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:
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>
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
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 © 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
<%
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.
4.1
Estructura bsica
ServletRequest
Estacin de trabajo
ServletResponse
Servidor
31 de 85
4.2
Hola Mundo
32 de 85
33 de 85
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
36 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 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
38 de 85
39 de 85
<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
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
Inicializar las variables en sus valores por defecto o los convenientes para el desarrollo
Para cada variable declarar mtodos accesadores (conocidos como mtodos get) y
mtodos mutadores (conocidos como mtodos set)
5.1
Los mtodos que utilizan formas estndar de recuperacin de datos de un objeto se denominan
accesores.
5.2
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
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.
6.1
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
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
6.3
En trminos simples, una tecnologa basada en JDBC driver (controlador JDBC ") permite hacer
tres cosas:
6.4
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
6.5
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
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>
6.8
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
6.9
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.
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:
52 de 85
53 de 85
<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
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
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.
58 de 85
<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>
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
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>
66 de 85
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";
}
}
70 de 85
<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>
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
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
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:
76 de 85
Paso 6:
77 de 85
Paso 7:
Paso 8:
78 de 85
Paso 9:
Paso 9:
79 de 85
Paso 10:
80 de 85
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