Problemas en acceso desde servlet a base datos

No tengo experiencia en acceder a bases de datos y al tratar de probar un ejemplillo que encontré en la red, en el JBuilder, al hacer el run me da lo siguiente:
--------
XmlMapper: Can't find resource for entity: -//Sun Microsystems, Inc.//DTD Web Application 2.3//EN --> http://java.sun.com/dtd/web-app_2_3.dtd "null"
ERROR reading E:\primeraPruebaJbuilder\accesoBD\webapp\WEB-INF\web.xml
At Fatal error java.net.UnknownHostException: java.sun.com
------
Supongo que es porque en el código del servlet tengo una línea que es:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
y no se como solucionarlo.
Me gustaría que me dijeras, paso a paso como probar este ejemplo. Yo lo que hecho es:
- Crear una base de datos en access
- En el administrador de origen de datos ODBC he añadido un origen de datos con un nombre y la dirección donde tengo la base de datos creada.
- En jbuilder he creado un proyecto nuevo donde está el servlet y la página htm que manda los datos al servlet
Pues ejecutando eso me da el error que te he comentado.
Respuesta
1
El problema que tienes no es de acceso a la base de datos, si no de la configuración del servidor web que da acceso a los servlets, se que jbuilder tiene su propio servidor que permite ejecutar servlets, pero no se nada sobre como configurarlo.
Para poder acceder a una base de datos desde java te hace falta un driver jdbc, te lo comento, por que en lo que me explicas no dices nada sobre el, puedes encontrar uno para access en la siguiente url:
http://www.idssoftware.com/jdbcdrv.html
Creo que lo del driver ya lo tengo solucionado, pero ahora el error que me sale es el siguiente:
D:\JBuilder7\jdk1.3.1\bin\javaw -classpath "D:\JBuilder7\jakarta-tomcat-3.3.1\lib\tomcat.jar" org.apache.tomcat.startup.Main -config E:\primeraPruebaJbuilder\accesoBD\Tomcat\conf\server8080.xml
2003-02-22 12:14:15 - AutoDeploy: Source or destination missing
2003-02-22 12:14:15 - AutoDeploy: Source or destination missing
2003-02-22 12:14:16 - ServerXmlReader: Config=$TOMCAT_HOME\conf\server8080.xml
2003-02-22 12:14:16 - PathSetter: install=D:\JBuilder7\jakarta-tomcat-3.3.1
2003-02-22 12:14:16 - PathSetter: home=E:\primeraPruebaJbuilder\accesoBD\Tomcat
2003-02-22 12:14:16 - ContextXmlReader: Context config=$TOMCAT_HOME\conf\server-template.xml
2003-02-22 12:14:16 - ContextXmlReader: Context config=$TOMCAT_HOME\conf\apps-jbuilder.xml
2003-02-22 12:14:16 - AutoWebApp: No autoconf directory E:\primeraPruebaJbuilder\accesoBD\Tomcat\modules
2003-02-22 12:14:16 - AutoWebApp: No autoconf directory E:\primeraPruebaJbuilder\accesoBD\Tomcat\webapps
2003-02-22 12:14:16 - ContextManager: Tomcat configured and in stable state
2003-02-22 12:14:16 - ContextManager: Adding DEFAULT:/ROOT
2003-02-22 12:14:17 - SimpleRealm: File not found E:\primeraPruebaJbuilder\accesoBD\Tomcat\conf\users\global-users.xml
2003-02-22 12:14:17 - Http10Interceptor: Starting on 8080
2003-02-22 12:14:17 - Ajp12Interceptor: Starting on 8081
EmbededTomcat: Init time 2141
2003-02-22 12:14:17 - Ajp13Interceptor: Starting on 8082
EmbededTomcat: Startup time 78
2003-02-22 12:14:18 - Ctx() : Status code:405 request:R( + /servlet/accesobd.ServletOpinion2 + null) msg:El Metodo HTTP GET no es soportado por esta URL
Te copio el código del servlet por si ves algún error:
package accesobd;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import sun.jdbc.odbc.*;
public class ServletOpinion2 extends HttpServlet {
private String nombre=null;
private String apellidos=null;
private String opinion=null;
private String comentarios=null;
Connection conn = null;
public void init(ServletConfig config) throws ServletException {
super.init(config);
String dsn = new String("jdbc:odbc://localhost/baseDatos");
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch(ClassNotFoundException ex){
System.out.println("Error al cargar el driver");
System.out.println(ex.getMessage());
}
try{
conn = DriverManager.getConnection(dsn, "", "");
}catch (SQLException sqlEx){
System.out.println("Error al establecer la conexión ");
System.out.println(sqlEx.getMessage());
}
System.out.println("Iniciando ServletOpinion (versión BD)..");
}
public void destroy() {
super.destroy();
System.out.println("Cerrando conexión...");
try{
conn.close();
}catch(SQLException ex){
System.out.println("No se pudo cerrar la conexión");
System.out.println(ex.getMessage());
}
}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
boolean hayError = false;
if(req.getParameter("nombre")!=null)
nombre = req.getParameter("nombre");
else
hayError=true;
if(req.getParameter("apellidos")!=null)
apellidos = req.getParameter("apellidos");
else
hayError=true;
if(req.getParameter("opinion")!=null)
opinion = req.getParameter("opinion");
else
hayError=true;
if(req.getParameter("comentarios")!=null)
comentarios = req.getParameter("comentarios");
else
hayError=true;
if(!hayError){
if(actualizarBaseDeDatos() == 0)
devolverPaginaHTML(resp);
else
resp.sendError(500, "Se ha producido un error al actualizar la base de datos");
}else
resp.sendError(500, "Se ha producido un error en la adquisición de parámetros");
}
public int actualizarBaseDeDatos(){
Statement stmt = null;
int numeroFilasActualizadas=0;
try{
stmt = conn.createStatement();
numeroFilasActualizadas = stmt.executeUpdate("INSERT INTO"+ "Opiniones_Recogidas VALUES"+ "('"+nombre+"','"+apellidos+"','"+opinion+"','"+comentarios+"')");
if(numeroFilasActualizadas!=1)return -1;
}catch (SQLException sql){
System.out.println("Error al crear el statement");
System.out.println(sql.getMessage());
return -2;
}finally {
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
System.out.println("Error cerrando el statement");
System.out.println(e.getMessage());
return -3;
}
}
return 0;
}
}
public void devolverPaginaHTML(HttpServletResponse resp){
PrintWriter out = null;
try{
out = resp.getWriter();
}catch (IOException e){
System.out.println("Se ha producido una excepción");
}
resp.setContentType("text/html");
out.println("<html>");
out.println("<head>");
out.println("<title>Valores recogidos</title>");
out.println("<body>");
out.println("<font size=+1> Nombre" +nombre+ "</font>");
out.println("<body>");
out.println("<html>");
out.flush();
out.close();
}
}
Muchas gracias.
El error que tienes se debe a la configuración del servidor de servlets que viene con jbuilder. Siento no poder indicarte nada sobre la configuración de este servidor, no lo he utilizado nunca, pero al menos te servirá como punto de partida para encontrar el error.
Con las primeras versiones del jsdk venia un servidor web para servlets, si no recuerdo mal se llamaba, javaserver muy fácil de instalar, solo era descomprimirlo y ejecutar un fichero bat para tenerlo todo preparado, si no consigues solucionar el problema del que viene con jbuilder puedes probar con este.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas