Question

Je suis un fervent partisan de garder la logique de l'application dans la servlet et de garder le JSP aussi simple que possible. Une des raisons en est que tout bon concepteur Web devrait pouvoir étendre ses connaissances en HTML pour intégrer quelques balises JSTL afin d'effectuer une simple itération, accéder à des beans, etc. Nous conservons également les composants plus complexes / ajax / js une bibliothèque de balises (similaire à displayTag mais pour nos propres composants).

La plupart du temps, tout se passe bien - La servlet exécute le code SQL dont elle a besoin et stocke les résultats dans des beans pour que le JSP puisse y accéder. Nous avons un problème lorsque les enregistrements auxquels nous souhaitons accéder sont spécifiés par la conception.

L'exemple le plus clair serait la page d'accueil - elle doit être accrocheuse et efficace. Il n'a pas besoin d'être uniforme comme le reste du site. Il existe de nombreux cas uniques ou "cas spéciaux". ici, où nous voulons interroger un enregistrement de produit particulier, ou autre chose.

Ce que souhaite le concepteur, c'est un moyen d'obtenir un bean de produit à l'aide de l'ID de produit afin de pouvoir accéder aux propriétés de manière normale. Nous ne souhaitons évidemment pas interroger tous les produits, et je ne veux pas interroger dans la présentation.

Je suis sûr que je demande l'impossible ici et que je dois renoncer à quelque chose. Ma question est quoi?

MODIFIER

Est-ce que je me trompe en pensant que toute la logique d'application devrait être complète avant d'appeler le JSP? J'avais l'impression qu'il était considéré comme la meilleure pratique de faire toutes les requêtes / calculs / traitements dans le servlet, puis de transmettre des beans (relativement) idiots à un JSP (très) idiote.

Il existe plusieurs méthodes permettant d'encapsuler la complexité réelle de la requête dans une autre classe (balise personnalisée ou bean) et de l'appeler par le JSP. Ce maintient le JSP simple (objectif 1), mais le JSP continue à "déclencher" la requête - assez tard dans le processus.

  • Est-ce que je me trompe totalement et que c'est bien de le faire.
  • Est-ce une règle générale, mais parfaitement correct de le faire dans ce cas.
  • Puis-je rencontrer des problèmes?

EDITER - Exemple

J'espère que cet exemple aidera:

La page d'accueil n'est pas un "modèle". comme la catégorie / pages de recherche - il est conçu sur mesure pour fonctionner très bien avec, disons, une image marketing et quelques images de produits spécifiques. Cependant, il possède des informations sur ces deux produits qui doivent être obtenues de manière dynamique (pour que le nom et surtout le prix) restent synchronisées avec la base de données.

Le servlet ne peut pas savoir quels produits il s'agira, car si le concepteur souhaite les modifier / les supprimer / en ajouter, il ne devrait modifier que le fichier JSP (et éventuellement le XML sous la forme d'une réponse suggérée).

Était-ce utile?

La solution

Si je comprends bien, vous avez une logique dans le JSP qui veut un produit particulier, mais vous ne voulez pas interroger à partir de la base de données, et il est trop tard pour que la servlet en soit consciente.

(Remarque: bien que je respecte votre volonté de maintenir la séparation des préoccupations, le fait qu'il s'agisse d'un problème montre clairement que votre framework a trop de logique dans le niveau présentation ... mais nous ne pourrons probablement pas résoudre le problème. ça ... passe).

Je recommande que votre concepteur crée un fichier XML de configuration contenant tous les cas particuliers nécessaires au frontal, et que votre servlet puisse le lire, puis renvoyer des beans dumb au JSP.

OU ... vous divisez les choses en plusieurs requêtes à l'aide de XMLHTTPRequest et rappelez le servlet pour chaque requête individuelle, puis assemblez la page sur le client.

Autres conseils

Il semble que vous ayez besoin d’une meilleure séparation entre l’affichage et le code de la base de données. Vous devez avoir des classes distinctes traitant uniquement de l’interaction avec la base de données et ne sachant rien de l’affichage.

Vous créez ensuite une méthode qui recherchera le produit par ID et renverra ce bean afin que l'affichage puisse extraire les attributs souhaités.

Vous devez créer un bean personnalisé qui effectuera vos requêtes pour le front-end. En fait, selon ce que vous dites ici, il s’agit probablement plutôt de quelques haricots pour obtenir les données.

Cela ne pose aucun problème du point de vue de la conception. c'est simplement que la conception spécifique de la page d'accueil a des exigences plus hétérogènes que le reste de votre site. Assurez-vous que votre concepteur sait qu'il doit bien communiquer ses besoins à l'équipe de développement pour créer le BO de votre page d'accueil (ou autre) et tout devrait bien se passer.

Vous n’avez pas tort de penser que toute la logique de l’application doit être terminée avant de rendre le JSP.

S'il est nécessaire d'extraire davantage d'éléments à afficher dans votre JSP, il s'agira d'une autre demande adressée au serveur et d'un autre cycle de page. Si vous recherchez une expérience de chargement 'interactive', vous pouvez utiliser AJAX.

Au cours du cycle de vie d'une seule page, j'ai du mal à comprendre pourquoi vous devez appeler des appels de base de données à partir d'un fichier JSP. La page n’a-t-elle pas déjà été publiée avec toutes les variables de formulaire requises pour vous aider à trouver les données dans les classes Servlet / Helper?

Si vous pouviez donner un exemple de cas, ce serait utile.

[Modifier] Si vous regardez votre exemple, votre concepteur (ou l'administrateur du site) devrait définir ces informations comme une configuration et non comme une partie de JSP. Vous pouvez également avoir une petite page app / admin pour gérer les informations dans une base de données afin de pouvoir les modifier lors de vos déplacements. Lorsque vous affichez votre page d'accueil, lisez les configurations et chargez les données appropriées.

Je ne sais pas quelle est la question. Si vous voulez avoir des instructions SQL à partir de vos pages JSP, vous pouvez les mettre dans un fichier de propriétés et lire le fichier de propriétés à partir de la page JSP.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top