3

タスクを完了するサーブレットを作成しました。最初にサーブレットを呼び出した JSP をリロードします。サーブレットはenctype='multipart/form-data'JSP を実行します。この JSP は Uploadtest と呼ばれ、取得した次のコードのいずれかを実行しようとするたびにThe requested resource (/project_name/WebContent/jsps/new.jsp) is not available.

私が試してみました:

response.sendRedirect("/WebContent/jsp/Uploadtest.jsp");

getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward   (request, response); 

ただし、これらの両方で、探しているページが見つからないというエラーが発生しました。

これを修正する方法について何かアイデアを探していますか?

ありがとうございました

4

2 に答える 2

3

プロジェクト内のソースのレイアウト、デプロイされた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アプリケーションのコンテキストパスがである場合、/fooJSPのブラウザのアドレスバーに入力する必要のあるパスは次のようになります。

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ハードコーディングせずに取得するために使用されます。

于 2012-06-25T14:19:14.003 に答える
0

あなたの問題は、 app の構造と request url pathの仕様に関するものだと思います。

最初に指摘したいのは、'WebContent' が Eclipse の仮想フォルダーであることです。したがって、リクエストまたはリダイレクトパスでそれを使用しないでください。

2番目に、アプリへの絶対パスを使用したが、コーディングが間違っていたと思います:

  1. 入力について少し間違いがあります:

http://localhost:8080/foo/jsp/Uploadtest.jsp

説明に従って、次のように入力する必要があります。

http://localhost:8080/foo/jsps/Uploadtest.jsp

2.

getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward   (request, response); 

次のように、コンテキスト パスを転送 URL に追加する必要があります。

request.getContextPath() + "jsps/Uploadtest.jsp"
于 2013-01-07T13:15:35.117 に答える