2014-07-10 4 views
0

Je donne un exemple pour obtenir ce que je veux dire. J'ai un site simple avec seulement 2 pages. La page principale comprend une autre page (disons que la page incluse est la page avec le menu du site).Quelle est la bonne façon de gérer comprennent serlvet

Je dois faire une opération dynamique dans ce menu, donc je veux contrôler ce menu en utilisant une servlet. Après avoir fait quelques "trucs" dans le servlet je veux dire au servlet de "se rediriger" vers une page jsp et d'imprimer, sur cette page (qui est incluse dans la page principale), ce que je suis passé de la servlet à la page jsp.

Je ne peux pas le faire avec ce code

request.setAttribute("var", var) 
request.getRequestDispatcher(destinationPage).forward(request, response) 

parce que, bien sûr, tout mon site serait redirigé vers la page « destinationPage » et pas seulement inclure la page!

Est-il correct d'utiliser ce code dans le servlet?

request.setAttribute("var", var) 
request.getRequestDispatcher(destinationPage).include(request, response); 

Puis-je gérer plusieurs inclus avec le code ci-dessus?

Quelle est la bonne façon de gérer de nombreux inclus dans une page "principale" jsp?

Merci

+0

utilisez ajax pour ce faire. –

+0

En étudiant java et jsp, je dois utiliser Java pour apprendre! – MDP

+0

bien, OMI, la "bonne façon" d'utiliser dans JSP est d'ajouter du contenu statique répétitif comme les en-têtes et les pieds de page. Si vous souhaitez réutiliser des "composants" (en général, des formulaires), il est préférable de travailler avec taglibs. – Leo

Répondre

0

Je suppose:

  • vous avez des pages JSP
  • vous souhaitez inclure une page dans les autres pages (disons qu'il est le menu)
  • vous avez besoin des opérations dynamiques java pour contrôler la page incluse

Vous pouvez bien sûr inclure une servlet dans le menu jsp, mais au code de servlet ne devrait pas rediriger. Il définit simplement les attributs de requête et renvoie, pour laisser le jsp appelant faire sa partie.

Mais à mon humble avis vous ne devriez pas utiliser une servlet pour cela. S'il n'a besoin que d'une requête et d'une réponse initiales, vous devez utiliser un filtre qui a accès à la requête et à la réponse (et peut définir les attributs de requête qui seront utilisés dans toutes les servlets et jsp). Et dans tous les autres cas, vous pouvez accéder à des méthodes statiques d'une classe d'utilité, ou utilisez un ServletContextListener pour mettre un objet utilitaire dans le contexte de servlet attributs et de l'utiliser à partir de l'une de vos pages jsp:

<% UtilityClass.putMenuElementsIntoRequest(...); %> 

ou

<% application.getAttribute("utilityObject").putMenuElementsIntoRequest(...); %> 

ou même (disons Foo est l'un des String, List<String>, ...)

<% Foo foo = application.getAttribute("utilityObject").getFoo(...); 
    pageContext.setAttribute("foo", foo) %> 

et vous pouvez utiliser ${foo} dans votre fichier jsp. De cette façon, vous n'êtes pas limité à la méthode service et pouvez transmettre des objets arbitraires. Mais si vous voulez vraiment faire des choses sérieuses ...utiliser des frameworks comme Apache Tiles pour gérer la mise en page, Struts ou Spring MVC pour vos contrôleurs et cacher vos vues jsp sous WEB-INF ...

0

J'ai dû faire un projet où je devais faire la même chose !! ce que je suis venu avec: Vous pouvez charger un autre jsp dans votre jsp principal dans un "iframe". Maintenant, chaque fois que vous cliquez sur quelque chose dans le menu (un lien hypertexte comme <a href="">/<a>) définir la cible de ce lien hypertexte à ce iframe. Par exemple vous avez une option dans votre menu comme "Modifier le profil" et vous voulez d'abord appeler une servlet "EditProfileServlet" qui vous enverra à son tour la demande EditProfile.jsp qui affichera les choses nécessaires.

Pour cela, vous pouvez simplement utiliser ceci:

<a href="EditProfileServlet" target="right_iframe">Edit Profile</a> 

Ici, « right_iframe » est le cadre qui charge votre point de vue. A l'intérieur de la servlet, vous pouvez utiliser RequestDispatcher ou sendRedirect pour transmettre la requête au JSP requis.

Questions connexes