10
votes

Obtenir l'objet de la session actuelle en Java

puis-je accéder à l'objet de session de l'intérieur d'une fonction où la demande d'objet n'est pas présente?

Je sais en Java Nous accédons à une session comme celle-ci: p>

public class ABC extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
             ..........
             ...........
        myFun1(x,y,z);  
    }

      private void myFun1(int x, int y,long z)
      {
            .........
            myFun2(a,b);    
       }

      private void myFun2(int a,String b)
      {
            .........

            //      Need Session here
       }

}


2 commentaires

Si vous n'avez pas la demande particulière, comment sauriez-vous quelle session pour obtenir? Il pourrait y avoir plusieurs sessions en direct dans le processus.


Merci, je vais passer l'objet de la demande aux fonctions de paramètre supplémentaire.


5 Réponses :


6
votes

Cela dépend de ce que vous entendez par "lorsque la demande d'objet n'est pas présent". Vous pourrait avoir une variable de fil-thread-local qui définit la "demande de courant de ce fil" tôt dans le servlet ou quoi que ce soit à l'exécution (vous n'avez pas fait clairement). Ensuite, vous pourriez obtenir sur "la demande actuelle dans ce fil" de n'importe où et obtenez la session de cette façon. (Ou le long des mêmes lignes, vous pouvez définir la session actuelle au lieu de la requête actuelle dans la variable de thread-local.)

Ce n'est pas terriblement joli cependant, et vous avez des problèmes si vous voulez faire quelque chose sur un fil différent. Passer la demande ou la session sous forme de dépendance est généralement plus propre.


0 commentaires

1
votes

L'objet de demande de passage est la solution,

public class ABC extends HttpServlet
{
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
             ..........
             ...........
        myFun1(x,y,z,req);  
    }

      private void myFun1(int x, int y,long z,HttpServletRequest req)
      {
            .........
            myFun2(a,b,req);    
       }

      private void myFun2(int a,String b,HttpServletRequest req)
      {
            .........

            //      Need Session here
       }

}


0 commentaires

6
votes

En règle générale, si vous souhaitez accéder à la session HTTP à partir d'un endroit où l'objet de la demande n'est pas disponible, vous pouvez avoir des problèmes de conception dans votre application et vous devez repenser les préoccupations, la superposition, etc.


0 commentaires

1
votes

Si vous implémentez Technologie JSF dans votre application, vous pouvez tout accéder en appelant; xxx

car il s'agit d'une instance Singleton récupérée, vous pouvez y accéder n'importe où dans votre couche de présentation.

Toutefois, la mise en œuvre de la JSF est probablement légèrement excédant à cet effet que vous Il suffira probablement de faire beaucoup de changements dans vos couches de configuration et de présentation à l'adapter à celle-ci.

Cela dit, si vous décidez de descendre cette route, vous pouvez également penser à utiliser MyFaces , qui est une API fantastique pour ceux utilisant JSF dans leurs applications.


2 commentaires

Cela ne renvoie pas un singleton. Il renvoie une référence de lignes filtrantes.


Merci Balus, j'essayais de garder cela simple mais vous avez totalement raison.



0
votes

Nous devons configurer un auditeur de type httpsandlistener Sa méthode sera appelée au temps de création de session et au temps de distraction. Si vous utilisez cela en préparant l'objet de cette classe, vous pouvez obtenir l'objet de session simplement ...


1 commentaires

Je reçois un gigle de «temps de distraction».