プロジェクト内のソースのレイアウト、デプロイされたWebアプリのレイアウト、およびサーバー内のアプリケーションのレイアウトの違いを本当に理解する必要があります。
デプロイされたWebアプリの構造は次のとおりです。
jsps
Uploadtest.jsp
WEB-INF
classes
the compiled classes of your application
lib
the jars of your application
デプロイされたアプリにWebContentディレクトリが存在しません。これは、EclipseがWebアプリ関連のソース(JSPファイル、画像など)を格納する場所です。
各Webアプリにはコンテキストパスがあります。Webアプリケーションのコンテキストパスがである場合、/foo
JSPのブラウザのアドレスバーに入力する必要のあるパスは次のようになります。
http://localhost:8080/foo/jsps/Uploadtest.jsp
別のリソースに転送すると、常に同じWebアプリケーションのリソースに転送されます。したがって、コンテキストパスを指定する必要はありません。
getServletContext().getRequestDispatcher("/jsps/Uploadtest.jsp").forward (request, response);
リダイレクトする場合(転送とは完全に異なります)、任意のURL(同じWebアプリ、同じホスト上の別のWebアプリ、または必要に応じてwww.google.com)にリダイレクトできます。同じWebアプリケーションのリソースにリダイレクトする場合、http://localhost:8080
パーツを送信する必要はありませんが、Webアプリケーションのリソースパスに続くコンテキストパスを送信する必要があります。また、encodeRedirectURLメソッドを常に使用する必要があります(ただし、セッション管理のためにCookieではなくURL書き換えに依存しているユーザーを気にしません):
String redirect =
response.encodeRedirectURL(request.getContextPath() + "/jsps/Uploadtest.jsp");
response.sendRedirect(redirect);
request.getContextPath()
/foo
ハードコーディングせずに取得するために使用されます。