Creador y propietario de AdictosAlTrabajo.com, Director General de Autentia S.L., Ingeniero Técnico de Telecomunicaciones y Executive MBA por el Instituto de Empresa 2007.
Twitter: Follow @rcanalesmora
Autor de los Libros: Planifica tu éxito: de aprendiz a empresario y Informática profesional, las reglas no escritas para triunfar en la empresa
Puedes consultar mi CV y alguna de mis primeras aplicaciones (de los 90) aquí
Fecha de publicación del tutorial: 2003-06-16
JSPs en Tomcat y MVC
La creación de JSP es algo bastante trivial. Vamos a describir es este tutorial como se construyen JSPs y se ejecutan en Tomcat.
Posteriormente hablaremos del famoso modelo vista controlado .... y de temas más avanzados como las librerías de Tags
Lo primero es descargarse Tomcat y arrancarlo.
No olvidar que tenemos que tener JAVA_HOME apuntando al directorio donde tenemos instalado el JDK

Ejecutamos el comando startup.bat

Y comprobamos que todo funciona correctamente

Empezamos construyendo nuestro primer JSP. Lo vamos a llamar otro.jsp y lo vamos a colgar del WebApp por defecto (ROOT)

Vemos que se ejecuta

Internamente, un JSP gerena un Servlet. Podemos incluso ver el código que realmente se genera. (esto no lo necesitan saber los usuarios noveles aunque es muy importante a posteriori para depuraciones avanzadas)

| package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; public class otro_jsp extends HttpJspBase { private static java.util.Vector _jspx_includes; public java.util.List getIncludes() { return _jspx_includes; } public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspFactory _jspxFactory = null; javax.servlet.jsp.PageContext pageContext = null; HttpSession session = null; ServletContext application = null; ServletConfig config = null; JspWriter out = null; Object page = this; JspWriter _jspx_out = null; try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); _jspx_out = out; out.write("<html>\r\n"); out.write("<h1>Esto es otro ejemplo"); out.write("</h1>\r\n"); out.write("</html>"); } catch (Throwable t) { out = _jspx_out; if (out != null && out.getBufferSize() != 0) out.clearBuffer(); if (pageContext != null) pageContext.handlePageException(t); } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); } } } |
Como podemos comprobar, un JSP es un pequeño artificio que sigue toda la lógica de los servlets.
En una aplicación normal, lo primero que tenemos que hacer es recoger parámetros de la petición que nos han realizado.
| <html> <h1>Esto es otro ejemplo</h1> <% String cadena = request.getParameter("cadena"); %> <h2>La cadena recogida es: </h2> <%= cadena %> </html> |

Cuando se construyen aplicaciones con JSP´s hay que procurar desacoplar la lógica de presentación de la lógica de negocio. Para esto, se suele utilizar el denominado esquema modelo-vista-controlador (veremos esto en otro tutorial donde hablaremos de Patrones de Diseño).
En otras palabras, lo que realizamos es una consulta a un componente (normalmente un servlet) que realiza las labores complejas y delega sobre un JSP la labor de presentación (dejándole en variables de sesión o petición los valores a ser presentados).
Vamos a crear un Servlet que tenga este comportamiento
| import javax.servlet.*; import javax.servlet.http.*; public class ejemploMvc extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) { try { request.setAttribute ("edad", "24"); getServletConfig().getServletContext().getRequestDispatcher("/jsp/muestra.jsp").forward(request, response); } catch (Exception ex) { ex.printStackTrace (); } } } |
Nuestro JSP, para recoger estos valores deben tener la siguiente forma:
| <html> <head> <title>Ejemplo de modelo-vista-controlador</title> </head> <body> El parámetro que nos han pasado es <% out.print (request.getAttribute("edad").toString()); %> </body> </html> |
Invocamos

También podríamos haber escrito así el JSP
| <html> <head> <title>Ejemplo de modelo-vista-controlador simple</title> </head> <body> El parámetro que nos han pasado es: <b><%= request.getAttribute("edad") %> </b> </body> </html> |
A su vez, tambien podemos redirigir desde un jsp a otro JSP o servlet, utilizando
| <jsp:forward page="/jsp/otro.jsp"/> |
A continuación puedes evaluarlo:
Fecha publicación: 2008-07-16-12:21:49
Autor:
Fecha publicación: 2006-09-04-09:23:52
Autor:
Fecha publicación: 2006-04-25-10:25:18
Autor:











