Pourquoi
getRequestDispatcher (chemin de chaîne) de l'interface ServletRequest ne peut pas s'étendre en dehors de la servlet actuelle le contexte
tandis que
getRequestDispatcher (chemin de chaîne) de le ServletContext peut utiliser le Méthode getContext (String uripath) à obtenir RequestDispatcher pour les ressources dans des contextes étrangers.
et comment??
S'il vous plaît aider
Si vous utilisez un chemin absolu tel que ("/index.jsp"
), il n'y a pas de différence.
Si vous utilisez un chemin relatif, vous devez utiliser HttpServletRequest.getRequestDispatcher()
. ServletContext.getRequestDispatcher()
ne le permet pas.
Par exemple, si vous recevez votre demande le http://example.com/myapp/subdir
,
RequestDispatcher dispatcher =
request.getRequestDispatcher("index.jsp");
dispatcher.forward( request, response );
Transférer la demande à la page http://example.com/myapp/subdir/index.jsp
.
Dans tous les cas, vous ne pouvez pas transférer la demande à une ressource en dehors du contexte.
La méthode de requête getRequestDispatcher()
peut être utilisée pour faire référence à des servlets locales dans une application Web unique.
La méthode getRequestDispatcher()
basée sur le contexte de servlet peut être utilisée pour faire référence à des servlets d'autres applications Web déployées surMÊMEserveur.
request.getRequestDispatcher («url») signifie que la répartition est relative à la requête HTTP actuelle. Cela signifie que vous souhaitez chaîner deux servlets avec la même application Web Exemple
RequestDispatcher reqDispObj = request.getRequestDispatcher("/home.jsp");
getServletContext (). getRequestDispatcher («url») signifie que la répartition est relative à la racine du ServletContext.Means cela permet de chaîner deux applications Web avec le même serveur/deux serveurs différents
Exemple
RequestDispatcher reqDispObj = getServletContext().getRequestDispatcher("/ContextRoot/home.jsp");
Le contexte est stocké au niveau de l'application, où as request est stocké au niveau de la page, c'est-à-dire
Le conteneur Web appelle les applications une à une et les exécute dans sa machine virtuelle Java. Il stocke un objet singleton dans son jvm où il enregistre tous les objets qui y sont placés. Ce singleton est partagé par toutes les applications qui y sont exécutées, car il est stocké dans la JVM du conteneur.
Cependant, pour les requêtes, le conteneur crée un objet de requête qui est rempli avec les données de requête et est transmis d’un thread à l’autre (chaque thread est une nouvelle requête arrivant sur le serveur). La requête est également transmise aux même application.
Je pense que votre première question est simplement une question de portée. ServletContext est un objet couvert beaucoup plus large (tout le contexte de servlet) qu'un ServletRequest, qui est simplement une requête unique. Vous pouvez vous reporter à la spécification Servlet elle-même pour obtenir des informations plus détaillées.
Pour ce qui est de savoir comment, je suis désolé mais je devrai laisser cela aux autres de répondre à ce moment.