UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD DE INGENIERIA DOCTORADO EN INGENIERÍA COMPETENCIAS EN CIENCIA DE LA INFORMACIÓN Y EL CONOCIMIENTO Carlos Enrique Montenegro Marín Ingeniero de Sistemas de la Universidad Distrital Magister en ciencias de la Información y las comunicaciones de la Universidad Distrital DEA en ingeniería de Software de la Pontifica Universidad de Salamanca PhD en Sistemas y Servicios informáticos para internet de la Universidad de Oviedo Correo Electronico: cemontenegrom@udistrital.edu.co ingcarlosmontenegro@gmail.com Linkedin: http://es.linkedin.com/pub/carlos-enriquemontenegro-marin/26/584/82a Facebook: http://www.facebook.com/ingcarlosmontenegro Twitter @ingcemm Tutorial Web Dinámica con Servlets y JSP Sesion 3 1. Eclipse Plataforma Web Tool Eclipse WTP proporciona herramientas para desarrollar aplicaciones web estándar Java y aplicaciones Java EE. Artefactos típicos web en un entorno Java son páginas HTML, archivos XML, servicios web, servlets y JSP. Eclipse WTP simplifica la creación estos artefactos web y proporciona entornos de tiempo de ejecución en el que estos artefactos pueden ser desplegados, se inició y depurado. En Eclipse WTP crear "proyectos Web dinámicos". Estos proyectos proporcionan la funcionalidad necesaria para ejecutar, depurar y desplegar aplicaciones Web de Java. Eclipse WTP soporta la gran mayoría de Contenedor Web, por ejemplo Jetty y Tomcat Apache, así como la mayor cantidad de servidor de aplicaciones Java EE. Este tutorial usa Apache Tomcat como un Contenedor Web. 2. Instalación de Tomcat Descargue el Apache Tomcat 7.0.x del servidor de la página web siguientehttp://tomcat.apache.org/ . En MS Windows, puede utilizar el programa de instalación autoexplicativo MS para instalar Tomcat. Para una instalación de Tomcat en otras plataformas, utilice Google. Después prueba la instalación de Tomcat, si quedo instalado correctamente al abrir un navegador a http://localhost:8080/. Esto debería abrir la página principal de Tomcat y si usted ve esta página después Tomcat está instalado correctamente. Después de verificar que Tomcat está instalado correctamente, pare el Tomcat. Eclipse WTP tratara de iniciar Tomcat por sí mismo. Si ya se está ejecutando Tomcat Eclipse WTP no será capaz de utilizarlo para el desarrollo. 3. Instalación de la WTP Supongo que usted haya descargado el IDE Eclipse para desarrolladores de Java . Utilice el Gestor de actualizaciones de Eclipse para instalar todos los paquetes de la categoría "Web, XML, Java EE y Desarrollo OSGi Desarrollo de la Empresa", excepto "PHP Desarrollo" y la Tooling "RAP". 4. WTP de configuración Seleccione Windows -> Preferencias -> Servidor -> Runtime Environment para configurar disposición a pagar para utilizar Tomcat Pulse Agregar. Seleccione su versión de Tomcat. Para compilar la página JSP en servlets es necesario utilizar el JDK. En mi caso el "JRE Workbench default" está señalando el JDK. Usted puede comprobar la configuración haciendo clic en "JRE instalado". Pulse Finalizar y luego en Aceptar. Ahora está listo para usar Tomcat con WTP. 4,1. Servidor Durante el desarrollo va a crear su servidor. Puede administrar el servidor a través de la vista del servidor. Para ver si los datos se persisten detener y reiniciar el servidor. Usted puede hacer esto a través del Windows -> Show View -> Servidores -> Servidores A continuación le mostramos donde se puede iniciar, detener y reiniciar el servidor. 5. Servlets 5,1. Proyecto Vamos a crear un servlet que funciona como un contador de páginas web. Este servlet mantendrá un registro del número de visitantes de una página web. El servlet persiste el número de visitantes en un archivo de texto. Crear un nuevo "proyecto web dinámico" llamado "wtp.filecounter" seleccionando Archivo -> Nuevo -> Otros -> Web -> Proyecto Web dinámico. Presione Finish. Si se le pregunta si desea cambiar a la perspectiva Java EE respuesta afirmativa. Un nuevo proyecto ha sido creado con la estructura estándar de una aplicación web Java. El directorio WEB-INF/lib más tarde llevará a cabo todos los archivos JAR que la aplicación web Java requiere. 5,2. Creación de objetos de acceso a datos Crear un nuevo paquete "SampleServlet". Cree la clase Java que proporcionará el número de visitantes escribir este valor en un archivo. ackage wtp.filecounter.dao; import import import import import import java.io.BufferedReader; java.io.File; java.io.FileReader; java.io.FileWriter; java.io.IOException; java.io.PrintWriter; public class FileDao { public int getCount() { int count = 0; // Load the file with the counter FileReader fileReader = null; BufferedReader bufferedReader = null; PrintWriter writer = null ; try { File f = new File("FileCounter.initial"); if (!f.exists()) { f.createNewFile(); writer = new PrintWriter(new FileWriter(f)); writer.println(0); } if (writer !=null){ writer.close(); } fileReader = new FileReader(f); bufferedReader = new BufferedReader(fileReader); String initial = bufferedReader.readLine(); count = Integer.parseInt(initial); } catch (Exception ex) { if (writer !=null){ writer.close(); } } if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } return count; } public void save(int count) throws Exception { FileWriter fileWriter = null; PrintWriter printWriter = null; fileWriter = new FileWriter("FileCounter.initial"); printWriter = new PrintWriter(fileWriter); printWriter.println(count); // Make sure to close the file if (printWriter != null) { printWriter.close(); } } } Esta clase Java no es un servlet, es una clase normal de Java. 5,3. Crear el Servlet Crear un servlet. Haga clic derecho sobre la carpeta y seleccione Webcontent New-> Other.Seleccione Web - Servlet>. Mantener los datos siguientes. Pulse Finalizar. También puede crear un servlet sin el asistente. El asistente crea una clase Java que se extiende javax.servlet.http.HpptServlet y añadir la configuración de servlet para el archivo de descripción de web.xml. Mantener el siguiente código para el servlet. package wtp.filecounter; import java.io.IOException; import java.io.PrintWriter; import import import import import javax.servlet.ServletException; javax.servlet.annotation.WebServlet; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import wtp.filecounter.dao.FileDao; /** * Servlet implementation class FileCounter */ @WebServlet("/FileCounter") public class FileCounter extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FileCounter() { super(); // TODO Auto-generated constructor stub } int count; private FileDao dao; public void init() throws ServletException { dao = new FileDao(); try { count = dao.getCount(); } catch (Exception e) { getServletContext().log("An exception occurred in FileCounter", e); throw new ServletException("An exception occurred in FileCounter" + e.getMessage()); } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub // Set a cookie for the user, so that the counter does not increate // everytime the user press refresh HttpSession session = request.getSession(true); // Set the session valid for 5 secs session.setMaxInactiveInterval(5); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); if (session.isNew()) { count++; } out.println("This site has been accessed " + count + " times."); } public void destroy() { super.destroy(); try { dao.save(count); } catch (Exception e) { e.printStackTrace(); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } } Este código se lee el contador de un archivo en el servidor y devolvera texto sin formato en el navegador. El servlet aumentará el contador si el usuario espera 5 segundos inactivo. 5,4. Ejecutar Seleccione el servlet, haga clic derecho sobre él y seleccione Run As -> Ejecutar en servidor. Seleccione su servidor e incluya su servlet para que se ejecuta en el servidor. Pulse Finalizar. Usted debe ver en Eclipse un navegador web mostrando en su interior el número de cuenta. Si usted espere 5 segundos y volver a cargar el número debería aumentar. Felicitaciones. Ha creado su primera servlet trabajar con Eclipse WTP! 6. JavaServer Pages (JSP) 6,1. Crear proyecto El siguiente ejemplo muestra la creación y uso de una página JaveServer . Crear el proyecto Web dinámico "sampleJSP". y el paquete " wtp.jspsimple" 6,2. Cree el JSP Seleccione la carpeta "WebContent", haga clic con el botón derecho del ratón -> Nuevo -> JSP y crear la JSP "FirstJSP". Seleccione la opción "Nuevo archivo JSP (html)" de la plantilla. Cree la siguiente codificación. <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>JSP con Fecha Actual</title> </head> <body> <%java.text.DateFormat df = new java.text.SimpleDateFormat("dd/MM/yyyy"); %> <h1>Current Date: <%= df.format(new java.util.Date()) %> </h1> </body> </html> 6,3. Ejecutarlo Inicie su aplicación web. Para ello encontrara su JSP bajo la URL "http://localhost:8080/SampleJSP/FirstJSP.jsp". 6,4. Ajuste web.xml Establezca la página JSP como página de bienvenida para su aplicación. Esto es opcional, pero que sea más fácil porque el JSP se abre automáticamente cuando se inicia la aplicación. Modificar el archivo "WebContent / WEB-INF / web.xml" a la siguiente. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>SampleJSP</display-name> <welcome-file-list> <welcome-file>FirstJSP.jsp</welcome-file> </welcome-file-list> </web-app> Esto permite iniciar el JSP a través de la trayectoria "http://localhost:8080/SampleJSP/". 7. JSP y Servlets 7,1. Crear proyecto Este ejemplo demostrará el uso de JSP para la visualización y un servlet como el controlador para una aplicación de web. El servlet enviará la solicitud JSP correcto. Cree el Dynamic Web Project "SampleServletAndJSP". y el paquete "wtp.jsp" 7,2. Cree el controlador (servlet) Crear un servlet nuevo "Controller" en el paquete " wtp.jsp". package wtp.jsp; import java.io.IOException; import java.util.Map; import import import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletConfig; javax.servlet.ServletException; javax.servlet.annotation.WebServlet; javax.servlet.http.HttpServlet; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; /** * Servlet implementation class Controller */ @WebServlet("/Controller") public class Controller extends HttpServlet { private static final long serialVersionUID = 1L; private static String DELETE_JSP = "/Delete.jsp"; private static String EDIT_JSP = "/Edit.jsp"; private static String SHOWALL_JSP = "/ShowAll.jsp"; /** * @see HttpServlet#HttpServlet() */ public Controller() { 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 String forward=""; // Get a map of the request parameters @SuppressWarnings("unchecked") Map parameters = request.getParameterMap(); if (parameters.containsKey("delete")){ forward = DELETE_JSP; } else if (parameters.containsKey("edit")){ forward = EDIT_JSP; } else { forward = SHOWALL_JSP; } RequestDispatcher view = request.getRequestDispatcher(forward); view.forward(request, response); } } Este controlador comprueba que parámetros se ha pasado al servlet y luego remitirá la solicitud al correcto JSP. 7,3. Crear las Vistas (JSP) En la carpeta "WebContent" crear el nueva JSP "ShowAll" con el siguiente código. <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>Show all names</title> </head> <body> <form method="GET" action='Controller' name="showall"> <table> <tr> <td><input type="checkbox" name="id1" /></td> <td>Jim</td> <td>Knopf</td> </tr> <tr> <td><input type="checkbox" name="id2" /></td> <td>Jim</td> <td>Bean</td> </tr> </table> <p><input type="submit" name="delete" value="delete" />&nbsp; <input type="submit" name="edit" value="edit" />&nbsp; <input type="reset" value="reset" /></p> </form> </body> </html> Cree el JSP "delete.jsp". <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>Insert title here</title> </head> <body> Delete successful <form method="GET" action='Controller' name="delete_success"><input type="submit" value="back"></form> </body> </html> Cree el JSP "Edit.jsp". <%@ page language="java" contentType="text/html; charset=ISO8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1"> <title>Insert title here</title> </head> <body> <form method="GET" action='Controller' name="edit"> <table> <tr> <td>First name:</td> <td><input type="text" name="firstName"></td> </tr> <tr> <td>Last name:</td> <td><input type="text" name="lastName"></td> </tr> <tr> <td><input type="submit" value="save"> <input type="reset" value="reset"> <input type="submit" value="back"> </td> </tr> </table> </form> </body> </html> 7,4. Ejecutarlo Monta tu nueva aplicación mediante la ejecución de "ShowAll.jsp" en el servidor. Usted debe ser capaz de navegar entre las páginas. 8. Archivo Web - Cómo crear un archivo WAR de Eclipse 'A continuación se describe cómo crear un archivo Web (WAR) de Eclipse. Haga clic derecho sobre el proyecto y seleccione "Exportar". Especifique el directorio de destino y pulse Finalizar. Importar ahora el archivo WAR a su sistema de producción Tomcat y probar la aplicación web.