El modelo MVC ha dia de hoy se ha usado en la gran mayoría de aplicaciones J2EE y JEE. Unos habrán usado struts, otros spring mvc y otros JSF. Sin embargo el modelo MVC como tal no es algo obligatorio sino que es una recomendación de como dividir las responsabilidades de una aplicación (ver imagen).
Las vistas que nosotros desarrollamos pueden estar construidas con JSTL ,Tags de Spring MVC ,JSF etc o también podrían estar construidas por scriptlet de JSP.
Es evidente que el construir la vista con scriptlet de JSP facilita que alguien deje de usar el propio modelo MVC y comience a utilizar scriptlet para programar todo en la propia página.
Esto se salta el modelo MVC ya que este esta orientado a dividir las responsabilidades de vista ,controlador y modelo y no a incluir sentencias SQL en las propias páginas.Ahora bien nada impide de entrada a un desarrollador comenzar a construir paginas basadas en scriptlet y añadirlas a las paginas que en este momento tenemos construidas sobre un modelo MVC.
Esta es la situación que me he encontrado un muchas aplicaciones .Aparentemente la aplicación esta desarrollada sobre el modelo MVC . Sin embargo cuando entras a detalle en ella comienzas a ver muchos ficheros JSP que no siguen el patron MVC y están llenos de Scriptlet y de lógica de negocio. Muchas veces han sido nuevas funcionalidades que se han desarrollado por otras personas que no fueron las que en un primer momento desarrollaron la version 1.0 . Este es un problema importante ya que cuando lleguemos al momento de tener que realizar un mantenimiento sobre estas partes los costes sin duda aumentaran de forma importante.
Solución
Una solución sencilla a este problema es usar el fichero web.xml estandar y apoyarse en un grupo de etiquetas que soporta para configurar las capacidades de los ficheros jsp. Eliminando a traves de ellas la capacidad de scriptlet en nuestras paginas . A continuación se muestra el bloque de código del fichero web.xml.
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
</jsp-property-group>
</jsp-config>
De esta manera habremos desabilitado la posibilidad de que un desarrollador use código jsp en nuestras páginas como se muestra en la siguiente figura.
Una vez realizadas esta operación si nuestra aplicación dispone de la siguiente página JSP con Scriptlet
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=UTF-8”>
<title>Insert title here</title>
</head>
<body>
<%out.println(“hola desde jsp scriptlet”);%>
</body>
</html>
Al solicitar la pagina al navegador se producirá el siguiente error.
Como podemos observar la página genera un error al no poder ejecutar el scriptlet. De esta forma tan sencilla podemos evitar que nos instalen aplicaciones que no cumplan con unos mínimos principios de arquitectura.
Cuando considera correcto utilizar JSF, EJB y JPA y cuando solamente utilizar Servlet y JSP.
Usar solamente la API o es mejor usar un framework como Hibernate?
Buenas Nelson Pues a dia de hoy es mejor usar JPA que Hibernate en lineas generales ya que te permitira migrar de servidor de forma mas sencilla y JPA soporta la mayor parte de las cosas que necesitas usar a nivel de ORM . Entre JSF y Servlets yo te diría que son dos mundos muy distintos ya que JSF es un framework avanzado de controles y Servlets y JSP no . Yo croe que la pregunta sería mas si usar JSF o un framework de presentación tipo Struts 2 o Spring MVC . Espero sacar un rato para poner… Read more »
Efectivamente, es una situación indeseable y el problema se agrava en cuanto mezclas scriptlets con Javascript, algo que sufrí en Everis impuesto por mi jefe de proyecto (al que todos idolatraban en la aseguradora cliente…). En vez de generar JSON con librerías Java, generaban todos los objetos vía scriptlet, eso si, los @Controller les quedaban muy bien para poder decir que usaban Spring MVC y engañar al cliente en sus documentos de consultoría… El problema es cuando heredas mucho código y da igual que le justifiques el cambio con ahorros en costes de mantenimiento, se limitan al “ya funciona, no… Read more »
Hola Blas, eres de Perú? la consulta es porque soy Peruano y estoy empezando con JEE, conosco el manejo de Java a través de aplicaciones de escritorio y ahora estoy aprendiendo Java Web y me gustaría hacer consultas a personas con experiencia, y por lo que mencionas trabajas en Everis una empresa a la quiero llegar.