webentwicklung-frage-antwort-db.com.de

request.getServletContext () nicht gefunden, auch bei neuem JAR

Mein Compiler kann das nicht finden HttpServletRequest getServletContext () Methode. 

Ich mache nichts zu kompliziertes:

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

Einige Fehlerbehebungen habe ich ausprobiert:

  • Die Methode wurde in 2.3 erstellt. Daher habe ich ein JAR hinzugefügt, das dies widerspiegelt (und in meinem Eclipse-Erstellungspfad enthalten).
  • Ich füge die JAR in meinen build.xml classpath ein.

Wenn ich Eclipse verwende, wurde die Methode gefunden, aber wenn ich versuche, die Klassen zu erstellen, sehe ich Folgendes:

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

Irgendwelche Ideen, was ich vermissen könnte? Ich freue mich über jede Antwort.

15
Dave Brock

Entsprechend der Javadoc - Methode wird ServletRequest#getServletContext() in Servlet 3.0 eingeführt, nicht in 2.3. Sie müssen einen mit Servlet 3.0 kompatiblen Container wie Tomcat 7 , Glassfish 3 usw. in Eclipse installieren und integrieren und den Target Runtime Ihres Dynamic Web Project auf diesen Container setzen. Wenn Sie das richtig machen, müssen Sie nicht manuell mit Buildpfaden oder build.xml arbeiten, Eclipse wird das automatisch für Sie erledigen. not Sie müssen auch lose JAR-Dateien eines beliebigen Servletcontainers eines anderen Herstellers/einer anderen Version herunterladen und in Ihrem Buildpfad ablegen. Dies würde nur zu zukünftigen Klassenpfad- und Übertragbarkeitsproblemen führen.

Siehe auch:

17
BalusC

Die getServletContext()-Methode wird in Servlet 3.0 eingeführt, nicht in 2.3. Wenn Sie jedoch die Variable ServletContext erhalten möchten, ist eine alternative Methode:

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

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

Auf diese Weise können Sie den gespeicherten Anforderungsparameterwert in verschiedenen Browsern abrufen.

26
Neha Velhal

Ich hatte in letzter Zeit die gleichen Schwierigkeiten. Tatsächlich begann es, nachdem ein paar neue Gläser hinzugefügt wurden. Ant fand die HttpServletRequest-Klasse in Selenium-server.jar, die alphabetisch vor servlet-api.jar (die verwendet werden sollte) steht. Also habe ich Selenium-server.jar in x-Selenium-server umbenannt. Glas und alles fing an, OK zu bauen, wie früher.

1
Vitalii

Dies ist kein Problem mit Ihrem Java-Compiler. javax wird vom Servlet-Container selbst bereitgestellt, und Sie müssen Servlet-Container-JAR-Dateien in Ihr Projekt-Setup aufnehmen.

javax.servlet.http und die Servlet-Kontext- und Servlet-Programmierung aller Klassen beziehen sich nur auf Ihren Servlet-Container. Hören Sie also auf, sich über irgendetwas anderes Sorgen zu machen, und prüfen Sie, ob Tomcat-Bibliotheken in Ihren WEB-APP-Klassenpfad aufgenommen werden.

Wenn nicht, fügen Sie sie hinzu und alles wird gut.

Klicken Sie mit der rechten Maustaste auf Ihr Projekt> Eigenschaften> Bibliotheken hinzufügen> Server-Laufzeit

und wählen Sie Ihren Server, der Ihrer Anwendung zugeordnet ist.

Wenn Sie damit fertig sind, werden Servlet Container-Bibliotheken in Ihr Projekt aufgenommen, und die Klassen HttpServletRequest und HttpServletResponse werden aufgelöst.

Hoffe, es hilft, weitere Informationen zur Servlet-Architektur und zum Kontext finden Sie hier .

0
neel4soft