2016-12-25 42 views
0

例をオンラインにしていましたが、特定の関数request.getServletContext()。getServletRegistrations()を使用していました。私はそれがエラーなしで正常に動作しますが、使用してMavenのは、これらの同じメソッドが定義されていない通常の動的Webプロジェクトでこれと同じ機能を使用する場合は、この機能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

この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>サーブレットAPI < /たartifactId>
<バージョン> 3.0.20100224 < /バージョン>
<と/依存関係>



はそれが

を働くことを願っています** ** org.mortbay.jetty:サーブレット-api-2.5:6.1.5およびjavax.servlet.jsp:サーブレット-api:2.1 ****

の間のダイヤルは、jspで長い歴史を持ち、私たちが独自に実装したものはありません。他の実装を頻繁に利用しています。バージョン番号で判断すると、glassfish JSP実装の上にパッチを維持していた非常に古いバージョンです。私はそれが桟橋の伐採をサポートするためのパッチであったと思います。

今、私たちはglassfishから紡ぎ出されたjava.netプロジェクトのjsp成果物を使用しています。しかし、これは非常に定期的にバグ修正を追跡しているようには見えないので、私たちはtomcatでジャスパーの実装を試みている。

あなたの質問に戻ると、jsp-api成果物は通常apiが頻繁に変更されないため、再パッケージ化された成果物です。私たちは歴史的にそれらを再構築してパッチ適用された実装とペアにしました。

今では、まだorg.mortbayパッケージを使用しているので、jetty-6セットアップを使用していますが、jetty6とjetty7は両方ともservlet-api 2.5ですので、jetty7 JSPセットアップを使用してもらうことができます。ここではこれらのアーティファクトを宣言便利なポンポン: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 *と* * *これが問題を解決するのは、(説明があれば大幅に改善されます)(// meta.stackexchange.com/q/114762)でしょう。あなたが今質問している人だけでなく、将来読者のための質問に答えていることを忘れないでください!説明を追加するためにあなたの答えを[編集]し、どんな制限と前提が適用されるかを示してください。 –

関連する問題