web-dev-qa-db-fra.com

request.getServletContext () introuvable, même avec le nouveau JAR

Mon compilateur n'est pas capable de trouver le HttpServletRequest getServletContext () méthode. 

Je ne fais rien de trop compliqué:

public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set) 
{
   setMySortedSet(request.getServletContext(), set);
}

Quelques dépannage que j'ai essayés:

  • A découvert que la méthode avait été créée dans la version 2.3, j'ai donc inclus un fichier JAR reflétant cette opération (et l'inclure dans mon chemin de génération Eclipse).
  • J'inclus le fichier JAR dans mon build.xml classpath.

Quand j'utilise Eclipse, la méthode est trouvée mais quand j'essaye de construire les classes, je vois ceci:

compile:
[javac] Compiling 1 source files to C:\...\workspace\proj\build\WEB-INF\classes
[javac] C:\...\workspace\proj\src\main\Helper.Java:26: cannot find symbol
[javac] symbol  : method getServletContext()
[javac] location: interface javax.servlet.http.HttpServletRequest
[javac]     return getURISet(request.getServletContext());
[javac]                       ^
[javac] Note: C:\...\workspace\proj\src\main\Helper.Java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error

Des idées sur ce que je pourrais manquer? J'apprécie toutes les réponses.

15
Dave Brock

Selon la méthode Javadoc , la méthode ServletRequest#getServletContext() est introduite dans Servlet 3.0 et non dans 2.3. Vous devez installer et intégrer un conteneur compatible Servlet 3.0 tel que Tomcat 7 , Glassfish 3 , etc. dans Eclipse et définissez le Target Runtime de votre projet Web dynamique sur ce conteneur. Lorsque vous le faites correctement, vous devez pas avoir besoin de manipuler manuellement les chemins de construction ou build.xml, Eclipse le gérera automatiquement. Vous devez également not télécharger les fichiers JAR en vrac d’un conteneur de servlet arbitraire d’une autre marque/version et les placer dans votre chemin de construction. Cela ne conduirait qu'à de futurs problèmes de classpath et de portabilité.

Voir également:

17
BalusC

La méthode getServletContext() est introduite dans Servlet 3.0, pas 2.3. Mais si vous voulez obtenir la ServletContext, une autre méthode pour l'obtenir est la suivante:

ServletContext context = request.getSession().getServletContext();

if (username != "" & username != null ) {
    context.setAttribute("savedUserName", username);
}
writer.println("Context Parameter : " + (String)context.getAttribute("savedUserName"));

De cette façon, vous pouvez obtenir la valeur de paramètre de demande stockée dans un navigateur différent ....

26
Neha Velhal

J'ai eu le même problème récemment. En fait, cela a commencé après l’ajout de nouveaux pots. Ant a trouvé la classe HttpServletRequest dans Selenium-server.jar, qui vient par ordre alphabétique avant servlet-api.jar (qui était censée être utilisée). J'ai donc renommé Selenium-server.jar en x-Selenium-server. jar et tout a commencé à construire OK, comme il le faisait auparavant.

1
Vitalii

Ce n'est pas un problème avec votre compilateur Java. javax est fourni par le conteneur servlet lui-même et vous devez inclure les fichiers jar du conteneur servlet dans la configuration de votre projet.

javax.servlet.http et toutes les classes liées au contexte de servlet et à la programmation de servlet sont liés à votre conteneur de servlet uniquement. Alors, arrêtez de vous inquiéter pour rien d’autre et vérifiez si les bibliothèques Tomcat sont incluses dans votre chemin de classe WEB-APP.

Sinon ajoutez-les et tout ira bien.

Clic droit sur votre projet> Propriétés> Ajouter des bibliothèques> Runtime du serveur

et choisissez votre serveur associé à votre application.

Vous avez terminé, cela inclura les bibliothèques de conteneur Servlet dans votre projet et les classes HttpServletRequest & HttpServletResponse seront résolues.

J'espère que cela vous aidera, vous trouverez plus d'informations sur l'architecture de servlet et le contexte ici.

0
neel4soft