SlideShare uma empresa Scribd logo
1 de 7
RequestParamExample con Acceso a BBDD mediante un servlet que delega
temporalmente el procesamiento de la petición a un segundo servlet que
conecta y realiza operaciones con la base de datos.
En esta práctica un servlet recoge los datos del formulario y delega
temporalmente el procesamiento de la petición a un segundo servlet que es el
que realiza la conexión y las consultas (insert, select, …) con la base de
datos mydb creada previamente con HSQLDB, la cual contiene la tabla ALUMNO
(NOMBRE,APELLIDOS).
Vamos a extender el servlet RequestParamExample para que realice un acceso a
BBDD en el que inserte una fila con el valor de los parámetros del
formulario.
RequestParamExample.java
package pkgServlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RequestParamExample
*/
@WebServlet("/RequestParamExample")
public class RequestParamExample extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RequestParamExample() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see 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 out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<head>");
String title = "Ejemplo de parámetros de Request";
out.println("<title>" + title + "</title>");
out.println("</head>");
out.println("<body bgcolor="white">");
out.println("<h3>" + title + "</h3>");
String firstName = request.getParameter("firstname");
String lastName = request.getParameter("lastname");
String paramsInRed = "Parametros en este Request:";
out.println(paramsInRed + "<br>");
String nombre = "Nombre ";
String apellidos = "Apellidos";
String noParams="No hay parámetro, por favor usa alguno";
if (firstName != null || lastName != null){
if(firstName.length()!=0 || lastName.length()!=0){
out.println(nombre);
out.println(" = " + firstName + "<br>");
out.println(apellidos);
out.println(" = " + lastName);
//<EXTENSION>------------------------------------------------------
pintarFormulario(out,nombre,apellidos);
RequestDispatcher rd = request.getRequestDispatcher("/DBServlet");
rd.include(request, response);
//------------------------------------------------------------------
}else{
out.println(noParams);
pintarFormulario(out,nombre,apellidos);
}
} else {
out.println(noParams);
pintarFormulario(out,nombre,apellidos);
}
out.println("</body>");
out.println("</html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
//<EXTENSION>---------------------------------------------------------------------------
private void pintarFormulario(PrintWriter obj, String nom, String apel){
obj.println("<P>");
obj.print("<form action="");
obj.print("RequestParamExample" ");
obj.println("method=POST>");
obj.println(nom);
obj.println("<input type=text size=20 name=firstname>");
obj.println("<br>");
obj.println(apel);
obj.println("<input type=text size=20 name=lastname>");
obj.println("<br>");
obj.println("<input type=submit>");
obj.println("</form>");
//--------------------------------------------------------------------------------------
-
}
}
DBServlet.java
package pkgServlets;
import java.io.IOException;
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 javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DBServlet
*/
@WebServlet("/DBServlet")
public class DBServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection con;
private PrintWriter out;
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
try {
Class.forName("org.hsqldb.jdbcDriver");
this.con =
DriverManager.getConnection("jdbc:hsqldb:file:C:/J2EE_UNED/hsqldb/lib/mydb", "SA", "");
} catch (Exception e) {
e.printStackTrace();
return;
}
}
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
try {
out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title> Una demostración de como usar JDBC con un Servlet" +
"</title>");
out.println("</head>");
out.println("<body>");
Statement stmt = con.createStatement();
//<EXTENSION>---------------------------------------------------------------
String firstName = req.getParameter("firstname");
String lastName = req.getParameter("lastname");
String sql = "INSERT INTO Alumno VALUES ('" + firstName + "','" + lastName + "');";
stmt.executeUpdate(sql);
//--------------------------------------------------------------------------
out.println("<H3>");
out.println("Resultados");
out.println("</H3>");
ResultSet rs = stmt.executeQuery("SELECT * FROM Alumno");
out.println("<UL>");
while (rs.next()) {
out.println("<LI>" + rs.getString("Nombre") + "|" +
rs.getString("Apellidos") );
}
out.println("</UL>");
rs.close();
stmt.close();
} catch (SQLException e) {
out.println("Ha habido un error de SQL...");
out.println(e.getMessage());
} catch (IOException e) {
System.err.println("Ha habido una IOException...");
e.printStackTrace();
}
out.println("</body>");
out.println("</html>");
out.close();
}
public void destroy() {
try {
con.close();
} catch (SQLException e) {
out.println(e.getMessage());
}
}
}
Resultado de la ejecución…
Al pulsar en el botón “Enviar consulta” se realiza el insert en la bbdd.
Delegar peticiones a otros recursos
RequestDispatcher rd = request.getRequestDispatcher("/DBServlet");
rd.include(request, response);
En el esquema de trabajo típico de los servlets, un servlet recibe una
petición http, ejecuta código ubicado en los métodos de servicio para generar
la respuesta html y la envía al cliente.
En muchas ocasiones, los servlets no generan la respuesta sino que actúan
como gestores de la petición mediante la ejecución de código de control con
instrucciones if condicionales. En función del bloque condicional que se
ejecute se delega la generación de respuesta a otros recursos tales como
páginas html, páginas jsp u otros servlets.
La interface javax.servlet.RequestDispatcher contiene dos métodos que
permiten delegar la generación de respuestas a otros recursos.
• El método forward, que permite delegar el procesamiento de la petición
a una página html, jsp u otro servlet.
• El método include, que permite incluir la respuesta generada por uno
de estos recursos en el servlet sobre el que se aplica.
Explicación detallada de ambos métodos:
• void forward(ServletRequest request, ServletResponse response): delega
el procesamiento de la petición al recurso especificado en el
argumento del objeto RequestDispatcher sobre el que se aplica. Toda
respuesta vertida al flujo de salida mediante el objeto out asociada a
líneas anteriores y posteriores a la del método no se considera. El
resto de código, sí.
• void include(ServletRequest request, ServletResponse response): delega
“temporalmente” el procesamiento de la petición al recurso
especificado en el argumento del objeto RequestDispatcher sobre el que
se aplica, incluyendo en el servlet en el que se encuentra definido,
además de la respuesta generada hasta la línea del include, una página
html, jsp o la respuesta html generada por otro servlet. Muy usado
para incorporar encabezados (headers) y pies de página (footers)
comunes a todos los recursos de una aplicación web.
Para poder aplicar estos métodos es necesario obtener un objeto de la
interface RequestDispatcher.
• RequestDispatcher getRequestDispatcher(String
rutaRecursoAlQueSeDelega): se emplea, sobre todo, cuando se desea
delegar en ficheros html o jsps. También sirve para servlets.
javax.servlet
Interface RequestDispatcher
public interface RequestDispatcher
Defines an object that receives requests from the client and sends them to any resource
(such as a servlet, HTML file, or JSP file) on the server. The servlet container creates
the RequestDispatcher object, which is used as a wrapper around a server resource
located at a particular path or given by a particular name.
This interface is intended to wrap servlets, but a servlet container can create
RequestDispatcher objects to wrap any type of resource.
Method Summary
void forward(ServletRequest request, ServletResponse response)
Forwards a request from a servlet to another resource (servlet, JSP file, or
HTML file) on the server.
void include(ServletRequest request, ServletResponse response)
Includes the content of a resource (servlet, JSP page, HTML file) in the
response.

Mais conteúdo relacionado

Mais procurados

App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBanco
jubacalo
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
dtbadboy0
 
Comunicacion entre formularios HTML y paginas JSP
Comunicacion entre formularios HTML y paginas JSPComunicacion entre formularios HTML y paginas JSP
Comunicacion entre formularios HTML y paginas JSP
Danii Rodriguez
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
I LG
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
octabio
 

Mais procurados (20)

Servlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTMLServlets que manejan datos de formularios HTML
Servlets que manejan datos de formularios HTML
 
App Android MiniBanco
App Android MiniBancoApp Android MiniBanco
App Android MiniBanco
 
Práctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScriptPráctica Completa en Flash – ActionScript
Práctica Completa en Flash – ActionScript
 
Conexión a postgres desde
Conexión a postgres desdeConexión a postgres desde
Conexión a postgres desde
 
Conectar java con una base de datos
Conectar java con una base de datosConectar java con una base de datos
Conectar java con una base de datos
 
Uso java jdbc
Uso java jdbcUso java jdbc
Uso java jdbc
 
Funciones
FuncionesFunciones
Funciones
 
Continuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper reportContinuación 3 de la creación de reportes con jasper report
Continuación 3 de la creación de reportes con jasper report
 
Ejemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper reportEjemplo de base de datos y reports con jasper report
Ejemplo de base de datos y reports con jasper report
 
Servlets y jsp
Servlets y jspServlets y jsp
Servlets y jsp
 
Comunicacion entre formularios HTML y paginas JSP
Comunicacion entre formularios HTML y paginas JSPComunicacion entre formularios HTML y paginas JSP
Comunicacion entre formularios HTML y paginas JSP
 
Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012
 
JSP
JSPJSP
JSP
 
Django: el framework web definitivo
Django: el framework web definitivoDjango: el framework web definitivo
Django: el framework web definitivo
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Curso Jsp
Curso JspCurso Jsp
Curso Jsp
 
Ejemplos de php_mysql
Ejemplos de php_mysqlEjemplos de php_mysql
Ejemplos de php_mysql
 
Guia N5 Proyectos Web Consultas Php Y My Sql
Guia N5   Proyectos Web   Consultas Php Y My SqlGuia N5   Proyectos Web   Consultas Php Y My Sql
Guia N5 Proyectos Web Consultas Php Y My Sql
 
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANSTutorial  JPA Parte 1  : CRUD BASICO CON JPA Y SWING en NETBEANS
Tutorial JPA Parte 1 : CRUD BASICO CON JPA Y SWING en NETBEANS
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
 

Semelhante a Acceso a BBDD mediante un servlet

Peticiones y respuestas
Peticiones y respuestasPeticiones y respuestas
Peticiones y respuestas
Edwin Enriquez
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
César Ocampo
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRs
Hernan Rengifo
 

Semelhante a Acceso a BBDD mediante un servlet (20)

Programación web 1er dept
Programación web 1er deptProgramación web 1er dept
Programación web 1er dept
 
Programación web con JSP
Programación web con JSPProgramación web con JSP
Programación web con JSP
 
Peticiones y respuestas
Peticiones y respuestasPeticiones y respuestas
Peticiones y respuestas
 
Curso Java Avanzado 2 Servlets
Curso Java Avanzado   2 ServletsCurso Java Avanzado   2 Servlets
Curso Java Avanzado 2 Servlets
 
Programacion web java
Programacion web javaProgramacion web java
Programacion web java
 
Servletacceso bd
Servletacceso bdServletacceso bd
Servletacceso bd
 
Clase servlet - Análisis de Sistemas
Clase servlet - Análisis de SistemasClase servlet - Análisis de Sistemas
Clase servlet - Análisis de Sistemas
 
Taller programación web ajax con jquery
Taller programación web  ajax con jqueryTaller programación web  ajax con jquery
Taller programación web ajax con jquery
 
Presentacion ajax
Presentacion   ajaxPresentacion   ajax
Presentacion ajax
 
Java web 01 - servlets
Java web 01 - servletsJava web 01 - servlets
Java web 01 - servlets
 
Como usar ajax con jquery
Como usar ajax con jqueryComo usar ajax con jquery
Como usar ajax con jquery
 
SALUDOS EN INGLES
SALUDOS EN INGLESSALUDOS EN INGLES
SALUDOS EN INGLES
 
Objetos implícitos en jsp
Objetos implícitos en jspObjetos implícitos en jsp
Objetos implícitos en jsp
 
Java WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRsJava WebServices JaxWS - JaxRs
Java WebServices JaxWS - JaxRs
 
Clase servletsaccesobd
Clase servletsaccesobdClase servletsaccesobd
Clase servletsaccesobd
 
servlets
servlets servlets
servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 

Mais de jubacalo

MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagen
jubacalo
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSP
jubacalo
 
Escenarios
EscenariosEscenarios
Escenarios
jubacalo
 
Matrices02
Matrices02Matrices02
Matrices02
jubacalo
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámica
jubacalo
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datos
jubacalo
 
Textura de agua
Textura de aguaTextura de agua
Textura de agua
jubacalo
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionales
jubacalo
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
jubacalo
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
jubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
jubacalo
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
jubacalo
 

Mais de jubacalo (20)

jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.jQuery Mobile :: Enlaces a páginas internas.
jQuery Mobile :: Enlaces a páginas internas.
 
MIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en ImagenMIT App Inventor2 Pintar en Imagen
MIT App Inventor2 Pintar en Imagen
 
Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2Cronómetro con MIT App Inventor 2
Cronómetro con MIT App Inventor 2
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 
Proyecto JSP
Proyecto JSPProyecto JSP
Proyecto JSP
 
Crear Base de Datos en Oracle
Crear Base de Datos en OracleCrear Base de Datos en Oracle
Crear Base de Datos en Oracle
 
Escenarios
EscenariosEscenarios
Escenarios
 
Matrices02
Matrices02Matrices02
Matrices02
 
Gráficos
GráficosGráficos
Gráficos
 
Tabla Dinámica
Tabla DinámicaTabla Dinámica
Tabla Dinámica
 
Tabla de Datos
Tabla de DatosTabla de Datos
Tabla de Datos
 
Textura de agua
Textura de aguaTextura de agua
Textura de agua
 
Funciones lógicas y condicionales
Funciones lógicas y condicionalesFunciones lógicas y condicionales
Funciones lógicas y condicionales
 
Solver
SolverSolver
Solver
 
Word VBA
Word VBAWord VBA
Word VBA
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Sincronizar Threads
Sincronizar ThreadsSincronizar Threads
Sincronizar Threads
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Java Thread Cronometro
Java Thread CronometroJava Thread Cronometro
Java Thread Cronometro
 
Java AWT Tres en Raya
Java AWT Tres en RayaJava AWT Tres en Raya
Java AWT Tres en Raya
 

Último

5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
MiNeyi1
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Fernando Solis
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
MiNeyi1
 

Último (20)

5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
5.- Doerr-Mide-lo-que-importa-DESARROLLO PERSONAL
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024Interpretación de cortes geológicos 2024
Interpretación de cortes geológicos 2024
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdfFeliz Día de la Madre - 5 de Mayo, 2024.pdf
Feliz Día de la Madre - 5 de Mayo, 2024.pdf
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docxPLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
PLAN DE REFUERZO ESCOLAR MERC 2024-2.docx
 
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
6.-Como-Atraer-El-Amor-01-Lain-Garcia-Calvo.pdf
 

Acceso a BBDD mediante un servlet

  • 1. RequestParamExample con Acceso a BBDD mediante un servlet que delega temporalmente el procesamiento de la petición a un segundo servlet que conecta y realiza operaciones con la base de datos. En esta práctica un servlet recoge los datos del formulario y delega temporalmente el procesamiento de la petición a un segundo servlet que es el que realiza la conexión y las consultas (insert, select, …) con la base de datos mydb creada previamente con HSQLDB, la cual contiene la tabla ALUMNO (NOMBRE,APELLIDOS). Vamos a extender el servlet RequestParamExample para que realice un acceso a BBDD en el que inserte una fila con el valor de los parámetros del formulario.
  • 2. RequestParamExample.java package pkgServlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class RequestParamExample */ @WebServlet("/RequestParamExample") public class RequestParamExample extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public RequestParamExample() { super(); // TODO Auto-generated constructor stub } /** * @see 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 out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); String title = "Ejemplo de parámetros de Request"; out.println("<title>" + title + "</title>"); out.println("</head>"); out.println("<body bgcolor="white">"); out.println("<h3>" + title + "</h3>"); String firstName = request.getParameter("firstname"); String lastName = request.getParameter("lastname"); String paramsInRed = "Parametros en este Request:"; out.println(paramsInRed + "<br>"); String nombre = "Nombre "; String apellidos = "Apellidos"; String noParams="No hay parámetro, por favor usa alguno"; if (firstName != null || lastName != null){ if(firstName.length()!=0 || lastName.length()!=0){ out.println(nombre); out.println(" = " + firstName + "<br>"); out.println(apellidos); out.println(" = " + lastName); //<EXTENSION>------------------------------------------------------ pintarFormulario(out,nombre,apellidos); RequestDispatcher rd = request.getRequestDispatcher("/DBServlet"); rd.include(request, response); //------------------------------------------------------------------
  • 3. }else{ out.println(noParams); pintarFormulario(out,nombre,apellidos); } } else { out.println(noParams); pintarFormulario(out,nombre,apellidos); } out.println("</body>"); out.println("</html>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } //<EXTENSION>--------------------------------------------------------------------------- private void pintarFormulario(PrintWriter obj, String nom, String apel){ obj.println("<P>"); obj.print("<form action=""); obj.print("RequestParamExample" "); obj.println("method=POST>"); obj.println(nom); obj.println("<input type=text size=20 name=firstname>"); obj.println("<br>"); obj.println(apel); obj.println("<input type=text size=20 name=lastname>"); obj.println("<br>"); obj.println("<input type=submit>"); obj.println("</form>"); //-------------------------------------------------------------------------------------- - } } DBServlet.java package pkgServlets; import java.io.IOException; 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 javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DBServlet */ @WebServlet("/DBServlet")
  • 4. public class DBServlet extends HttpServlet { private static final long serialVersionUID = 1L; private Connection con; private PrintWriter out; public void init(ServletConfig conf) throws ServletException { super.init(conf); try { Class.forName("org.hsqldb.jdbcDriver"); this.con = DriverManager.getConnection("jdbc:hsqldb:file:C:/J2EE_UNED/hsqldb/lib/mydb", "SA", ""); } catch (Exception e) { e.printStackTrace(); return; } } public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); try { out = res.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title> Una demostración de como usar JDBC con un Servlet" + "</title>"); out.println("</head>"); out.println("<body>"); Statement stmt = con.createStatement(); //<EXTENSION>--------------------------------------------------------------- String firstName = req.getParameter("firstname"); String lastName = req.getParameter("lastname"); String sql = "INSERT INTO Alumno VALUES ('" + firstName + "','" + lastName + "');"; stmt.executeUpdate(sql); //-------------------------------------------------------------------------- out.println("<H3>"); out.println("Resultados"); out.println("</H3>"); ResultSet rs = stmt.executeQuery("SELECT * FROM Alumno"); out.println("<UL>"); while (rs.next()) { out.println("<LI>" + rs.getString("Nombre") + "|" + rs.getString("Apellidos") ); } out.println("</UL>"); rs.close(); stmt.close(); } catch (SQLException e) { out.println("Ha habido un error de SQL..."); out.println(e.getMessage()); } catch (IOException e) { System.err.println("Ha habido una IOException..."); e.printStackTrace(); } out.println("</body>"); out.println("</html>"); out.close(); }
  • 5. public void destroy() { try { con.close(); } catch (SQLException e) { out.println(e.getMessage()); } } } Resultado de la ejecución… Al pulsar en el botón “Enviar consulta” se realiza el insert en la bbdd. Delegar peticiones a otros recursos RequestDispatcher rd = request.getRequestDispatcher("/DBServlet"); rd.include(request, response); En el esquema de trabajo típico de los servlets, un servlet recibe una petición http, ejecuta código ubicado en los métodos de servicio para generar la respuesta html y la envía al cliente. En muchas ocasiones, los servlets no generan la respuesta sino que actúan como gestores de la petición mediante la ejecución de código de control con instrucciones if condicionales. En función del bloque condicional que se ejecute se delega la generación de respuesta a otros recursos tales como páginas html, páginas jsp u otros servlets.
  • 6. La interface javax.servlet.RequestDispatcher contiene dos métodos que permiten delegar la generación de respuestas a otros recursos. • El método forward, que permite delegar el procesamiento de la petición a una página html, jsp u otro servlet. • El método include, que permite incluir la respuesta generada por uno de estos recursos en el servlet sobre el que se aplica. Explicación detallada de ambos métodos: • void forward(ServletRequest request, ServletResponse response): delega el procesamiento de la petición al recurso especificado en el argumento del objeto RequestDispatcher sobre el que se aplica. Toda respuesta vertida al flujo de salida mediante el objeto out asociada a líneas anteriores y posteriores a la del método no se considera. El resto de código, sí. • void include(ServletRequest request, ServletResponse response): delega “temporalmente” el procesamiento de la petición al recurso especificado en el argumento del objeto RequestDispatcher sobre el que se aplica, incluyendo en el servlet en el que se encuentra definido, además de la respuesta generada hasta la línea del include, una página html, jsp o la respuesta html generada por otro servlet. Muy usado para incorporar encabezados (headers) y pies de página (footers) comunes a todos los recursos de una aplicación web. Para poder aplicar estos métodos es necesario obtener un objeto de la interface RequestDispatcher. • RequestDispatcher getRequestDispatcher(String rutaRecursoAlQueSeDelega): se emplea, sobre todo, cuando se desea delegar en ficheros html o jsps. También sirve para servlets. javax.servlet Interface RequestDispatcher public interface RequestDispatcher Defines an object that receives requests from the client and sends them to any resource (such as a servlet, HTML file, or JSP file) on the server. The servlet container creates the RequestDispatcher object, which is used as a wrapper around a server resource located at a particular path or given by a particular name. This interface is intended to wrap servlets, but a servlet container can create RequestDispatcher objects to wrap any type of resource.
  • 7. Method Summary void forward(ServletRequest request, ServletResponse response) Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. void include(ServletRequest request, ServletResponse response) Includes the content of a resource (servlet, JSP page, HTML file) in the response.