Acceso a BBDD mediante un servlet

  • 787 views
Uploaded on

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.

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.

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
787
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. RequestParamExample con Acceso a BBDD mediante un servlet que delegatemporalmente el procesamiento de la petición a un segundo servlet queconecta y realiza operaciones con la base de datos.En esta práctica un servlet recoge los datos del formulario y delegatemporalmente el procesamiento de la petición a un segundo servlet que es elque realiza la conexión y las consultas (insert, select, …) con la base dedatos mydb creada previamente con HSQLDB, la cual contiene la tabla ALUMNO(NOMBRE,APELLIDOS).Vamos a extender el servlet RequestParamExample para que realice un acceso aBBDD en el que inserte una fila con el valor de los parámetros delformulario.
  • 2. RequestParamExample.javapackage 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) throwsServletException, IOException {// TODO Auto-generated method stubresponse.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) throwsServletException, IOException {// TODO Auto-generated method stubdoGet(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.javapackage 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 recursosRequestDispatcher rd = request.getRequestDispatcher("/DBServlet");rd.include(request, response);En el esquema de trabajo típico de los servlets, un servlet recibe unapetición http, ejecuta código ubicado en los métodos de servicio para generarla respuesta html y la envía al cliente.En muchas ocasiones, los servlets no generan la respuesta sino que actúancomo gestores de la petición mediante la ejecución de código de control coninstrucciones if condicionales. En función del bloque condicional que seejecute se delega la generación de respuesta a otros recursos tales comopáginas html, páginas jsp u otros servlets.
  • 6. La interface javax.servlet.RequestDispatcher contiene dos métodos quepermiten delegar la generación de respuestas a otros recursos.• El método forward, que permite delegar el procesamiento de la peticióna una página html, jsp u otro servlet.• El método include, que permite incluir la respuesta generada por unode estos recursos en el servlet sobre el que se aplica.Explicación detallada de ambos métodos:• void forward(ServletRequest request, ServletResponse response): delegael procesamiento de la petición al recurso especificado en elargumento del objeto RequestDispatcher sobre el que se aplica. Todarespuesta vertida al flujo de salida mediante el objeto out asociada alíneas anteriores y posteriores a la del método no se considera. Elresto de código, sí.• void include(ServletRequest request, ServletResponse response): delega“temporalmente” el procesamiento de la petición al recursoespecificado en el argumento del objeto RequestDispatcher sobre el quese 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áginahtml, jsp o la respuesta html generada por otro servlet. Muy usadopara 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 lainterface RequestDispatcher.• RequestDispatcher getRequestDispatcher(StringrutaRecursoAlQueSeDelega): se emplea, sobre todo, cuando se deseadelegar en ficheros html o jsps. También sirve para servlets.javax.servletInterface RequestDispatcherpublic interface RequestDispatcherDefines 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 createsthe RequestDispatcher object, which is used as a wrapper around a server resourcelocated at a particular path or given by a particular name.This interface is intended to wrap servlets, but a servlet container can createRequestDispatcher objects to wrap any type of resource.
  • 7. Method Summaryvoid forward(ServletRequest request, ServletResponse response)Forwards a request from a servlet to another resource (servlet, JSP file, orHTML file) on the server.void include(ServletRequest request, ServletResponse response)Includes the content of a resource (servlet, JSP page, HTML file) in theresponse.