私のコンパイラは見つけることができません HttpServletRequest getServletContext() 方法。
私はあまり複雑なことはしていません:
public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set)
{
setMySortedSet(request.getServletContext(), set);
}
私が試したいくつかのトラブルシューティング:
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
私が見逃している可能性のあるアイデアはありますか?どんな反応もありがたいです。
Javadoc によると、ServletRequest#getServletContext()
メソッドは2.3ではなくServlet 3.0で導入されています。 Tomcat 7 、 Glassfish などのServlet 3.0互換コンテナをEclipseにインストールして統合し、Target Runtime動的Webプロジェクトのそのコンテナーに。それを適切に行うと、しないビルドパスまたはbuild.xml
まったく、Eclipseが自動的に処理します。また、別のmake/versionの任意のservletcontainerの緩いJARファイルをダウンロードして、ビルドパスに置く必要がない必要はありません。それは将来のクラスパスと移植性の問題につながるだけです。
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"));
このようにして、保存されているリクエストパラメータ値を別のブラウザで取得できます。
最近同じ問題を抱えています。実際には、いくつかの新しいjarを追加した後に発生し始めました。 AntはSelenium-server.jarでHttpServletRequestクラスを見つけました。このクラスは、アルファベット順でservlet-api.jar(使用されるはずでした)の前に来ます。そのため、Selenium-server.jarの名前をx-Selenium-server.jarに変更すると、以前と同じようにすべてが正常に構築され始めました。
これは、Javaコンパイラの問題ではありません。javaxはサーブレットコンテナ自体によって提供されるため、プロジェクトセットアップにサーブレットコンテナのjarファイルを含める必要があります。
javax.servlet.http、およびサーブレットコンテキストとサーブレットプログラミングに関連するすべてのクラスは、サーブレットコンテナにのみ関連しています。したがって、他のことについて心配するのをやめて、TomcatライブラリがWEB-APPクラスパスに含まれているかどうかを確認してください。
そうでなければそれらを追加し、すべてがうまくいくでしょう。
プロジェクトを右クリック>プロパティ>ライブラリを追加>サーバーランタイム
アプリケーションに関連付けられているサーバーを選択します。
これでプロジェクトにサーブレットコンテナライブラリが含まれ、HttpServletRequestおよびHttpServletResponseクラスが解決されます。
それがお役に立てば幸いです。サーブレットのアーキテクチャとコンテキストに関する詳細情報が見つかります ここ