7
votes

Au printemps MVC, utilise-t-il "Redirection: processus" ou "redirection: / processus" diffère quant à la perte de la session ou de la session perdue?

Je ressens un comportement étrange dans la demande Spring MVC 3.2, et j'ai remarqué que cela ne se produit que lorsque la redirection est effectuée de manière alternative; Donc, mes questions sont:

  1. fait ' redirigation: / processus ' tout différent de ' Redirection: processus ' pour rediriger vers un contrôleur interne?

    La barre oblique ajoutée fait-elle une différence, telle que l'affectation de la manutention de la session?

  2. Quelles sont les raisons d'une session perdue (ou d'attributs de session perdues)?

    Il y a une valeur que j'ai lu via ma candidature; Même si je redirige dans de nombreux cas, quand j'ajoute un slash avant l'URI du contrôleur, sur la production je perd parfois cette valeur.

    Tout indice sur la façon de résoudre la valeur de la session perdue?

    Remarque: J'utilise des méthodes httpRequest.getsession (). setattribute et httpsession.getattribute pour accéder à la session.


5 commentaires

Trace de la pile ? Erreur? Code causant l'erreur?


Je reçois une nullpointerException en raison de la valeur que je vis de la session étant null. Cela se produit une douzaine de fois au cours de la journée.


Cela se produit dans une méthode d'obtention de contrôleur, lorsque je reviendrai (comme nom de vue) Value 'Rediriger: / Process'. Note, je ne peux pas reproduire cela localement.


Documentation de printemps : Un nom de vue logique telle que redirigation: / myApp / certains / ressource redirigera par rapport au contexte de servlet actuel, tandis qu'un nom tel que redirige: http: //myhost.com/ Certains / arbitraires / chemins se redirrent vers une URL absolue.


Dans la plupart des endroits de mon code, j'utilise "Redirection: processus" pour rediriger vers un autre contrôleur dans la même application, pas de barre oblique inverse, alors le ressort n'a pas vraiment de sens ici, surtout que l'ajout du backslash est apparemment causer des problèmes.


3 Réponses :


0
votes

Juste une note: / est une barre oblique backslash est \ .

Sauf pour les causes externes en raison d'autres erreurs, ni redirigation: processus non redirigation: / processus devrait changer quelque chose aussi longtemps que la session est concernée.

Mais ces 2 redirections sont non censées faire la même chose, sauf si vous êtes sur la page d'application racine. En supposant que votre application s'exécute sur le port HTTP 80 sur Server.Domain, avec un contexte de servlet de MyApp, et vous traitez une demande à http: //server.domain/myapp/local/parart , , < code> redirection: processus demanderait au navigateur de demander à http: //server.domain/myapp/local/parart/process , lorsque redirige: / processus serait Demandez au navigateur de demander http: //server.domain/myapp/process .

Que se passe-t-il suivant dépend de vos mappages de contrôleur.


3 commentaires

Ceci est terriblement bizarre alors. Je reçois une réponse sur un contrôleur URI ' domaine / app / résultat ', mais je fais "redirection: processus" Je frappe le contrôleur ayant des "processus" requisMapping (et non "résultat / processus"). Basé sur votre description, cela ne devrait pas être possible


La valeur @requestMapping est-elle pour le contrôleur "/Process.htm"? Si oui, avez-vous essayé d'utiliser "Rediriger: /Process.htm"?


Non, il n'y a pas de suffixe ".htm", j'accélère mon contrôleur correct, mais je perds des sessions, que je fasse "rediriger: processus" ou "rediriger: / proceess" c'est pareil.



1
votes

avec '/' Vous déclarez un chemin de root, qui est votre chemin de contexte servlet. Sans '/', il va généralement sur un chemin relativement sur votre sous-chemin actuel. Par exemple, si vous êtes chez '/ Go / URL', vous dirigez vers '/ Go / URL / Suivant', pas '/ Suivant'.

Je n'ai pas vérifié le code source du printemps, mais c'est comme ça que cela fonctionne dans le navigateur Web habituellement.

EDIT:

Je suis désolé, au printemps MVC, vous devez toujours fournir un chemin complet, pas seulement un chemin relatif. Donc, vous devriez faire "rediriger: / complet / chemin".


2 commentaires

Droite, et j'utilise un chemin à partir de '/' maintenant, tout bon. Cependant, je n'ai pas vu comment votre réponse est pertinente en ce qui concerne les sessions perdues.


Vous voulez probablement vérifier la valeur que vous définissez n'est pas nulle en premier lieu ...



0
votes

Vous voulez probablement analyser, ce qui cause les attributs de la session perdue. Une approche consisterait à mettre en œuvre votre propre httpessessattributelistener et connectez-vous Public Void Attributeremoved (HTTPSessionBindingEventVent) Mise en œuvre. Gardez également le niveau de journalisation du ressort pour déboguer.


1 commentaires

Merci, cependant, je ne peux pas utiliser de débogage sur la production, ce qui n'est pas encore reproduit localement. Je vais donc mettre en œuvre ce que vous avez mentionné et voyez ce qui se passe.