2016-12-25 87 views
0

我在線時使用了一個示例,但是當使用某個函數request.getServletContext()。getServletRegistrations()時。當我使用同樣的功能,在常規的動態Web項目,它工作正常,沒有錯誤,但使用maven這些相同的方法是不確定它不承認這個功能類型getServletContext()未定義爲Eclipse的Maven項目中的HttpServletRequest類型

// 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; 
} 

。我試圖改變 request.getServletContext()。getServletRegistrations();

到 request.getSession()。getServletContext()。getServletRegistrations();

我認識到getSession.getServletContext(),但它不承認getServletRegistrations()。我想這可能已經是一個依賴問題,所以我增加了一些依賴於我的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> 

任何幫助將不勝感激。謝謝。

+0

Just hold這個javax.servlet-api在你的pom.xml中。並確保您的pom.xml位於主項目文件夾下的正確位置。輸入mvn clean install命令並檢查安裝成功的日誌,然後檢查.m2文件夾是否存在javax.servlet-api jar。如果一切正常,你必須確定maven和eclipse之間是否存在任何路徑衝突。 – erhun

+0

檢查此答案https://stackoverflow.com/questions/29314336/how-to-figure-out-why-certain-javax-servlet-dependency-is-added-to-a-maven-proje –

回答

1

REPLACE

<依賴性>
< 的groupId>的javax.servlet < /的groupId>
< 的artifactId>的javax.servlet-API </artifactId的>
< 版本> 3.0.1 < /版本>
<範圍>提供< /範圍>
< /依賴項>


< 依賴性>
< 的groupId> org.mortbay.jetty < /的groupId>
< 的artifactId> servlet的API </artifactId的>
< 版本> 3.0.20100224 < /版本>
< /依賴>



希望它會工作

** ** orf.mortbay.jetty之間的差異:servlet-api-2.5:6.1.5和javax.servlet.jsp:servlet-api:2.1 ****

Jetty擁有jsp的悠久豐富的歷史,擁有沒有我們自己的jsp實現,我們經常利用其他實現,根據版本號來判斷,你看那些是非常舊的版本,我們在glassfish jsp實現上維護補丁。我認爲這是一個補丁,用於支持碼頭的日誌記錄,然後是一個錯誤修復或三個錯誤修復。

現在有一天,我們一直在使用java.net項目中的jsp構件,這個項目是從glassfish中分離出來的。但是,這似乎並沒有非常規律地跟蹤bug修復,所以我們正在嘗試使用tomcat中的jasper實現。

回到你的問題,jsp-api工件通常只是重新打包的工件,因爲api不會頻繁更改。我們歷史上已將他們重新捆綁,以使其與補丁實施配對。

現在,您明顯在使用jetty-6設置,因爲您仍然使用org.mortbay包裝,但jetty6和jetty7都是servlet-api 2.5,所以您可能可以使用jetty7 jsp設置脫身,一個方便的POM,在這裏聲明,這些文物:

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

這些都是爲好,重新包裝並製作成的過程中OSGi包,以便他們能夠在碼頭OSGi的環境中使用的GlassFish捆綁....他們應該我們將它們打包在我們的jetty7發行版中。@ Toby Speight

+0

雖然此代碼片段是受歡迎的,並且可以提供一些幫助,如果它包含* how *和* why *解釋問題的解釋](// meta.stackexchange.com/q/114762)將會[大大改進]。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 –

相關問題