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.