Por admin | Para la categoría de java j2ee | noticia del 09-09-2009
En este tutorial vamos a ver como configurar y crear un proyecto web en el editor eclipse para establecer una conexión con una base de datos.
El ejemplo está realizado en linux ubuntu pero es igualmente utilizable para windows ya se comentó en anteriores post sobre el tema de instalaciones tanto del servidor tomcat como del eclipse.
Como servidor de bases de datos utilizaremos mysql concretamente la versión
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
Para crear la base de datos utilizaremos Mysql Query Browser, si teneís phpMyadmin instalado y os gusta más no hace falta utilizar esta herramienta o bien crearla desde el propio mysql.

Esta aplicación hace lo mismo que haríamos con un terminal de mysql pero de una manera gráfica, nos pide el nombre del superusuario y la clave por terminal sería (mysql -u root -p y darle la clave del usuario)
Una vez dentro vemos las bases de datos existentes en nuestro servidor mysql ( que viene por defecto con dos mysql e information_schema)
Crearemos una base de datos muy sencilla llamada “libros_jdbc”, con el cursor por ejemplo en la tabla “infomation_schema”, vamos a botón derecho y create chema y le damos el nombre anterior o el que se quiera (pero claro guardando entonces la correspondencia con lo siguiente )

Le damos el nombre a la base de datos

Esto mismo se puede hacer desde el terminal tanto de linux, como de símbolo de sistema de windows la instrucción sería la siguiente:
“create database libros_jdbc;” y para para poder utilizarla (hacer tablas dentro de la base de datos ) ponemos
“use libros_jdbc;” con esto le estamos indicando a mysql que vamos a utilizar dicha base de datos.
Creamos una tabla para esta base de datos muy sencilla
Le decimos que sea del tipo innodb aunque no es necesario este paso para este ejemplo, las tablas de este formato permiten trabajar con claves externas para mysql5.

para crear la tabla vamos a “Apply changes”, si no hemos puesto el valor numérico del varchar lo editamos desde la ventana siguiente directamente.

Descargamos el mysql jconnector segun la versión de mysql instalada, como en este ejemplo esta instalado la versión 5.0, se descarga la versión de jconnector para esa versión. Podemos ver que existen varias versiones y para cada versión existe el correspondiente fichero para linux o windows

una vez descargado se descomprime el fichero dentro de la carpeta creada nos interesa importar solamente el fichero mysql-connector-java-5.0.8-bin.jar (el número depende de la versión de cada uno)

Creamos un nuevo proyecto web dinámico al igual que hacíamos en otros post y el directorio WebContent\WEB-INF\lib importamos el conector de bases de datos al igual que hacíamos con las imagenes en anteriores post.

Con esto solo ya funcionaría, pero en ocasiones eclipse nos muestra un error por no importar el jar en path del proyecto web
Botón derecho sobre el proyecto build path y configure build path y add external jar

creamos un package nuevo “conexion” y creamos un servlet nuevo llamado “basedatos” y activamos los siguientes métodos en la creación del servlet

resultado de introducir un nuevo registro visto desde el terminal con mysql

Realización de la conexión con un servlet, el método init del servlet se utiliza para para cargar los datos de la configuración del acceso a la base de datos antes de realizar cualquier operarción incluso este método puede recibir parámetros de configuración provenientes del fichero web.xml.
El servlet una vez cargado puede recibir peticiones get o post como habíamos explicado en anteriores post, cuando hacemos click con el botón derecho del ratón sobre el servlet run as ( o bien con el tomcat arrancado y http://localhost:8080/basedatos/basedatos siendo esto último nombre proyecto/servlet ).
Cuando se llama directamente interviene el método get y da como respuesta una página web con un formulario para introducir los campos para la tabla, esos campos se pasan al servlet mediante el método post y es entonces cuando se recogen los parámetros de la petición para establecer la inserción del registro en la tabla y la selección de los campos para la tabla.
Se obtiene el resultado en un objeto de la clase “ResultSet” y se itera por los registros mediante el método “next()”.
La salida por pantalla se pone la dtd para reconocimiento de la css y además los caracteres “\n” para ver el código html generado en el navegador de una forma escalonada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | package conexion; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Servlet implementation class for Servlet: basedatos * */ public class basedatos extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#HttpServlet() */ private Connection conexion = null; private Statement sentenciaSql = null; private ResultSet resultado = null; public basedatos() { super(); } public void init() throws ServletException { // TODO Auto-generated method stub super.init(); try { String controlador = "com.mysql.jdbc.Driver"; Class.forName(controlador).newInstance(); //conectamos con la base de datos conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/libros_jdbc","root","root"); //creamos una sentencia sql sentenciaSql = conexion.createStatement(); } catch ( ClassNotFoundException e ) { System.out.println("no se pudo cargar el controlador"); } catch ( SQLException e) { System.out.println("Excepcion sql"+e.getMessage()); } catch (InstantiationException e ) { System.out.println ("objeto no creado"+e.getMessage()); } catch ( IllegalAccessException e ) { System.out.println("Acceso ilegal"+e.getMessage()); } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html"); PrintWriter salida = response.getWriter(); //creamos la salida del html salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); salida.print("<html>\n"); salida.print("<head>\n"); salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n"); salida.print("</head>\n"); salida.print("<body>\n"); salida.print("<div id='contenedor'>\n"); salida.print("<h2> Libros jdbc </h2>"); salida.print("<div id='imagen'>"); salida.print("<img src='imagenes/registro.png' title='carpeta'/>"); salida.print("</div>"); salida.print("<form action='basedatos' method='post'>\n<br/>"); salida.print("<label>Titulo</label>\n<br/>"); salida.print("<input type='text' name='titulo'/>\n<br/>"); salida.print("<label>Autor</label>\n<br/>"); salida.print("<input type='text' name='autor'/>\n<br/>"); salida.print("<label>Tematica</label>\n<br/>"); salida.print("<input type='text' name='tematica'/>\n<br/>"); salida.print("<input class='boton' type='submit' value='enviar'/>\n<br/>"); salida.print("</form>\n<br/>"); salida.print("<div id='pie'>"); salida.print("<p> www.railsymas.com </p>"); salida.print("</div>"); salida.print("</div>\n"); salida.print("</body>\n<br/>"); salida.print("</html>"); } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //recogemos la petición realizada por el usuario en el formulario String valorTitulo = request.getParameter("titulo"); String valorAutor = request.getParameter("autor"); String valorTematica = request.getParameter("tematica"); response.setContentType("Text/html"); PrintWriter salida = response.getWriter(); try { //metemos las cadenas con comas e insertamos los datos sentenciaSql.executeUpdate("insert into libros values ("+0+",'"+valorTitulo+"','"+valorAutor+"','"+valorTematica+"');"); //ejecutamos la sentencia de selección de los campos menos el id resultado = sentenciaSql.executeQuery(" SELECT titulo, autor, tematica FROM libros;"); //preparamos la salida para una nueva página salida.print("<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>\n"); salida.print("<html>\n"); salida.print("<head><title>Mostramos los datos</title></head>\n"); salida.print("<link rel='stylesheet' type='text/css' href='css/estilo.css'/>\n"); salida.println("<body>"); salida.print("<div id='contenedor'>\n"); salida.print("<h2> Libros jdbc </h2>"); salida.println("<table id='tabla'>"); salida.println("<tr>"); salida.println("<th>titulo</th><th>autor</th><th>tematica</th>"); salida.println("</tr>"); while ( resultado.next()) { salida.println("<tr>"); salida.println("<td class='impar'>"+resultado.getString("titulo")+"</td>"); salida.println("<td class='par'>"+resultado.getString("autor")+"</td>"); salida.println("<td class='impar'>"+resultado.getString("tematica")+"</td>"); salida.println("</tr>"); } salida.println("</table>"); salida.print("<div id='pie'>"); salida.print("<p> www.railsymas.com </p>"); salida.print("</div>"); salida.print("</div>\n"); salida.println("</body>"); salida.println("</html>"); } catch( SQLException e ) { salida.println("Excepcion Sql : "+ e.getMessage()); } } /* (non-Javadoc) * @see javax.servlet.GenericServlet#init() */ } |
Fichero css utilizado
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #contenedor{ width:500px; margin-left:auto; margin-right:auto; } .boton { margin: 10px 5px; background-color:#554444; color:#fff; width:100px; } #imagen { float:right; } #pie { clear:both; height:30px; background-color:#424c56; } h2 { text-align:center } #pie p { text-align:right; font-size:14px; background-color:#e6dfd5; } #tabla { margin-left:auto; margin-right:auto; } #tabla th { background-color:#48a2b5;} td.impar { color: #222; margin-right:10px; margin-left:10px; background-color:#e6dfd5; } td.par { color: #ddd; margin-right:10px; background-color:#554444; } |
Imagen formulario

imagen del proyecto
Imagen resultado

Enlace como crear un serlvet con eclipse y ejecutar desde el eclipse para encontrar recursos
Una vez instalado tomcat ( en windows es un ejecutable) en linux el enlace aquí
Un manejador de tomcat para elipse
Como crear un servlet con eclipse entro del eclipse
Ejecución de un servlet basesdatos
Al hacer new servlet, se crea la configuración automáticamente, algunas veces falla pero pocas
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <servlet> <description> </description> <display-name> basedatos</display-name> <servlet-name>basedatos</servlet-name> <servlet-class> conexion.basedatos</servlet-class> </servlet> <servlet-mapping> <servlet-name>basedatos</servlet-name> <url-pattern>/basedatos</url-pattern> </servlet-mapping> |



gracias, programo para web en php normalmente, me sirvio este ejemplo para enteder todo esto de java para web
Muy interesante
hola, buen dia,
soy nuevo en esto y estaba probando tu aplicacion, solo que no me corre, me dice que el recurso requerido no esta disponible, podras ayudarme?
para ejecutar el servlet, basta en eclipse con pulsar con el botón derecho del ratón y run as on server, si al hacer esos pasos sale por el navegador lo siguiente:
Estado HTTP 404 -
type Informe de estado
mensaje
descripción El recurso requerido () no está disponible.
Puede que no esté mapeado el servlet en el fichero web.xml, normalmente en eclipse al hacer new servlet genera automáticamente dicho codigo pero algunas veces no es así.
en el fichero web.xml de la aplicación para un servlet llamado como aquí basesdedatos y con una clase en la package conexión.basededatos el fichero we.xml tendría
<servlet>
<description>
</description>
<display-name>
basedatos</display-name>
<servlet-name>basedatos <servlet-class>
conexion.basedatos</servlet-class>
</servler>
una descripción opcional, el nombre del servlet y el path de la clase servlet. pienso que podría ser eso suele pasar algunas veces con eclipse.
para el caso concreto si no accede a la base de datos saltaría una excepción
hola
estoy probando tu aplicacion, a mí también me dice que el recurso requerido no esta disponible, he puesto la entrada de web.xml y nada…. puedes ayudarme?
Gracias
hay posibilidades de ejecución si se crea el proyecto en eclipse,
1 crear un proyecto web dinámico en eclipse, crear un nuevo servlet “basedatos”, y después se puede exportar a war, ese fichero se puede arrar el tomcat y poner http:\\localhost:8080\nombredelprojecto\nombredelservlet, para un proyecto “proyectoweb” y servlet “basedatos” sería http:\\localhost:8080\proyectoweb\basedatos
2 ejecutar desde el propio eclipse sería tener una instancia del tomcat y pulsar sobre el fichero servlet “basedatos” botón derecho run as, run on servlet, automáticamente sale la ruta del caso 1 (más sencillo)
Si hay un problema en el código desde el navegador o por consola en el eclipse sale un listado de errores, pero si no sale más que un aviso por el navegador, de recurso no disponible es que estamos accediendo a una página no existenten en el proyecto, no se esta enterando la aplicación que tiene algo que queremos mostrar
nota-) Si tenemos el tomcat arrancado y ejecutamos una aplicación con el manejador de tomcat desde elipse no nos funciona debemos apagar el tomcat bien desde windows stop server y desde linux tomcat\bin\ ./shutdown.sh y ya se puede hacer run on server desde eclipse (es decir los dos a la vez tomcat y manejador no funcina)
Gracias, lo he arreglado añadiendo el servlet-mapping
basedatos
conexion.basedatos
basedatos
/basedatos