46
REPORTE:PROYECTO DE INVESTIGACIÓN II 0

REPORTE:PROYECTO DE INVESTIGACIÓN II148.206.53.84/tesiuami/UAMI11014.pdf · A MI HERMANO Que más que un hermano ha sido como un padre, al cual admiro y respeto profundamente, porque

  • Upload
    vananh

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

REPORTE:PROYECTO DE INVESTIGACIÓN II

0

REPORTE:PROYECTO DE INVESTIGACIÓN II

1

A MIS PAPAS

Mis motores para seguir adelante en cualquier situación que se me presente, es a quienes dedico estegran logro alcanzado y porque con su apoyo incondicional y comprensión me han enseñado que con esfuerzoy dedicación se puede llegar muy lejos. Gracias por todo su amor y además por darme la vida. Los quiero

A MI HERMANO

Que más que un hermano ha sido como un padre, al cual admiro y respeto profundamente, porque sintu gran ayuda he llegado a lograr este sueño y porque siempre estuviste conmigo, a veces para levantarmecuando estuve a punto de caer y dejar este camino y sobre todo por estar en los momentos más felices de mivida, gracias por tu tiempo, dedicación y amor. Te quiero mucho.

A LUIS

Por estar conmigo en este momento tan importante, por darme la fuerza suficiente para seguiradelante cuando estuve a punto de caer, por ser parte de mi vida y porque me has llenado de cariño y amor.Te amo

A MIS MAESTROS

Por transmitirnos todos sus conocimientos y por darnos la oportunidad de realizar este proyecto, que sino hubiera sido por sus enseñanzas no lo hubiera podido lograr, además por su amistad y su paciencia.Gracias por darnos todos sus conocimientos.

A MIS AMIGOS

GABY, FER, ABY, porque gracias a ustedes se llegó a realizar este proyecto, pero sobre todo por sugran amistad, porque con ustedes me enojé, reí y lloré, además porque me enseñaron a valorar muchas cosasy porque me ayudaron en mucho y finalmente porque forman una parte importante de esta etapa de mi vida yporque con esto si se cumple lo que un día dijimos, “Juntos hasta el final”. Gracias por su amistad, los quiero ylos extrañaré profundamente.

Con este trabajo culmino una etapa de grandes sueños, esfuerzos, lágrimas y alegrías, pero empiezo otra, la cual no podríacontinuar sin este logro.

MARISOL

REPORTE:PROYECTO DE INVESTIGACIÓN II

2

A Dios:

Porque a pesar de todos los obstáculosQue se presentaron en mi camino siempreMando un angel para que me iluminara.

A mi Papa:

Porque aunque fisicamente ya no este se queDesde arriba esta muy feliz por este logro.

A mi mama y mis hermanos:

Porque siempre creyeron en mi y mis proyectosSiendo comprensivos y cariñosos.

A Marco:

Por ser parte de mi vida, por enseñarme a ser valientey sobre todo llenarme de amor y comprensión.

Aby

REPORTE:PROYECTO DE INVESTIGACIÓN II

3

Doy gracias a Dios por estar conmigo siempre yregalarme este momento de alegría ysatisfacción personal,

Gracias a mis padres: Fernando y Elvira; por suapoyo y amor incondicional, por creer siempre enmi y por los valores inculcados.

A mis hermanos: Carlos por ponerme un ejemploa seguir y a Edgar por la motivación de ser yo unejemplo a seguir para ti.

A mis abuelos, tíos, primos, sobrinos y cuñadapor darme cariño, afecto, apoyo y motivación.

A los astros, por su gran amistad y por hacer deesta, una experiencia inolvidable.

A mis compañeros en particular a mis amigasGaby, Mary y Aby por su amistad y por elempeño puesto para la realización de esteproyecto.

Fernando Rivelino Ortiz Martínez

REPORTE:PROYECTO DE INVESTIGACIÓN II

4

Caminante son tus huellas el camino y nada más,Caminante no hay camino, se hace camino al andarAl andar se hace camino y al volver la vista atrásSe ve la senda que nunca se ha de volver a pisarCaminante no hay camino, sino estelas en la mar

Joan Manuel Serrat

Este trabajo es la culminación y el inicio de muchos sueños, de un gran esfuerzo, de muchas lágrimaslloradas…Es la conjunción de muchas ideas, y muchos ejemplos recogidos a través de mi vida que han dejadohuella, que me han enseñado a vivir, que me han dado la capacidad de ser y de querer ser…

A mis papás,

Mis más grandes amores, a quien dedico por completo este logro, y mi vida entera. Por que a ustedes lesdebo todo y por eso les doy lo que soy. Los amo

A Isy, Ale, Tere, Delia y Ángeles.

Por su ejemplo, sus consejos, su cariño y por su capacidad de ayudarme a ver más allá de lo que la mi propiamiopía a veces me permitía ver; aunque ello haya significado y signifique muchas veces enojos, por quegracias a ello he crecido y en mi llevaré muchas de sus palabras de aliento. Las quiero a todas, por lo que soncada una, y por lo que cada una me ha enseñado.

A Fonso, Nacho, Beny y Luis

Por que por ustedes he aprendido la fuerza, y la entereza. Por sus consejos y por su ejemplo. Por lo que son ypor lo que me han dado.

A Octavio,

Por haber secado mis lágrimas, y llorado conmigo. Por haberme animado a seguir cuando a veces queríaparar, por creer en mí y por estar conmigo desde el principio hasta este final, que es solo el comienzo.

A mis maestros,

A los que no solo nutrieron mi mente sino mi espíritu, les debo mucho de lo que soy, mucho de lo que tengo, yaunque algunos ya no están aquí para saber que les debo, desde donde estén, a todos y cada uno, lesagradezco lo que me han regalado, por que será un regalo que llevaré en mi hasta el último día de mi vida.

A mis amigos y compañeros,

Por ser mis oídos y mis manos, por estar, por reír y por llorar conmigo, por ser parte de mi vida, no puedoolvidar a quien tanto debo.

Gaby

REPORTE:PROYECTO DE INVESTIGACIÓN II

5

INDICE

1) INTRODUCCION 52) ANTECEDENTES 7

2.1 A CERCA DEL IMP 72.2 HISTORIA DEL IMP 72.3 AREAS DE INVESTIGACIÓN 7 2.3.1 EL IMP Y EL MEDIO AMBIENTE 7

3) METODOLOGIA 9

3.1 ANALISIS 9 3.1.1 CASO DE USO, CONSULTA DE CALLES Y AVENIDAS 9 3.1.2 CASO DE USO ACTUALIZACION DE CALLES Y AVENIDAS 11

3.2 DISEÑO 14

4) CONSTRUCCION 18

4.1 CONEXIÓN A LA BASE DE DATOS 18 4.1.1 CONSTRUCCION DE LA BASE DE DATOS 18 4.1.2 SOBRE JAVA 21 4.1.3 ACCESO DE LA BASE DE DATOS DESDE JAVA 22 4.1.4 APLETS 25 4.1.5 INTRODUCCION A LOS SERVLETS 36 4.1.6 TOMCAT 38

5) MANUAL DE USUARIO 40

6) CONCLUSIONES 44

7) BIBLIOGRAFIA 45

REPORTE:PROYECTO DE INVESTIGACIÓN II

6

1. INTRODUCCIÓN

Cada vez más se desarrollan sistemas amigables y complejos para estudiar el tráfico y sus emisionescontaminantes. Estos sistemas son vendidos sobre todo por compañías transnacionales a usuarios en paísesen vías de desarrollo.

Por ende, México depende también de estas empresas que nos suministran este tipo de Software. Esdecir, nuestro país generalmente no desarrolla estos sistemas sofisticados y con un alto nivel devisualización.

Sin embargo estos, aunque elegantes y atractivos, no son apropiados para estudiar el tránsito de laCiudad de México que tiene características muy diferentes y peculiares de aquellas ciudades del primermundo que si son mejor descritas por esos modelos.

Por ejemplo en la Ciudad de México a diferencia de otras ciudades del mundo, los conductores deautomóviles “dan vueltas en u”, muchos de ellos no respetan las señales de tránsito y se pasan los “altos”. Los“microbuses” viajan en más de un carril en las calles causando enormes problemas de tránsito, etc. Por otrolado, en nuestra ciudad existen más de tres millones de automóviles, miles de microbuses, autobuses y otrosmedios de transporte urbano.

Por esta razón, es indispensable crear modelos apropiados y útiles para estudiar el transporte urbano deesta Ciudad.

Parte de esos estudios incluye el desarrollo de modelos matemáticos de alta precisión. Sin embargo, elmanejo de esos sistemas tiene que ser amigable para los usuarios, dada la competencia que existe en elmercado de esos productos.

Bajo esta perspectiva, el Instituto Mexicano del Petróleo, está impulsando un ambicioso proyecto encaminadoa modelar el tránsito en la Ciudad de México considerando todas sus peculiaridades, y la presenteinvestigación es parte (es un módulo) de dicho proyecto. A largo plazo se pretende hacer la conjunción detodos esos módulos y de esta forma obtener un super-software desarrollado únicamente para modelar a laciudad más grande del mundo.

El desarrollo de este software implica hacer manejo de complejos modelos matemáticos, peroactualmente se busca, que no importando la complejidad de lo que el software modele, el sistema debe seramigable. Por esta razón, nuestro software tiene esta característica fundamental: amigable para el usuario.

El objetivo general es desarrollar un sistema visual amigable para la administración sencilla, eficientey rápida de datos de un conjunto de calles y avenidas, que modelan un sistema de tráfico urbano.

El sistema desarrollado simulará un conjunto de calles y avenidas. De las cuales podrán conocerse entiempo real características como su nombre, número de carrilles, si existen o no semáforos en las esquinas yotras propiedades que las caracterizan, tomadas de un Base de Datos que las describa.

REPORTE:PROYECTO DE INVESTIGACIÓN II

7

El sistema debe ser altamente portable, por lo que deberá ser desarrollado en JAVA. Además de permitir laadministración de los datos calles, avenidas y esquinas. Es decir que además de consultarse, puedanactualizarse o cambiarse, Todo esto en tiempo real y de manera amigable.

2. ANTECEDENTES.

Este proyecto de investigación se llevó a cabo en el Instituto Mexicano del Petróleo (IMP), bajo la asesoríadirecta del Doctor Nicolás Domínguez, investigador de esta institución.

2.1 A cerca del IMP

El IMP es actualmente una de las instituciones con mayor trayectoria en investigación científica y unaimportante plataforma para el desarrollo de nuestro país en las áreas petrolera, química y petroquímicabásica y derivada.

El objetivo principal del Instituto es mantener y promover la capacidad de autofinanciamiento energético denuestro país, esto en cooperación directa con Petróleos Mexicanos, su principal cliente. Esta misión se haconservado desde la creación del instituto en tiempos del presidente Gustavo Díaz Ordaz quien aprobó undecreto que se publicaría en el Diario Oficial, en el cual se establecen como objetivos fundamentales: crearprogramas de investigación científica básica y aplicada; formar investigadores; desarrollar tecnologíasaplicables a la técnica petrolera, y capacitar personal en todos los niveles .

2.2 Historia del IMP

El Instituto Mexicano del Petróleo – surge como una institución descentralizada del Gobierno Federal el 23 deagosto de 1965, como iniciativa del entonces director general de PEMEX, Jesús Reyes Heroles, quienreconoció que la planeación y el desarrollo de la industria petrolera deberían ser congruentes con lasnecesidades de una economía mixta y planteó al presidente Gustavo Díaz Ordaz la urgencia de fomentar lainvestigación petrolera y formar recursos humanos que impulsaran el desarrollo de tecnología propia.

Desde el principio se tuvo como objetivo el aprovechamiento de uno de los mayores recursos con los quecuenta nuestro país, el petróleo, en cada una de las disciplinas en las que este recurso se halle involucrado.Fue creado entonces para generar tecnología petrolera propia y así reducir los altos gastos que existían porconcepto de importación de la misma.

2.3 Àreas de Investigación

El IMP trabaja a la par con PEMEX, por lo que las actividades de Investigación de ambas instituciones seencuentran alineadas y prácticamente sincronizadas tecnológicamente.

Las investigadores del Instituto trabajan en contacto con investigares de otros países en áreas afines, lo cualnutre significativamente los avances hechos en esta Institución. De esta forma puede conseguirsefinanciamiento y proyectos externos, lo que posiciona en gran medida a la institución

Mediante los Programas de Investigación, el IMP busca el fortalecimiento de la excelencia en la investigación yen el otorgamiento de servicios de alta capacidad tecnológica.

REPORTE:PROYECTO DE INVESTIGACIÓN II

8

2.3.1 El IMP y el medio ambiente

Se han abierto importantes campos de investigación, vinculados con la actitud responsable de Pemex, sobrelos efectos que las actividades de la industria petrolera pueden causar en el ambiente.

Durante años se han ideado programas de control de la contaminación urbana como si sólo fuera un problemalocal y se exige que los combustibles cumplan con rigurosas especificaciones de calidad; sin embargo, poco sesabe cómo se transportan esos mismos contaminantes, a través de la atmósfera, desde otras regiones.

En cuanto al transporte de personas y bienes, éste tradicionalmente se ha hecho por medio de vehículosautomotores de gasolina y diesel, con marcada participación de los primeros; ahora, mediante procedimientosexperimentales y modelación, es posible predecir y evaluar los cambios en los impactos ambientalescorrespondientes a una oferta distinta de la canasta de combustibles.

También en la estimación de los impactos, se aplican factores de emisión determinados para condiciones deequipo y operación diferentes a las del país, por eso resulta importante tener un inventario realista de lasemisiones asociadas a los procesos de producción de Pemex para identificar directrices que lleven hacia undesarrollo sustentable.

El aprovechamiento eficiente de la energía implica desarrollar tecnologías que permitan optimar operacionesde destilación en esquemas de refinación, desde los puntos de vista energético, económico y ecológico.

Durante más de 50 años de operación, la industria petrolera ha sido considerada como fuente decontaminación. Pemex, en una respuesta proactiva, ha realizado y financiado estudios que determinan suimpacto, la riqueza de estos datos se puede aprovechar mediante un enfoque que permita un mejor manejoambiental de los recursos.

La proyección de la política de combustibles del país previene el uso masivo del gas natural, como sustituto ocomplemento del GLP en diferentes sectores de actividad productiva, esto conlleva un cambio en los perfilesde emisiones a la atmósfera.

La mayor contaminación del aire en las ciudades proviene del uso de combustibles fósiles en el sectortransporte. Esta contaminación se ha tratado de reducir de varias maneras, entre ellas usando tecnologías,como es el uso de convertidores catalíticos en los automóviles, o bien el mejoramiento de las gasolinas quecontengan menos contaminantes, como es el azufre y el plomo. O también por medio de políticas públicascomo es el programa Hoy no Circula. Todas estas medidas han ayudado y ayudan a disminuir lacontaminación, sin embargo aún faltan al menos muchos decenios para que el sector transporte no emitaemisiones contaminantes al ambiente.

Otra de las maneras para disminuir la contaminación es el mejorar la vialidad en las ciudades, con estotambién se podría disminuir la cantidad de combustibles que se usa en el sector transporte. El problema demejorar la vialidad consiste en gran parte en disminuir los congestionamientos en las ciudades.

Una herramienta muy importante y valiosa para resolver estos problemas consiste en el desarrollo de modelosmatemáticos de los cuales se obtengan resultados que muestren como evitar esos congestionamientos. Esosmodelos matemáticos deben ser apropiados, en el sentido de que reflejen la situación real del tránsito en lascalles que modelan.

REPORTE:PROYECTO DE INVESTIGACIÓN II

9

El presente trabajo es una herramienta para parte de la modelación matemática del tránsito en las ciudades yconsiste en la modelación de las calles y en la caracterización de ellas de una manera computacionalmenteamigable.

3. METODOLOGÍA

3.1 ANALISIS

3.1.1 CASO DE USO CONSULTA DE CALLES Y AVENIDAS

Propósito del Caso de Uso

Visualización de las calles y Esquinas que conforman el Sistema Urbano.

Actores

• Investigador Interno del IMP(Instituto Mexicano del Petróleo).

PRECONDICIONES

• Conexión a Internet desde cualquier punto que se encuentre.• El Usuario del Sistema debe tener asignada una clave de usuario y una contraseña para entrar a Internet.

FLUJO DE EVENTOS.

El caso de Uso Inicia cuando el Actor, desde su PC se conecta a Internet y accesa a la páginahttp://localhost:8080/examples/servlets/cicks.html

El Actor debe seleccionar una calle o esquina y dar clic. El sistema mostrará en una ventana los siguientesDatos:

Si fue calle:

Calle

REPORTE:PROYECTO DE INVESTIGACIÓN II

10

CarrilesTopesSentidoVelocidadLongitudTiempo

Si fue Esquina

Calle 1Calle 2Verde 1Rojo 1Verde 2Rojo 2

Para salir el Actor deberá cerrar la ventana y cerrar la sesión y el caso de uso termina.

POSTCONDICIONES

No hay postcondiciones.

REPORTE:PROYECTO DE INVESTIGACIÓN II

11

REPORTE:PROYECTO DE INVESTIGACIÓN II

12

3.1.2 CASO DE USO ACTUALIZACIÓN DE CALLES Y AVENIDAS

Propósito del Caso de Uso

Actualización de las calles y Esquinas que conforman el Sistema Urbano.

Actores

• Investigador Interno del IMP(Instituto Mexicano del Petróleo).

PRECONDICIONES

• Conexión a Internet desde cualquier punto que se encuentre.• El Usuario del Sistema debe tener asignada una clave de usuario y una contraseña para entrar a Internet.• Que existan y contengan información las tablas calle y esquina.

FLUJO DE EVENTOS.

El caso de Uso Inicia cuando el Actor, desde su PC se conecta a Internet y accesa a la páginahttp://localhost:8080/examples/servlets/cicks.html

El usuario debe seleccionar una calle o esquina y dar clic. El sistema mostrará en una ventana los siguientesdatos con la posibilidad de modificarlos:

Si fue calle:

CalleCarrilesTopesSentidoVelocidadLongitud

REPORTE:PROYECTO DE INVESTIGACIÓN II

13

Tiempo

Si fue Esquina

Calle 1Calle 2Verde 1Rojo 1Verde 2Rojo 2

Una vez hecho los cambios, el usuario deberá dar clic en el botón de Actualizar inmediatamente el sistemarealizara las actualizaciones convenientes y se cerrara la ventana. Así el caso de uso termina

POSTCONDICIONES

Los cambios habrán sido aplicados en las tablas correspondientes.

REPORTE:PROYECTO DE INVESTIGACIÓN II

14

REPORTE:PROYECTO DE INVESTIGACIÓN II

15

3.2 DISEÑO

esquinaid_esquinacalle_1calle_2t_verde_1t_rojo_1t_verde_2t_rojo_2

update()

calleid_callenombre_ccarrilessentidotopesvel_maxdistanciatiempo

update()

2

1..*1..*

2

RELACION DE TABLAS

REPORTE:PROYECTO DE INVESTIGACIÓN II

16

DriverManager

getConnection()getConnection()getConnection()getDriver()registerDriver()deregisterDriver()getDrivers()setLoginTimeout()getLoginTimeout()setLogStream()getLogStream()println()initialize()

(from sql)

Srvguardatos

doGet()doPost()

Connection

$ TRANSACTION_NONE : int = 0$ TRANSACTION_READ_UNCOMMITTED : int = 1$ TRANSACTION_READ_COMMITTED : int = 2$ TRANSACTION_REPEATABLE_READ : int = 4

createStatement()prepareStatement()prepareCall()nativeSQL()setAutoCommit()getAutoCommit()commit()rollback()close()isClosed()getMetaData()setReadOnly()isReadOnly()setCatalog()getCatalog()setTransactionIsolation()getTransactionIsolation()getWarnings()clearWarnings()

(from sql)

<<Interface>>

Statement

executeQuery()executeUpdate()close()getMaxFieldSize()setMaxFieldSize()getMaxRows()setMaxRows()setEscapeProcessing()getQueryTimeout()setQueryTimeout()cancel()getWarnings()clearWarnings()setCursorName()execute()getResultSet()getUpdateCount()getMoreResults()

(from sql)

<<Interface>>

StringBuffer

$ serialVersionUID : long = -271585317

StringBuffer()StringBuffer()StringBuffer()length()capacity()ensureCapacity()setLength()charAt()getChars()setCharAt()append()append()append()append()append()append()append()append()append()append()insert()insert()insert()insert()insert()insert()insert()insert()insert()reverse()toString()setShared()getValue()

(from lang) ResultSet

next()close()wasNull()getString()getBoolean()getByte()getShort()getInt()getLong()getFloat()getDouble()getBigDecimal()getBytes()getDate()getTime()getTimestamp()getAsciiStream()getUnicodeStream()getBinaryStream()getString()getBoolean()getByte()getShort()getInt()getLong()getFloat()getDouble()getBigDecimal()getBytes()getDate()getTime()getTimestamp()getAsciiStream()getUnicodeStream()getBinaryStream()getWarnings()clearWarnings()getCursorName()getMetaData()getObject()getObject()findColumn()

(from sql)

<<Interface>>

SrvBasedatos

doGet()doPost()

ResultSetMetaData

$ columnNoNulls : int = 0$ columnNullable : int = 1$ columnNullableUnknown : int = 2

getColumnCount()isAutoIncrement()isCaseSensitive()isSearchable()isCurrency()isNullable()isSigned()getColumnDisplaySize()getColumnLabel()getColumnName()getSchemaName()getPrecision()getScale()getTableName()getCatalogName()getColumnType()getColumnTypeName()isReadOnly()isWritable()isDefinitelyWritable()

(from sql)

<<Interface>>

RELACION DE CLASES

REPORTE:PROYECTO DE INVESTIGACIÓN II

17

DIAGRAMA DE SECUENCIA CONSULTA

: Connection : DriverManager : SrvBasedatos

getConnection(String)

createStatement( )

: Statement : StringBuffer : ResultSetMetaData : ResultSet

executeQuery(String)

new()

getMetaData( )

getColumnCount( )

getString(int)

REPORTE:PROYECTO DE INVESTIGACIÓN II

18

: Srvguardatos : DriverManager : Connection : Statement

getConnection(String)

createStatement( )

executeUpdate(String)

DIAGRAMA DE SECUENCIA ACTUALIZACION

REPORTE:PROYECTO DE INVESTIGACIÓN II

19

4. CONSTRUCCION

4.1 Conexión a la Base de datos

4.1.1 Construcciòn de la Base de Datos

La interfaz de usuario en la que trabajamos, es un programa que muestra una simulación de un mapa, concalles, avenidas y manzanas, donde el usuario selecciona la calle o la esquina de donde desea obtenerinformación y en su caso modificarla.

Esa información, ya ha sido cargada previamente en una base datos, lo cual hace posiblela manipulación de esos datos.

De acuerdo a los requerimientos del usuario, los datos que nos interesa saber de cualquier calle son: nombre,número de topes y carriles, longitud, velocidad máxima permitida, además de saber si la calle es o no doblesentido.

Y los datos de interés de cualquier esquina son: el tiempo de duración de la luz verde y roja.

De este modo observamos que requerimos una base de datos muy sencilla. Identificamos dos entidades quellamaremos CALLE y ESQUINA que contendrán respectivamente la información sobre las calles y esquinas, .

Los atributos de la tabla CALLE son cada uno de los datos requeridos por el usuario, en donde cada registrocorresponderá a una calle diferente y contará con un identificador único.Este identificador es un dato que no es de interés para el usuario pero es muy importante a nivelprogramación, pues aunque en el sistema se maneja cada calle con un nombre único, puede llegar a ocurrirproblemas al modelar las esquinas, dado que una misma calle tiene varias esquinas.

La entidad queda entonces de la siguiente manera :

CALLE(id_calle, Nombre_c, Carriles, Sentido, Topes, Vel_max, Distancia, Tiempo).

Para establecer los atributos de la tabla ESQUINA es necesario tomar en cuenta dos aspectos: el primero esque los tiempos del semáforo son cuatro, porque es rojo y verde para una calle; rojo y verde para la otra calle,con el entendido de que el tiempo de verde de una calle es el tiempo de rojo de la otra y viceversa (se omite elámbar porque no es de interés para el usuario ese tiempo)El segundo, es que estas dos tablas están relacionadas dado que una esquina se forma de la intersección dedos calles. Por tal motivo se hizo necesario que en la tabla ESQUINA hubieran dos llaves foráneas de la tablaCALLE que son la referencia a las calles que forman le esquina.

Del mismo modo que la calle tiene un identificador, también es necesario que cada esquina tenga unidentificador, por lo que la entidad queda de la siguiente forma:

ESQUINA(Id_esquina, Calle_1, Calle_2, T_verde_1, T_rojo_1, T_verde_2, T_rojo_2).

La base de datos fue diseñada en el manejador de base datos estándar de Windows 2000:

REPORTE:PROYECTO DE INVESTIGACIÓN II

20

De tal suerte que la Base de Datos que llamamos mapa.mdb contiene únicamente dos tablas; CALLE yAVENIDA y el siguiente modelo entidad relación es el siguiente:

CALLE ESQUINA CALLE

En realidad solo existe una tabla CALLE, pero al requerirse dos llaves foráneas las cuales forman la llaveprincipal de dicha tabla, ACCES por default duplica esa tabla al generar el modelo ER.

Y para que sea mas clara la estructura de nuestra base de datos se tiene este diccionario de datos:

En realidad solo existe una tabla calle, pero al requerir que se tengan dos llaves foráneas que son la llevaprincipal de la misma tabla, ACCES duplica esa tabla al crear el modelo ER.

Con la finalidad de que quede mas clara la estructura de la base de datos se tiene este diccionario de datos:

Tabla CALLE:

id_calle: Es la clave que se usa como identificador para las calles. Es de tipo numérico con formato de entero yes atributo llave.

Nombre_c: Es el campo que almacena el nombre de la calle, por lo que es de tipo texto con una longitud de 50caracteres

Carriles: Hace referencia al número de carriles que hay en la calle. Es de tipo numérico con formato entero.

Sentido: Indica si la calle es o no de doble sentido. Es de tipo texto.

Topes: Indica cuantos topes hay en esa calle. Este campo es de tipo numérico con formato entero pues

Vel_max: Este campo almacena la velocidad máxima permitida para esa calle por lo que es de tipo numéricocon formato de número general con dos decimales.

Distancia: Es la longitud en kilómetros que mide la calle .Es de tipo numérico con formato de número generalcon dos decimales.

Tiempo: Es la referencia del tiempo que tardaría un automóvil en recorrer esa calle a la velocidad máximapermitida.

Tabla ESQUINA

Los datos de mayor relevancia de cada esquina son el tiempo de luz verde y roja de los semáforos, ademásde las calles por las que está formada.La descripción de los campos de esta tabla es la siguiente:

CALLE ESQUINA CALLE

REPORTE:PROYECTO DE INVESTIGACIÓN II

21

Id_esquina: Es el atributo llave para esta tabla pues es el identificador de cada esquina. Es de tipo numéricocon formato de entero.

Calle_1: Este campo es una llave foránea de la tabla de calle que hace referencia a la primera calle con la quese hace esquina.

Calle _2: Es también llave foránea de la tabla calle que indica la segunda calle de la esquina. Por lo que losdos últimos campos son de tipo numérico con formato de entero.

T_verde_1: Es el tiempo en segundos que dura el verde para la calle 1.

T_rojo_1: Es el tiempo en segundos que dura el semáforo en rojo para la calle 1.

T_verde_2: Es el tiempo en segundos que dura el verde para la calle 2.

T_rojo_2: Es el tiempo en segundos que dura el semáforo en rojo para la calle 2.

Los cuatro campos que hacen referencia a la duración de los colores del semáforo son de tipo numérico conformato de entero y el tiempo del verde del semáforo 1 debe ser el mismo que el del rojo del semáforo 2 yviceversa.

Es importante mencionar que la base de datos puede manipularse como cualquier otra con SQL, pero lo quehace interesante este trabajo de investigación es el poder acceder desde una interfaz gráfica (en JAVA, de locual hablaremos más adelante) a dicha base de datos.

4.1.2 Sobre JAVA

Java es un lenguaje de programación orientado a objetos, desarrollado por Sun Microsystem. Moldeado enC++ el lenguaje Java es diseñado para ser pequeño, sencillo y portátil a través de plataformas y sistemasoperativos, tanto en nivel de código fuente como en binario.

Java tiene el mismo origen que HotJava, un visualizador World Wide Web de Sun que además de suscaracterísticas básicas Web, también puede transferir y ejecutar applets en el sistema del lector. Los appletsaparecen en una página Web de una manera parecida a las imágenes, pero a diferencia de éstas, los appletsson dinámicos e interactivos, se utilizan para crear animaciones, figuras o áreas que puedan responder aentradas del usuario, juegos u otros efectos interactivos en las mismas páginas Web entre el texto y losgráficos.

Java se escribió como un lenguaje de programación completo, donde es posible realizar las mismas tareas ysolucionar el mismo tipo de problemas que con otro lenguaje de programación como C o C++. HotJava mismo,incluidas todas las capacidades de la red, despliegue y elementos de interfaz de usuario.

REPORTE:PROYECTO DE INVESTIGACIÓN II

22

4.1.3 Acceso a la Base de Datos desde JAVA

Antes de desarrollar propiamente la clase de conexión a la base de datos, es necesario instalar el JDK (JavaDevelopment Kit).

JDBC (Java DataBase Connectivity) es una parte del API de Java que proporciona clases para conectarse conbases de datos. Dichas clases forman parte del package java.sql, disponible a partir de JAVA 1.1.7.El nombre JDBC es fonéticamente similar a ODBC (Open DataBase Connectivity), que es el estándar másextendido para conectar PCs con bases de datos.

De esta forma el JDBC será el que nos ayude a crear la conexión a la Base de Datos mapa.mdl.

Como comentábamos anteriormente, una vez instalado el JDK, el JDBC viene ya incluido, por lo que no esnecesario una configuración especial.Para instalar la plataforma JAVA y por lo tanto el API JDBC debemos simplemente seguir las instrucciones dedescarga de la última versión del JDK, y contaremos ya con las bondades de JDBC.

La última versión del JDK se puede conseguirse en la página de SUN, con su respectivo instructivo deinstalación en la siguiente dirección:

http://java.sun.com/

Para poder crear el puente JDBC-ODBC, el JDBC requiere de una fuente de datos u ODBC.

Un ODBC sirve para tener acceso a datos desde una gran variedad de sistemas de administración de basesde datos. Por ejemplo, en nuestro caso, se està construyendo un programa que obtiene acceso a los datosde una base de datos de SQL, Orígenes de datos (ODBC) nos permitiría por ejemplo usar el mismo programapara tener acceso a los datos de una base de datos en Oracle y a otra de Access. Para ello, debe agregarcomponentes de software al sistema, que son a los que llamamos drivers o controladores. Orígenes de datos(ODBC)nos ayuda a agregar y a configurar estos controladores.

Entonces lo siguiente es cerciorarnos de que en efecto contamos con los controladotes, para poder crearnuestro puente entre nuestra clase de Java y ACCESS (nuestro manejador de Base de Datos).Para generar un ODBC debemos hacer lo siguiente:

• Abrir Orígenes de datos (ODBC): clic en Inicio y, a continuación, en Panel de control. Haga doble clicen Herramientas administrativas y, después, doble clic en Orígenes de datos (ODBC). Aquí, en lapestaña de Controladores observamos que ya contamos con un controlador para Access:

REPORTE:PROYECTO DE INVESTIGACIÓN II

23

Siempre que se trabaja sobre WIN 32, los controladotes para Access, se incluyen por default. No es necesarioinstalarlos

• Posteriormente procedemos a crear nuestro ODBC: en la pantalla de DSN de Sistema, agregamosnuestro ODBC, al cual llamamos jdbctest

Es importante resaltar que este caso seleccionamos nuestra base de datos mapa.mdb, que será de dondesustraeremos la información.

Una vez hecho esto, podemos comenzar a trabajar sobre JAVA en nuestra clase de conexión. Los pasos quese siguen la clase son los siguientes:

REPORTE:PROYECTO DE INVESTIGACIÓN II

24

• Cargar el Controlador

Ya que nosotros utilizamos el puente JDBC-ODBC, se cargó la siguiente línea de código.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Una vez cargado el driver, es posible hacer una conexión con ACCESS, nuestro manejador de base de datos.

Lo siguiente que paso, es tener conectado nuestro manejador a Access. En general la estructura de la líneade código para este propósito sería la siguiente:

con = DriverManager.getConnection(url, "Login", "Password");

donde la estructura de url se forma como sigue; empieza con jdbc:odbc:. Y el resto de la URL es la fuente denuestros datos u ODBC, en nuestro caso, dado que nuestro ODBC se llama jdbctest, la URL sería“jdbc:odbc:jdbctest”.

Login y Password, corresponden respectivamente al usuario y contraseña para conectarse a la base de datos,como es que caso de SQL Server. Pero en nuestro caso no aplica, dado que no se requiere ninguno de ellos.En este caso, los dejamos en blanco. Quedando nuestra línea de código de conexión como sigue

con = DriverManager.getConnection("jdbc:odbc:jdbctest","","");

La clase DriverManager, maneja todos los detalles del establecimiento de la conexión. Detalles que nosotrosno podemos ver.

La conexión devuelta por el método DriverManager.getConnection es una conexión abierta, que utilizamospara crear sentencias JDBC, por donde pasan nuestras sentencias de SQL hacia ACCESS.

Crear sentencias JDBC

Un objeto Statement es el que envía las sentencias SQL al controlador de la base de datos, en nuestro casoACCESS.

Para lo cual creamos un objeto Statement y lo ejecutamos, tomando en cuenta que debemos suministrar elmétodo SQL apropiado con la sentencia SQL que queremos enviar.

En nuestro caso necesitamos hacer un SELECT a las tablas por lo que el método es executeQuery.

Para sentencias que crean o modifican tablas, el método que se utiliza es executeUpdate, tal como lohacemos para hacer updates, en el caso de que el usuario desea cambiar algunos de los datos de calles oavenidas.

Finalmente, antes de poner cualquier tipo de poner cualquier código a la clase es necesario importar lospaquetes o clases que se van a utilizar en la nueva clase. Los paquetes de clases se cargan con la palabra

REPORTE:PROYECTO DE INVESTIGACIÓN II

25

clave import, especificando el nombre del paquete como ruta y nombre de clase (es lo mismo que #include deC/C++). Se pueden cargar varias clases utilizando un asterisco.

Todas las clases requeridas opara generar código SQL utilizan el paquete java.sql, que se hace visible cuandola siguiente línea de código precede a la definición de clase.

import java.sql.*;

Donde el asterisco (*) como decíamos indica que todas las clases del paquete java serán importadas. Importaruna clase la hace visible y significa que no tendremos que escribir su nombre totalmente cualificado cuandoutilicemos un método o un campo de esa clase.

El còdigo de la clase de conexión a la base de datos se utiliza directamente en los servlets. De lo cualhablaremos màs adelante.

4.1.4 APPLETS

Los programas java comprenden dos grupos principales: applets y aplicaciones.

Los applets son programas java que se cargan del World Wide Web y se ejecutan mediante un visualizadorWeb en la máquina del lector. Para ejecutarse depende de un visualizador habilitado para Java.

Las aplicaciones son programas más generales. No requieren un visualizador para ejecutarse y, de hecho,Java puede emplearse para crear toda clase de aplicaciones posibles, como si utilizara un lenguaje deprogramación más convencional.

Crear applets es diferente a crear una aplicación sencilla, ya que los applts Java se ejecutan y despliegandesde una página Web con otros elementos de página y, como tales, cuentan con reglas especiales para elmodo en que deberán comportarse. A causa de estas reglas, en muchas ocasiones crear un applet es máscomplejo que crear una aplicación.

La programación orientada a objetos está modelada sobre cómo, al igual que en el mundo real, los objetos losobjetos con frecuencia están formados por varias clases de objetos más pequeños. Esta capacidad decombinar objetos sólo es un aspecto muy general de la programación orientada a objetos. Esta proporcionaotros conceptos y características para hacer más fácil y más flexible la creación y utilización de objetos, dondelas más importantes de estas características son las clases.

Una clase es una plantilla para objetos múltiples con características similares. Las clases comprenden todaslas características de una serie particular fe objetos.

Cuando escribe un programa en lenguaje orientado a objetos, no definimos objetos verdaderos, definimosclases de objetos.

Para definir el comportamiento de un objeto, se crean métodos que son funciones definidas dentro de lasclases que operan en la instancia de estas clases.

REPORTE:PROYECTO DE INVESTIGACIÓN II

26

Para llamar a un método en los objetos se utiliza la notación punto. El objeto, cuyo método llama, está en ellado izquierdo del punto, y el nombre del método y sus argumentos se encuentran al lado derecho del punto.Todos los métodos deben tener paréntesis enseguida, aun si el método no tiene argumentos.

La biblioteca de clases de Java ofrece el conjunto de clases disponibles garantizadas en cualquier ambientecomercial de Java. Estas clases se encuentran en el paquete Java.

En el cuerpo de una definición de método para referirse al objeto actual (el objeto que llamo al método) parareferirse a las variables de instancia de ese objeto o para pasar el objeto actual como un argumento a otrométodo. Para referirse al objeto actual en estos casos se puede usar la palabra clave (reservada) this, la cualhace referencia al objeto actual y se puede utilizar en cualquier lugar en que este aparezca .

Tal vez resulte confuso hasta hora lo que se ha visto, pero más adelante se irán aclarando las ideas y losconceptos conforme se avance en la creación de nuestra clase. Con respecto a la sintaxis y estructuras decontrol en Java solo mencionaremos que es, si no igual, sí muy parecida a la de C++ y eso se verá tambiénmas adelante en el desarrollo del programa.

Bibliotecas de Java

Empecemos a explicar lo de las bibliotecas que como todo lenguaje de programación deben tener. Cuando serequiere de un método que ya esta definido en un paquete de clases, se llama esa biblioteca con la palabraclave import. Por ejemplo:

Import java.awt.Graphics;Import java.awt.Color;Import java.awt.Event;Import java net.*;Import java.io.*;Import java.util.*;Import java.applet.*;

El import en java es análogo al include en C o C++, los ejemplos mencionados son precisamente los queusamos en la clase que realizamos porque eran las que necesitábamos.

El paquete java.util contiene varias clases de utilidades e interfaces, incluidos números aleatorios, propiedadesdel sistema y otras clases útiles.

El paquete java.io ofrece clases de entrada y salida e interfaces para flujo y archivos.

El paquete java.net contiene las clases e interfaces para llevar a cabo operaciones de red, como sockets yURL’s.

El paquete java.awt contiene las clases e interfaces que conforman el Abstract Windowing Toolkit.

El paquete java.applet ofrece un comportamiento especifico para applets.

REPORTE:PROYECTO DE INVESTIGACIÓN II

27

Variables y constantes

La forma de declara constantes o variables es muy similar que en C o C++, es decir, que si una constante ovariable es definida de forma global, se podrá afectar desde cualquier método que se defina en esa clase, perosi es declarada en forma local solo será accesada y modificada en el método que haya sido definida.

Para declara una variable se indica el tipo de variable, su nombre y es opcional si se le da un valor inicial.

Para una constante es necesario usar la palabra clave final y después el nombre de esa variable y el valor quellevará durante loa ejecución del programa. Por ejemplo:

Final int LARGO = 150;Final int ALTO = 60;int xspots=0;int yspots=0;int l,a;int imprimir=0;int idesquina;int idcalle;int pagina;

Estas son las variables y constantes globales que usamos en nuestra clase, las cuales deben de ir antes desobreponer cualquier método.

Las dos primeras constantes se refieren a la longitud en pixeles que tendrán cada uno de los rectángulos querepresentan manzanas en el modelo de mapa.

Las variables xspots y yspots seran las coordenadas de la esquina superior izquierda del rectángulo a dibujarpara marcar la calle o esquina seleccionada por el usuario. Y las variable l y a son la longitud de largo y alto dedicho rectángulo.

La variable imprimir la creamos para que nos auxilie para saber si hay que pintar o no algo nuevo.

La variables idesquina, idcalle y pagina son las que se pasaran como parámetro al servlet para mostrar alusuario los datos de la calle o esquina de su selección.

Creación de Applets

Para crear un applet, se define una subclase de la clase applet, en el paquete java.applet. Esta clase ofrece uncomportamiento que le permite a su applet no sólo funcionar dentro del visualizador, sino también tomarventaja de las capacidades de AWT para incluir elementos de interfaz de usuario y manejar eventos del mousey palabras clave, así como para dibujar en la pantalla. Es la clase del applet principal la que dispara laejecución de éste. Dicha clase inicial siempre tendrá una identificación como esta:

Public class namelass extends java.applet.Applet

Nosotros llamamos a nuestra clase Spots2 Por lo que nuestra clase inicial es así:

REPORTE:PROYECTO DE INVESTIGACIÓN II

28

Public class Spots2 extends java.applet.Applet

Actividades principales de los applets

Los applets tienen diferentes actividades que corresponden a varios eventos principales en su ciclo de vida;por ejemplo, la inicialización, los eventos del ratón(mouse), la pintura, etc.

NOTA: Precisamente el hecho de que una de las actividades de un applet sea el controlar los eventos delmouse, fue la razón por la que nuestra clase es un applet y no una aplicación, pues recordemos que elprograma necesita saber cuando se le daun clic a una calle o a una esquina.

Cada actividad tiene un método correspondiente, cuando ocurre un evento, así que el visualizador u otraherramienta Java llama a esos métodos especificos.

Entre los métodos más relevantes están la inicialización (init()), arranque(start()), detención(stop()), destrucción(destroy()) y pintura(paint()). En Spots2 sólo utilizamos la iniciación(init()) y la pintura(paint()) por lo que sóloprofundizaremos en estos dos.

Inicialización

La inicialización se lleva a cabo cuando se carga o recarga por primera vez el applet. Este proceso incluye lacreación de los objetos que necesita, configuración de un estado inicial, cargado de imágenes o fuentes oestablecimientos de parámetros. Para proporcionar un comportamiento para la inicialización del applet, sesobrepone el método init()

Public void init(){...}

En la clase Spots2 en la inicialización sólo estamos inicializando el color de fondo del applet por lo que quedade la siguiente manera:

Public void init(){ SetBackground(newColor(167,167,167);}

Los números en newColor corresponden al valor hexadecimal del tono en RGB (red, green, black) paraconfigurar un color.

Pintura

Un applet dibuja algo en la pantalla, sea texto, una línea, un fondo a color o una imagen. Esto ocurre cientosde veces durante el ciclo de vida de un applet. Para esto hay que sobreponer el método paint.

Public void paint(Graphics g){...}

REPORTE:PROYECTO DE INVESTIGACIÓN II

29

Hay que observar que éste toma un argumento, una instancia de la clase Graphics este objeto se crea y sepasa a paint por el visualizador. Para eso hay que asegurarse que la clase Graphics que es parte del paquetejava.awt se importe al código del applet y como vimos anteriormente sí esta ese import.

En nuestra clase, el método paint, es el que se encarga de pintar el modelo del mapa y de marcar la calle oesquina que el usuario seleccionó mediante el mouse y se encarga de ejecutar el servlet que muestra lainformación obtenida de la base de datos yqueda de la siguiente forma:

public void paint(Graphics g){ g.setColor(new Color (0,100,0)); g.fillRect(50,40,LARGO,ALTO); g.fillRect(250,40,LARGO,ALTO); g.fillRect(450,40,LARGO,ALTO); g.fillRect(650,40,LARGO,ALTO); g.fillRect(50,120,LARGO,ALTO); g.fillRect(250,120,LARGO,ALTO); g.fillRect(450,120,LARGO,ALTO); g.fillRect(650,120,LARGO,ALTO); g.fillRect(50,200,LARGO,ALTO); g.fillRect(250,200,LARGO,ALTO); g.fillRect(450,200,LARGO,ALTO); g.fillRect(650,200,LARGO,ALTO); g.fillRect(50,280,LARGO,ALTO); g.fillRect(250,280,LARGO,ALTO); g.fillRect(450,280,LARGO,ALTO); g.fillRect(650,280,LARGO,ALTO); g.fillRect(50,360,LARGO,ALTO); g.fillRect(250,360,LARGO,ALTO); g.fillRect(450,360,LARGO,ALTO); g.fillRect(650,360,LARGO,ALTO); g.setColor(new Color(2,17,155)); if (imprimir==1){ g.fillRect(xspots,yspots,l,a); try { URL direccion=newURL("http://localhost:8080/examples/servlet/SrvBasedatos?idesquina="+idesquina+"&pagina="+pagina+"&idcalle="+idcalle+""); getAppletContext().showDocument(direccion,"ventana"); } catch (Exception f) { System.out.println("error:" +f.getMessage()); }

imprimir=0; }

REPORTE:PROYECTO DE INVESTIGACIÓN II

30

}}

Nota: Observe como se usa la notación punto de la que se hablo anteriormente, el objeto es llamado g y eseste objeto el que llama a métodos como fillRect y setColor.

El método fillRect se usa para pintar rectángulos iluminados y recibe cuatro parámetros:El primero y el segundo son las coordenadas en X y Y (columna y renglón) repectivamente de la esquinasuperior izquierda del rectángulo.El tercero y cuarto son las longitudes en pixeles del largo y del ancho respectivamente del rectángulo. (Ennuestro caso usamos constantes ya definidas LARGO y ALTO o l, a de las que ya se hablaron anteriormente)

El método setColor sirve para actualizar un color y precisamente es ese el parámetro que recibe.

Este método toma un color y pinta todos los rectángulos que representan las manzanas en nuestro mapa, ydespués cambia de color para pintar un rectángulo que marque la calle o esquina seleccionada por el usuario.Pero antes de pintar dicho rectángulo evalúa con la variable imprimir si hay que hacerlo o no, es decir, siefectivamente fue seleccionada una esquina o una calle; si fue cierto pinta el rectángulo y ejecuta la instrucciónque carga el servlet con los parámetros adecuado Se hablará detalladamente sobre servlets mas adelante, porahora solo diremos que los parámetros que se pasan son la esquina o calle seleccionada por medio de lasvariables idesquina y idcalle; así como la página a ejecutarse por medio de la variable página. Esto se hacemediante la siguiente instrucción:

try{ URL direccion=newURL("http://localhost:8080/examples/servlet/SrvBasedatos?idesquina="+idesquina+"&pagina="+pagina+"&idcalle="+idcalle+""); getAppletContext().showDocument(direccion,"ventana");}catch (Exception f){ System.out.println("error:" +f.getMessage());}

La estructura:

try{...}catch{...}

Lo que hace es intentar ejecutar acción en try y si no hubo ningún error o problema lo hace, y en otro caso segenera una excepción que es lo que se ejecuta en catch.

Por último, lo que hace nuestro método paint es poner el valor de variable imprimir en cero para dejarla listapara una siguiente consulta del usuario.

REPORTE:PROYECTO DE INVESTIGACIÓN II

31

Clics del ratón (mouse)

El Abstract Windowing toolkit de java es un paquete de clases que implementan los mas comunescomponentes de interfaz de usuario. De manera especifica es AWT y no Java quien genera y maneja loseventos.

En otras palabras, siempre que le sucede algo a un componente AWT de java, incluido un applet, se genera unevento.

El evento que nosotros necesitamos que se maneje son los clics del ratón y el lugar dentro del applet en quese dio ese evento; pues el usuario seleccionara por medio del mouse la calle o esquina que desea consultar omodificar.

El manejo de eventos del ratón dentro del applet es fácil, simplemente hay que sobreponer la definición delmétodo en el applet. Después dicho método será ejecutado cuando el evento ocurra. Cabe hacer mención queexisten varios métodos que manejan eventos, ya sea del mouse o del teclado. Nosotros el que usamos fue elmouseDown que se genera cuando se oprime el botón del mouse. Dicho método recibe tres parámetros: elevento mismo .y las coordenadas X y Y donde este ocurrió.

De tal forma que dicho método en nuestro applet era de gran utilidad, pues haria la función de cachar el eventoy evaluar las coordenadas donde se genero para saber la calle o esquina en la que se dio clic o si se dio el clicen un lugar del applet que fuera una manzana. Y el método queda de la siguiente forma:

public boolean mouseDown(Event evt, int x, int y){ this.idesquina=0; this.pagina=0; this.idcalle=0; if(!( ((x>50)&&(x<200)&&(y>40)&&(y<100)) ||//PRIMER BLOQUE VERTICAL ((x>50)&&(x<200)&&(y>120)&&(y<180)) || ((x>50)&&(x<200)&&(y>200)&&(y<260)) || ((x>50)&&(x<200)&&(y>280)&&(y<340)) || ((x>50)&&(x<200)&&(y>360)&&(y<420))|| ((x>250)&&(x<400)&&(y>40)&&(y<100)) ||//SEGUNDO BLOQUE VERTICAL ((x>250)&&(x<400)&&(y>120)&&(y<180)) || ((x>250)&&(x<400)&&(y>200)&&(y<260)) || ((x>250)&&(x<400)&&(y>280)&&(y<340)) || ((x>250)&&(x<400)&&(y>360)&&(y<420))|| ((x>450)&&(x<600)&&(y>40)&&(y<100)) ||//TERCER BLOQUE VERTICAL ((x>450)&&(x<600)&&(y>120)&&(y<180)) || ((x>450)&&(x<600)&&(y>200)&&(y<260)) || ((x>450)&&(x<600)&&(y>280)&&(y<340)) || ((x>450)&&(x<600)&&(y>360)&&(y<420))|| ((x>650)&&(x<800)&&(y>40)&&(y<100)) ||//CUARTO BLOQUE VERTICAL ((x>650)&&(x<800)&&(y>120)&&(y<180)) || ((x>650)&&(x<800)&&(y>200)&&(y<260)) || ((x>650)&&(x<800)&&(y>280)&&(y<340)) ||

REPORTE:PROYECTO DE INVESTIGACIÓN II

32

((x>650)&&(x<800)&&(y>360)&&(y<420)) )){ imprimir=1; if ((x<50)&&(y<40)) { xspots=0; yspots=0; l=50; a=40; idesquina=1; pagina=1;}//ESQUINA 1 else if ((x>200)&&(x<250)&&(y<40)) { xspots=200; yspots=0; l=50; a=40; idesquina=2;pagina=1;}//ESQUINA 2 else if ((x>400)&&(x<450)&&(y<40)) { xspots=400; yspots=0; l=50; a=40; idesquina=3;pagina=1;}//ESQUINA 3 else if ((x>600)&&(x<650)&&(y<40)) { xspots=600; yspots=0; l=50; a=40; idesquina=4;pagina=1;}//ESQINA 4 else if ((x>800)&&(y<40)) { xspots=800; yspots=0; l=50; a=40; idesquina=5; pagina=1;}//ESQUINA 5 else if ((x<50)&&(y>100)&&(y<120)) { xspots=0; yspots=100; l=50; a=20; idesquina=6;pagina=1;}//ESQUINA 6 else if ((x>200)&&(x<250)&&(y>100)&&(y<120)) { xspots=200; yspots=100; l=50; a=20; idesquina=7;pagina=1;}//ESQUINA 7 else if ((x>400)&&(x<450)&&(y>100)&&(y<120)) { xspots=400; yspots=100; l=50; a=20; idesquina=8;pagina=1;}//ESQUINA 8 else if ((x>600)&&(x<650)&&(y>100)&&(y<120)) { xspots=600; yspots=100; l=50; a=20; idesquina=9;pagina=1;}//ESQUINA 9 else if ((x>800)&&(y>100)&&(y<120)) { xspots=800; yspots=100; l=50; a=20; idesquina=10;pagina=1;}//ESQUINA 10 else if ((x<50)&&(y>180)&&(y<200)) { xspots=0; yspots=180; l=50; a=20; idesquina=11;pagina=1;}//ESQUINA 11 else if ((x>200)&&(x<250)&&(y>180)&&(y<200)) { xspots=200; yspots=180; l=50; a=20; idesquina=12;pagina=1;}//ESQUINA 12 else if ((x>400)&&(x<450)&&(y>180)&&(y<200)) { xspots=400; yspots=180; l=50; a=20; idesquina=13;pagina=1;}//ESQUINA 13 else if((x>600)&&(x<650)&&(y>180)&&(y<200)){ xspots=600; yspots=180; l=50; a=20; idesquina=14;pagina=1;}//ESQUINA 14 else if((x>800)&&(y>180)&&(y<200)){ xspots=800; yspots=180; l=50; a=20; idesquina=15; pagina=1;}//ESQUINA 15 else if ((x<50)&&(y>260)&&(y<280)) { xspots=0; yspots=260; l=50; a=20; idesquina=16;pagina=1;}//ESQUINA 16

REPORTE:PROYECTO DE INVESTIGACIÓN II

33

else if ((x>200)&&(x<250)&&(y>260)&&(y<280)) { xspots=200; yspots=260; l=50; a=20; idesquina=17;pagina=1;}//ESQUINA 17 else if ((x>400)&&(x<450)&&(y>260)&&(y<280)) { xspots=400; yspots=260; l=50; a=20; idesquina=18;pagina=1;}//ESQUINA 18 else if ((x>600)&&(x<650)&&(y>260)&&(y<280)) { xspots=600; yspots=260; l=50; a=20; idesquina=19;pagina=1;}//ESQUINA 19 else if ((x>800)&&(y>260)&&(y<280)) { xspots=800; yspots=260; l=50; a=20; idesquina=20;pagina=1;}//ESQUINA 20 else if ((x<50)&&(y>340)&&(y<360)) { xspots=0; yspots=340; l=50; a=20; idesquina=21;pagina=1;}//ESQUINA 21 else if ((x>200)&&(x<250)&&(y>340)&&(y<360)) { xspots=200; yspots=340; l=50; a=20; idesquina=22;pagina=1;}//ESQUINA 22 else if ((x>400)&&(x<450)&&(y>340)&&(y<360)) { xspots=400; yspots=340; l=50; a=20; idesquina=23;pagina=1;}//ESQUINA 23 else if((x>600)&&(x<650)&&(y>340)&&(y<360)){ xspots=600; yspots=340; l=50; a=20; idesquina=24;pagina=1;}//ESQUINA 24 else if((x>800)&&(y>340)&&(y<360)){ xspots=800; yspots=340; l=50; a=20; idesquina=25; pagina=1;}//ESQUINA 25 else if ((x<50)&&(y>420)) { xspots=0; yspots=420; l=50; a=80; idesquina=26; pagina=1;}//ESQUINA 26 else if ((x>200)&&(x<250)&&(y>420)) { xspots=200; yspots=420; l=50; a=80; idesquina=27;pagina=1;}//ESQUINA 27 else if ((x>400)&&(x<450)&&(y>420)) { xspots=400; yspots=420; l=50; a=80; idesquina=28;pagina=1;}//ESQUINA 28 else if ((x>600)&&(x<650)&&(y>420)) { xspots=600; yspots=420; l=50; a=80; idesquina=29;pagina=1;}//ESQINA 29 else if ((x>800)&&(y>420)) { xspots=800; yspots=420; l=60; a=80; idesquina=30; pagina=1;}//ESQUINA 30 else{ if (y<40) { xspots=0; yspots=0; l=850; a=40; idcalle=1; pagina=2;}//CALLE 1 if ((y>100)&&(y<120)) { xspots=0; yspots=100; l=850; a=20; idcalle=2; pagina=2;}//CALLE 2 if ((y>180)&&(y<200)) { xspots=0; yspots=180; l=850; a=20; idcalle=3; pagina=2;}//CALLE 3 if ((y>260)&&(y<280)) { xspots=0; yspots=260; l=850; a=20; idcalle=4; pagina=2;}//CALLE 4 if ((y>340)&&(y<360)) { xspots=0; yspots=340; l=850; a=20; idcalle=5; pagina=2;}//CALLE 5 if (y>420) { xspots=0; yspots=420; l=850; a=80; idcalle=6; pagina=2;}//CALLE 6 if (x<50) { xspots=0; yspots=0; l=50; a=500; idcalle=7; pagina=2;}//CALLE 7

REPORTE:PROYECTO DE INVESTIGACIÓN II

34

if ((x>200)&&(x<250)){ xspots=200; yspots=0; l=50; a=500; idcalle=8; pagina=2;}//CALLE 8 if ((x>400)&&(x<450)){ xspots=400; yspots=0; l=50; a=500; idcalle=9; pagina=2;}//CALLE 9 if ((x>600)&&(x<650)){ xspots=600; yspots=0; l=50; a=500; idcalle=10; pagina=2;}//CALLE 10 if (x>800) { xspots=800; yspots=0; l=50; a=500; idcalle=11; pagina=2;}//CALLE 11 } } repaint(); return true;}

El método, lo primero que hace es evaluar si las coordenadas donde se dio el clic son de una manzana. Si nofue así, inmediatamente pone le valor de la variable imprimir en 1 pues sabemos que deberá marcar la calle oesquina seleccionada. Después checa a que esquina o calle se le dio clic y asigna los valorescorrespondientes a las variables l, a, xspots y yspots para el rectángulo que marca lo seleccionado por elusuario. Y también le da el valor correspondiente a las variables idcalle, idesquina y pagina para que el servlethaga lo propio.

Cabe hacer notar que la estructura del if...else en java es igual que en C++; incluso los operadores lógicos andy or se expresan también de la misma forma (and && y or ||); así como también se pueden anexar comentariosde la misma forma que en C y C++ con // para una línea o /*...*/para un bloque mas grande.

Incluir un applet en una página Web

El código fuente se guarda con una extensión *.java por lo que nuestro archivo se llama Spots2.java; y alcompilarse un clase se genera un archivo del mismo nombre con una extensión *.class de manera que nuestraclase se llama Spots2.class.Después de esto se debe crear una página web que contenga nuestra clase mediante el uso de código HTML.

Nosotros creamos el archivo clics.html que es el siguiente:

<HTML><HEAD><TITLE>CLICS EN PANTALLA</TITLE></HEAD><BODY style="background-color: #a8b689";><center><H1>CALLES Y ESQUINAS</H1><APPLET CODE="Spots2.class" WIDTH=850 HEIGHT=460></APPLET></center></BODY></HTML>

Para incluir un applet en una pagina Web se debe utilizar la etiqueta <APPLET>. El atributo CODE de dichaetiqueta indica el nombre del archivo de clase que contiene a este applet incluida la extensión .classEn esta caso el archivo de clase debe encontrarse en el mismo directorio que el archivo HTML

Los atributos WIDTH y HEIGHT son requeridos y se usan para indicar que tan grande será el applet dentro dela página web .

REPORTE:PROYECTO DE INVESTIGACIÓN II

35

Sobre HTML

HTML es un lenguaje de programación que sirve para el diseño de páginas web basado en etiquetas; y esnuestra intención poner en claro el código que se realizo.

En HTML se abre una etiqueta así: <ETIQUETA> y se cierra así: </ETIQUETA>

Hay etiqueta que necesitan atributos como la etiqueta <APPLET> de la que se hablo anteriormente y susatributos, y otras que no necesitan atributos. Por ejemplo en nuestro programa:

<HTML> Es una etiqueta que siempre se usa para especificar que el código es en este lenguaje.

<HEAD> Es la etiqueta que se usa para indicar el encabezado

<TITLE> Se usa para poner titulo en la ventana de la pagina que se va a ejecutar

<BODY> Para indicar el cuerpo del programa. En esta etiqueta son opcionales los atributos, pero para darle uncolor de fondo personal a la página web, se usa el atributo style="background-color:

<CENTER> Para centrar todo lo que este dentro de esta etiqueta.

<H1> Escribir el texto de esta etiqueta en cierto tamaño, también hay etiquetas <H2>,<H3>,<H4>,<H5>,<H6>para dar formatos diferentes al texto.

<BR> Es para salto de línea, esta etiqueta no necesita cerrarse.

Existen muchas etiquetas pero a nosotros solo nos fueron de utilidad estas junto con la etiqueta <APPLET>.

REPORTE:PROYECTO DE INVESTIGACIÓN II

36

4.1.5 INTRODUCCIÓN A LOS SERVLETSTécnicamente, un servlet es una clase de java que instancia la clase madre HTTPSERVLET la cual corredentro de un aplication server, o Servidor de aplicaciones.Generalmente se usa para procesos Server Side y su resultado puede ser HTML,TEXTO, XML, Imagenes etc.

En palabras llanas, un servlet es un proceso que interactúa con el usuario por medio de un browser. Yfunciona tal como se muestra en la imagen:

Dado que nosotros utilizamos Applets para hacer la simulación del mapa, por fuerza necesitamos que nuestrousuario interactúe con el servidor a través de un browser, lo cual nos va ayudando a armar el rompecabezas.

Por otro lado, aprovechamos bondades de los servlets tales como:

1. Los servlets pueden llamar a otros servlets, e incluso a métodos concretos de otros servlets.De esta forma se puede distribuir de forma más eficiente el trabajo a realizar. En nuestro caso, utilizamos unservlet para consultar y otro para actualizar los datos de calles y avenidas que los usuarios deseen actualizar oconsultar respectivamente.

2.Los servlets pueden actuar como enlace entre el cliente y una bases de datos . De hecho, es una de lastareas más importantes y más frecuentemente realizadas por los servlets: la conexión a bases de datosmediante el JDBC. Esto es debido a que los servlets pueden fungir para hacer las funciones de capa mediaen un sistema con una arquitectura de tres capas.

3 .Asimismo, pueden realizar tareas de proxy para un applet. Debido a las restricciones de seguridad, unapplet no puede acceder directamente por ejemplo a un servidor de datos localizado en cualquier máquinaremota, pero el servlet sí puede hacerlo de su parte.

4.Son independientes del servidor utilizado y de su sistema operativo, lo que quiere decir que a pesar de estarescritos en Java, el servidor puede estar escrito en cualquier lenguaje de programación, obteniéndoseexactamente el mismo resultado que si lo estuviera en Java.

REPORTE:PROYECTO DE INVESTIGACIÓN II

37

La arquitectura de los servlets entonces hace que la escritura de nuestra aplicación que se ejecutará en unservidor sea relativamente sencilla y que sea además una aplicación robusta.

Se definió el uso de Servlets debido a que amplían la Funcionalidad de un servidor Web esto es:

Para cubrir la limitación del applet el servlet nos permite tener acceso a la base de datos por medio de estasentencia

URL direccion=newURL("http://localhost:8080/examples/servlet/SrvBasedatos?idesquina="+idesquina+"&pagina="+pagina+"&idcalle="+idcalle+"");

Esta sentencia hace el llamado al Servlet SrvBasedatos donde lleva como parámetros idesquina,idcalle,Pagina. Estos parámetros los recibe el Servlet para ejecutar el Query correspondiente.

El parámetro idesquina sirve para ejecutar el Query de consulta de Esquinas.El parámetro idcalle para ejecutar el Query de consulta de Calles.El parámetro pagina solo para separar dichas llamadas al servidor.

Debido a que los Servlets permiten la generación dinámica de código HTML dentro de una propia páginaHTML . El Servlet genera dos páginas HTML una para las calles y otra para las Esquinas.

Donde la página de Calles tiene los siguientes campos:

CalleCarrilesTopesSentidoVelocidadLongitudTiempo

Y la Página de Esquinas tiene los siguientes campos:

EsquinaCalleVerde1Rojo1Verde2Rojo2

También debido a que los Servlets nos permiten llamar a otro Servlets se hace la llamada al ServletSrvguardadatos para cuando el Usuario decida Actualizar una Calle o una avenida.

Este Servlet de la misma forma recibe parámetros para ejecutar el Query correspondiente de Actualización

REPORTE:PROYECTO DE INVESTIGACIÓN II

38

El siguiente punto al que nos enfrentamos fue ¿qué servidor utilizar para echar a andar nuestros servlets?

En la siguiente parte del trabajo abordamos los pasos implicados en el despliegue de un servlet, utilizandoApache-Tomcat

4.1.6 TOMCAT

El servidor Jakarta-Tomcat, es un proyecto de código abierto liderado por la Apache Software Foundation. Elservidor Tomcat (1) es una aplicación web basada en Java creada para ejecutar servlets y páginas JSP.

En este punto llegamos a una definición importantísima, nuestro software como tal, es una aplicación WEB,entendiéndose en general como aplicación WEB lo siguiente: “Una aplicación Web es una colección deservlets, páginas HTML, clases, y otros recursos que se pueden empaquetar y ejecutar en varioscontenedores”Para desplegar un servlet, se requiere la configuración de un servidor de aplicaciones, en nuestro casoTOMCAT. Cuando el servidor encuentra un tipo particular de solicitud, invoca al servlet respectivo, pasándolelos detalles sobre la solicitud y un objeto response para devolver el resultado.

(1) En el anexo se incluye un sencillo manual para instalar TOMCAT versión 4.1

Nuestros servlets implementan el interface javax.servlet.Servlet directamente e incluyen los siguientesmétodos importantes:

• init():Define el código de inicialización que se ejecuta cuando se carga el servlet en memoria.

• service():El método principal, llamado cuando el servlet recibe una solicitud de servicio.

• destroy():Define cualquier código de limpieza requerido antes de eliminar el servlet de la memoria.

Cuando el contenedor servlet carga por primera vez un servlet invoca al método init() del servlet parainicializarlo. Luego según se hacen solicitudes para ejecutar el servlet, el contenedor servlet llamarepetidamente la método service() del servlet. Finalmente, cuando el contenedor servlet no necesita el servlet,llama al método destroy() del servlet y lo descarga de la memoria. Aquí, observamos que en el tiempo de vidade un servlet, los métodos init() y destroy() sólo son invocados una vez, mientras que el método service() seráinvocado muchas veces -- una cada vez que se haga una solicitud para ejecutar el servlet, en nuestro casocada vez que se desee ver en la interfaz datos de calles o esquinas, o modificarlos, según sea el caso.

El contenedor que alberga una aplicación web no es más que la estructura de directorios en donde estáncolocados todos los archivos necesarios para la ejecución de la aplicación web. Por tanto, el primer paso en eldesarrollo de cualquier aplicación web consiste en crear la estructura de directorios en donde colocar suscomponentes. Quedando más o menos como sigue:

REPORTE:PROYECTO DE INVESTIGACIÓN II

39

En el caso de Tomcat, el directorio a partir del cual se instala cualquier aplicación web debe ser TOMCAT-HOME/webapps, en donde TOMCAT_HOME apunta al directorio de instalación de Tomcat.Los directorios de la nuestra aplicación se quedaron en el de ejemplos que vienen por dafault al instalarTomcat aplicación examples serán los siguientes:

/examples

Directorio raíz de nuestra aplicación web, en el cual se colocan todos los archivos HTML que utiliza laaplicación. En el caso de que utilizaramos JSP también irían a esta altura. Aquí se pueden crearsubdirectorios adicionales para mantener cualquier otro recurso estático que forme parte de una aplicaciónweb y constituyan la parte de acceso público desde cualquier navegador.En general obviamente este fue nuestro caso debido a que los únicos archivos estáticos que utilizamos ennuestra aplicación fueron HTML’s.

/examples/WEB-INF

Este directorio contiene todos los recursos relacionados con la aplicación web que no se han colocado en eldirectorio raíz y que no son accesibles al cliente. Es decir aquellos que a pesar de tener una función deimportancia son transparentes para él. Esto es importante, ya que este directorio no forma parte deldocumento público, por lo que ninguno de los archivos que contenga va a poder ser enviado directamente através del servidor web.En este directorio se coloca el archivo web.xml, donde se establece la configuración de la aplicación web. Eneste archivo damos de alta los servlets nuevos, estos deben registrarse.

/examples/WEB-INF/classes

En este directorio van todos los servlets y cualquier otra clase de utilidad o complementaria que se necesitepara la ejecución de la aplicación web (es decir aquí van todos los archivos .class).Obviamente en este directorio colocamos nuestros dos Servlets y la clase de nuestro applet:Spots2.classSrvBasedatos.javaSrvguardadatos.java

REPORTE:PROYECTO DE INVESTIGACIÓN II

40

5. MANUAL DE USUARIO

Configuración Necesaria: Primero se debe tener instalado en la máquina del usuario el servidorTomcat así como la configuración de las variables de entorno(Las instrucciones de cómo hacerlo seexplicaron anteriormente en el punto 3.3.10)Debe tenerse la siguiente estructura de archivos.Los archivos clics.HTML y Spots2.class deben estar guardados en la siguiente ruta:C:\Tomcat41\webapps\examples\servletsLos archivos SrvBasedatos.clas y SRVguardadtos.class deben estar almacenados en la siguiente ruta:C:\Tomcat41\webapps\examples\WEB-INF\classesLa base de datos mapa.mdb debe estar guardad desde la raiz c:\ para ser accesada.Todas estas carpetas son generadas al instalar el servidor tomcat, lo único que debe hacer el usuarioes guardar los archivos indicados en la carpeta adecuada.Ejecutar el programa: Una vez que cumple con estas condiciones debe ejecutar el programa de lasiguiente manera.Ejecutar la ventana de MS-DOS.Moverse al subdirectorio bin de la carpeta tomcat41 (C:\TOMCAT41\BIN>)Ejecutar el comando shutdown. (C:\TOMCAT41\BIN>shutdown)Esperar a que termine su ejecución

Dar el comando startup (C:\TOMCAT41\BIN>startup)

REPORTE:PROYECTO DE INVESTIGACIÓN II

41

Aguardar a que se termine de cargar el tomcat.

Sin cerrar ninguna de las ventanas de sistemas generadas; ejecutar la página HTML que carga elapplet de ejecución cargando internet e indicar la dirección:http://localhost:8080/examples/servlets/clicks.htmlManejo y administración del programa: El programa se ejecuta y muestra el applet el cual dibuja elmapa que hace la simulación de la ciudad como lo muestra la Figura 1. Y el usuario debe dar cliccon el botón izquierdo del mouse a la calle o esquina que desea consultar.

Figura 1

REPORTE:PROYECTO DE INVESTIGACIÓN II

42

Figura 2

Una vez que el usuario da clic se marca lo que fue seleccionado y después se muestra la página quecontiene los datos de la calle o esquina seleccionada permitiendo al usuario modificarlos como loilustran las figuras 2 (de calle) y 3 (de esquina).Si el usuario solo quería consultar puede cerrar la ventana dando clic en el botón de cerrar de laventana que contiene la página; o puede dar clic en el botón de actualizar que muestra la página, seejecutara la actualización que no modificará nada en la base de datos y luego se cerrará la ventana.Si el usuario modifica los datos y desea que se actualicen deberá dar clic en el botón de actualizar dela página y luego se cerrará. De dar clic en el botón de cerrar la ventana que contiene la página quemuestra los datos la página se cerrará pero NO actualizará la base de datos, es decir, que lasmodificaciones que hizo el usuario no se verán reflejadas en la base de datos a menos que de clic enel botón de actualizar.

REPORTE:PROYECTO DE INVESTIGACIÓN II

43

Figura 3

REPORTE:PROYECTO DE INVESTIGACIÓN II

44

6. Conclusiones

Logramos exitosamente el desarrollo de la aplicación Web; la cual, como se planteo en losobjetivos debía ser amigable para la incorporación y administración de datos de un sistema detransporte, con la interacción a la base de datos que la describe.

El sistema desarrollado nos permite incorporar datos de calles y avenidas con todas lascaracterísticas requeridas, tales como nombre, número de carrilles, semáforos en las esquinas, etc.en el caso de las calles, y el nombre las calles que la forman, en el caso de las esquinas.

Se logro también que la administración sea sencilla, eficiente y rápida, considerando que se accesaa los datos en tiempo real y que modela un sistema de trafico urbano. Todo esto, interactuando enforma gráfica y amigable con el usuario.

REPORTE:PROYECTO DE INVESTIGACIÓN II

45

7) BIBLIOGRAFÍA

http://usuarios.lycos.es/froufe/parteJ1/capa-1.htmlhttp://apache.get-software.com/jakartahttp://www.programacion.com/javahttp://java.sun.com/http://www.ute.cic.ipn.mx/ogonzalez/Cursos/javabas/servlets1ra.htmhttp://listas.rcp.net.pe/pipermail/java/2002-April/000234.htmlLemay Laura, Aprenda Java usted mismo en 21 dias. Ed. McGraw Hill. Primera edición. México