2009-03-05 5 views
21

J'ai eu quelques problèmes avec ActionMessages créé lors de l'exécution d'une action qui ne s'affichait pas, et j'ai découvert que mes problèmes étaient dus à mes avants ayant redirect=true dans struts-config.xml.Pourquoi utiliser 'redirect = true' dans struts 1. * forward?

Depuis le comportement par défaut est redirect=false, j'ai réfléchi à quels avantages peut-on utiliser redirect=true et je n'ai pas trouvé de réponse. Est-ce que quelqu'un sait quand et pourquoi redirect=true devrait être utilisé dans l'action vers l'avant?

Répondre

31

il empêche la 'double soumettre problème'

Ne jamais afficher les pages en réponse à POST

pages de charge Toujours à l'aide de GET

naviguer à partir de POST GET en utilisant REDIRECT

plus sur ce here et here

24

La redirection envoie une réponse au navigateur qui force le navigateur à faire une nouvelle demande. Du point de vue du serveur, le navigateur effectue une nouvelle requête (même si elle est automatique). Quelques caractéristiques d'un redirect:

  • Les paramètres existants et attributs sont disposés, une nouvelle demande est formée avec les paramètres que vous spécifiez dans l'URL.
  • La nouvelle URL est visible dans le navigateur, l'utilisateur peut le marquer comme signet.
  • Il faut un voyage à le navigateur et retour, de sorte qu'il peut être plus lent.

Un forward se produit sur le serveur. Le navigateur n'est pas impliqué dans cela. Certaines caractéristiques de l'attaquant:

  • De nouveaux paramètres sont ajoutés ou remplacent les paramètres existants. Les paramètres existants ne peuvent donc pas être supprimés de la demande.
  • Des choses peuvent être ajoutées dans le contexte de la requête, elles resteront disponibles. Vous pouvez transmettre des informations de cette manière.
  • L'URL n'est pas modifiée dans le navigateur, pour le navigateur l'adresse d'origine reste intacte.
  • Vous ne pouvez transférer vers une autre URL que dans la même application.

Cela dépend de ce que vous voulez accomplir. Un attaquant est généralement parlé plus rapidement. Mais si l'utilisateur doit pouvoir mettre en signet le nouvel emplacement, ce n'est pas une option.

0

Si vous spécifiez redirect="true", Struts utilise une redirection côté client [response.sendRedirect()]. La JSP sera invoquée par une nouvelle requête du navigateur et toutes les données stockées dans l'ancienne requête seront perdues.