2016-12-25 1 views
0

Ich folgte ein Beispiel online, aber wenn ich die bestimmte Funktion request.getServletContext() verwenden. GetServletRegistrations(). Es erkennt nicht diese FunktionDer Typ getServletContext() ist nicht definiert für den Typ HttpServletRequest in einem Maven-Projekt für Eclipse

// Check the target of the request is a servlet? 
private boolean needJDBC(HttpServletRequest request) { 
    System.out.println("JDBC Filter"); 

    String servletPath = request.getServletPath(); 
    // => /abc/mnp 
    String pathInfo = request.getPathInfo(); 

    String urlPattern = servletPath; 

    if (pathInfo != null) { 
     // => /spath/* 
     urlPattern = servletPath + "/*"; 
    } 

    // Key: servletName. 
    // Value: ServletRegistration 

    Map<String, ? extends ServletRegistration> servletRegistrations = request.getServletContext() 
      .getServletRegistrations(); 

    // Collection of all servlet in your webapp. 
    Collection<? extends ServletRegistration> values = servletRegistrations.values(); 
    for (ServletRegistration sr : values) { 
     Collection<String> mappings = sr.getMappings(); 
     if (mappings.contains(urlPattern)) { 
      return true; 
     } 
    } 
    return false; 
} 

Wenn ich diese gleiche Funktion in einem normalen dynamischen Web-Projekt verwenden, funktioniert es ohne Fehler in Ordnung, aber mit Maven dieser gleichen Methoden sind nicht definiert. Ich habe versucht, die request.getServletContext() zu ändern. GetServletRegistrations();

bis request.getSession(). GetServletContext(). GetServletRegistrations();

Ich erkannte die getSession.getServletContext(), aber es erkennt dann nicht die getServletRegistrations(). Ich dachte, es könnte ein Problem Abhängigkeiten so habe ich mehrere Abhängigkeiten zu meinem pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>com.ers</groupId> 
<artifactId>ERSProject</artifactId> 
<packaging>war</packaging> 
<version>0.0.1-SNAPSHOT</version> 
<name>ERSProject Maven Webapp</name> 
<url>http://maven.apache.org</url> 


<repositories> 
    <!-- Repository for ORACLE ojdbc6. --> 
    <repository> 
     <id>codelds</id> 
     <url>https://code.lds.org/nexus/content/groups/main-repo</url> 
    </repository> 
</repositories> 



<dependencies> 

    <!-- Oracle database driver --> 
    <dependency> 
     <groupId>com.oracle</groupId> 
     <artifactId>ojdbc6</artifactId> 
     <version>11.2.0.3</version> 
    </dependency> 

    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/org.glassfish.web/javax.servlet.jsp.jstl --> 
    <dependency> 
     <groupId>org.glassfish.web</groupId> 
     <artifactId>javax.servlet.jsp.jstl</artifactId> 
     <version>1.2.5-b03</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api --> 
    <dependency> 
     <groupId>javax.servlet.jsp.jstl</groupId> 
     <artifactId>javax.servlet.jsp.jstl-api</artifactId> 
     <version>1.2.1</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.0.1</version> 
     <scope>provided</scope> 
    </dependency> 

</dependencies> 
<build> 
    <finalName>ERSProject</finalName> 
</build> 

Jede Hilfe wäre sehr geschätzt habe. Danke.

+0

Einfach halten diese javax.servlet-api auf Ihrer pom.xml. Und achten Sie darauf, dass sich Ihre pom.xml an der richtigen Stelle im Hauptprojektordner befindet. Geben Sie den Befehl mvn clean install ein und überprüfen Sie die Protokolle, die erfolgreich installiert wurden, und überprüfen Sie dann, ob Ihr .m2-Ordner javax.servlet-api jar existiert. Wenn alles in Ordnung ist, müssen Sie sicherstellen, dass es einen Pfadkonflikt zwischen Maven und Eclipse gibt. – erhun

+0

Überprüfen Sie diese Antwort https://stackoverflow.com/questions/29314336/how-to-figure-out-wy-certain-javax-servlet-dependency-is-added-to-a-maven-proje –

Antwort

1

REPLACE

< dependency>
< groupId> javax.servlet </groupId>
< artifactId> javax.servlet-api </artifactId>
< Version> 3.0.1 </version>
< scope> bereitgestellt </scope>
</Abhängigkeit>
mit

< dependency>
< groupId> org.mortbay.jetty </groupId>
< artifactId> Servlet-api </artifactId>
< version> 3.0.20100224 </version>
</dependency>



hoffen, dass es

arbeiten ** ** DIfferenct zwischen org.mortbay.jetty: servlet-api-2.5: 6.1.5 und javax.servlet.jsp: servlet-api: 2.1 ****

Jetty hat eine lange und bunte Geschichte mit Jsp, mit keine eigene jsp-implementierung Wir haben oft andere Implementierungen genutzt, nach den Versionsnummern zu urteilen, sind diese sehr alte Versionen, in denen wir Patches zusätzlich zur jSP-Implementierung von glassfish pflegen. Ich denke, es war ein Patch zur Unterstützung der Anmeldung an der Anlegestelle und dann ein Bugfix oder drei.

Jetzt haben wir die jsp-Artefakte aus dem Projekt java.net benutzt, das vor einiger Zeit aus Glassfish herausgesponnen wurde. Allerdings scheint das nicht, Bugfixes sehr regelmäßig zu verfolgen, so dass wir versuchen, versuchen die Jaspis-Implementierung in Tomcat.

Zurück zu Ihrer Frage, die JSP-API Artefakte sind in der Regel nur neu verpackt Artefakte, da die API nicht häufig ändert.Wir haben sie historisch neu gebündelt, um sie mit der gepatchten Implementierung zu verbinden.

Jetzt verwenden Sie offensichtlich eine Jetty-6-Setup, da Sie immer noch org.mortbay Verpackung, aber Jetty6 und Jetty7 sind beide Servlet-Api-2.5, so dass Sie in der Lage sein, mit der Verwendung der Jetty7 Jsp Setup, haben wir ein handliches pom, die diese Artefakte hier erklärt:

http://central.maven.org/maven2/org/eclipse/jetty/jetty-jsp/7.6.5.v20120716/jetty-jsp-7.6.5.v20120716.pom

Glassfish-Bundles auch diese sind, neu verpackt und in OSGi-Bundles in dem Verfahren hergestellt, so dass sie mit Steg in OSGi-Umgebungen verwendet werden .... sie sollen um normal zu arbeiten, verpacken wir sie in unseren jetty7 Distributionen. @ Toby Speight

+0

Während dieser Codeausschnitt ist willkommen, und könnte helfen, es wäre [stark verbessert, wenn es eine Erklärung enthielt] (// meta.stackexchange.com/q/114762) von * wie * und * warum * das löst das Problem. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, nicht nur die Person, die jetzt fragt! Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –

Verwandte Themen