web-dev-qa-db-ja.com

新しいJARを使用しても、request.getServletContext()が見つかりません

私のコンパイラは見つけることができません HttpServletRequest getServletContext() 方法。

私はあまり複雑なことはしていません:

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

私が試したいくつかのトラブルシューティング:

  • メソッドが2.3で作成されたことを発見したので、それを反映するJARを含めました(そしてそれを私のEclipseビルドパスに入れました)
  • build.xmlクラスパスにJARを含めます。

Eclipseを使用するとメソッドが見つかりますが、クラスを構築しようとすると次のようになります。

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

私が見逃している可能性のあるアイデアはありますか?どんな反応もありがたいです。

15
Dave Brock

Javadoc によると、ServletRequest#getServletContext()メソッドは2.3ではなくServlet 3.0で導入されています。 Tomcat 7Glassfish などのServlet 3.0互換コンテナをEclipseにインストールして統合し、Target Runtime動的Webプロジェクトのそのコンテナーに。それを適切に行うと、しないビルドパスまたはbuild.xmlまったく、Eclipseが自動的に処理します。また、別のmake/versionの任意のservletcontainerの緩いJARファイルをダウンロードして、ビルドパスに置く必要がない必要はありません。それは将来のクラスパスと移植性の問題につながるだけです。

以下も参照してください。

17
BalusC

getServletContext()メソッドは、2.3ではなくServlet 3.0で導入されました。しかし、ServletContextを取得したい場合、それを取得する別の方法は次のとおりです。

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

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

このようにして、保存されているリクエストパラメータ値を別のブラウザで取得できます。

26
Neha Velhal

最近同じ問題を抱えています。実際には、いくつかの新しいjarを追加した後に発生し始めました。 AntはSelenium-server.jarでHttpServletRequestクラスを見つけました。このクラスは、アルファベット順でservlet-api.jar(使用されるはずでした)の前に来ます。そのため、Selenium-server.jarの名前をx-Selenium-server.jarに変更すると、以前と同じようにすべてが正常に構築され始めました。

1
Vitalii

これは、Javaコンパイラの問題ではありません。javaxはサーブレットコンテナ自体によって提供されるため、プロジェクトセットアップにサーブレットコンテナのjarファイルを含める必要があります。

javax.servlet.http、およびサーブレットコンテキストとサーブレットプログラミングに関連するすべてのクラスは、サーブレットコンテナにのみ関連しています。したがって、他のことについて心配するのをやめて、TomcatライブラリがWEB-APPクラスパスに含まれているかどうかを確認してください。

そうでなければそれらを追加し、すべてがうまくいくでしょう。

プロジェクトを右クリック>プロパティ>ライブラリを追加>サーバーランタイム

アプリケーションに関連付けられているサーバーを選択します。

これでプロジェクトにサーブレットコンテナライブラリが含まれ、HttpServletRequestおよびHttpServletResponseクラスが解決されます。

それがお役に立てば幸いです。サーブレットのアーキテクチャとコンテキストに関する詳細情報が見つかります ここ

0
neel4soft