Pregunta

Soy un gran fanático de mantener la lógica de la aplicación en el servlet y de mantener el JSP lo más simple posible. Una de las razones para esto es que cualquier buen diseñador web debería poder ampliar su conocimiento de HTML para incorporar algunas etiquetas JSTL para realizar iteraciones simples, acceso a beans, etc. También mantenemos detrás los componentes más complejos / ajax / js una biblioteca de etiquetas (similar a displayTag pero para nuestros propios componentes).

La mayoría de las veces, todo funciona bien: el servlet hace el SQL que necesita y almacena los resultados en beans para que acceda el JSP. Donde tenemos un problema es cuando el diseño especifica los registros a los que deseamos acceder.

El ejemplo más claro sería la página de inicio: debe ser llamativa y efectiva. No necesita ser uniforme como el resto del sitio. Hay muchos casos únicos o " casos especiales " aquí, donde queremos consultar un registro de producto en particular, o lo que sea.

Lo que realmente quiere el diseñador es una forma de obtener un bean de producto por el id del producto para que pueda acceder a las propiedades de la forma habitual. Obviamente, no queremos consultar todos los productos, y no quiero consultar en la presentación.

Estoy bastante seguro de que estoy pidiendo lo imposible aquí y que tengo que renunciar a algo. Mi pregunta es qué?

EDIT

¿Me equivoco al pensar que toda la lógica de la aplicación debería estar completa antes llamando a la JSP? Tenía la impresión de que se consideraba una buena práctica hacer todas las consultas / cálculos / procesamientos en el servlet y luego pasar (bastante) frijoles tontos a un JSP (muy) tonto.

Hay un par de métodos mediante los cuales la complejidad real de la consulta se puede encapsular en otra clase (etiqueta personalizada o bean), y la JSP puede llamarla. Esta mantiene el JSP simple (objetivo 1), pero el JSP sigue activando " " la consulta - bastante tarde en el proceso.

  • Tengo esto totalmente mal y está bien hacer esto.
  • Es una regla general, pero está perfectamente bien hacer esto en este caso.
  • ¿Puedo tener problemas?

EDITAR - Ejemplo

Espero que este ejemplo ayude:

La página de inicio no es una " plantilla " Al igual que la categoría / páginas de búsqueda, está diseñado para que funcione muy bien con, por ejemplo, una imagen de marketing y un par de imágenes de productos específicos. Sin embargo, sí tiene información sobre los dos productos que deberían obtenerse dinámicamente (por lo que el nombre y, lo que es más importante, el precio) se mantienen sincronizados con la db.

El servlet no puede saber qué productos serán estos, porque si el diseñador desea cambiarlos / eliminarlos / agregar más, solo debería tener que editar el JSP (y posiblemente XML como una respuesta sugerida).

¿Fue útil?

Solución

Si entiendo correctamente, tienes lógica en la JSP que quiere un producto en particular, pero en este punto no quieres consultar desde la base de datos, y es demasiado tarde para que el servlet lo sepa.

(Una nota al margen, aunque respeto su voluntad de mantener la separación de inquietudes, el hecho de que este sea un problema muestra claramente que su marco tiene demasiada lógica en el nivel de presentación ... pero ya que probablemente no podamos arreglarlo que ... seguir adelante).

Mi recomendación es que su diseñador cree un archivo de configuración XML que contenga los casos especiales que necesita para la interfaz, y el servlet suyo puede leer eso, y luego pasar los frijoles a la JSP.

O ... divide las cosas en múltiples solicitudes utilizando XMLHTTPRequest y vuelve a llamar al servlet para cada consulta individual, luego ensambla la página en el cliente.

Otros consejos

Parece que necesita una mejor separación entre la pantalla y el código de la base de datos. Debería tener clases separadas que solo traten de interactuar con la base de datos y no saber nada sobre la visualización.

Luego, simplemente crea un método que buscará el producto por ID y devolverá ese bean para que la pantalla pueda extraer los atributos que desea.

Necesitas crear un bean personalizado que realice tus consultas para el front-end. De hecho, es probable que sea más como unos cuantos beans para obtener los datos para usted, de acuerdo con lo que dice aquí.

No hay problema con hacerlo desde una perspectiva de diseño; es solo que el diseño específico de la página de inicio tiene requisitos más heterogéneos que el resto de su sitio. Asegúrese de que su diseñador sepa que necesita comunicar bien sus necesidades al equipo de desarrollo para crear el BO para su página de inicio (o lo que sea) y todo debe ir bien.

No se equivoca al pensar que toda la lógica de la aplicación debe estar completa antes de procesar el JSP.

Si existe la necesidad de obtener más elementos para mostrar en su JSP, sería otra solicitud al servidor y otro ciclo de página. Si está buscando una experiencia de carga 'interactiva', podría usar AJAX.

En un ciclo de vida de una sola página, me resulta difícil entender por qué tiene que invocar llamadas de base de datos desde un JSP. ¿No se ha publicado previamente la página con todas las variables de formulario necesarias para ayudarlo a encontrar los datos en las clases de Servlet / Helper?

Si pudieras dar un ejemplo de un caso, sería útil.

[Editar] Mirando su ejemplo, sí, su diseñador (o el administrador del sitio) debe establecer esa información como una configuración, no como parte de JSP. O bien, podría tener una pequeña aplicación / página de administración para mantener la información en una base de datos para que se pueda cambiar sobre la marcha. Cuando muestre su página de inicio, lea las configuraciones y cargue los datos apropiados.

No estoy seguro de cuál es la pregunta. Si desea tener declaraciones SQL de sus páginas jsp, puede ponerlas en un archivo de propiedades y simplemente leer el archivo de propiedades de la página jsp.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top