1

私は持っている

root/logged/form.jsp
root/servlet
root/logged/form.jsp

logged/form.jsp私はフォームをサーブレットに送信するjspページを持っていますaction="../update"。今、私はいくつかのパラメーターを追加してリクエストに転送したいのですが、それlogged/form.jspが機能せず、ルートコンテキストでのみ form.jsp を表示していますroot/servlet。リクエストをどの URL に転送すればよいか教えてください。リクエストオブジェクトを保持する必要があるため、 sendRedirect を使用できません。

サーブレットでforward logged/form.jsp( ) と forward( /logged/form.jsp) とforward( )を試してみました/form.jsp

4

3 に答える 3

0

コンテキスト ルートからの相対パスとして解釈される絶対パス ( / で始まる) を常に使用してみてください。

于 2009-11-18T17:47:13.727 に答える
0

/logged/form.jspが正しいはずです。appserver ログを読むことをお勧めします。IllegalStateException: response already committed中身がある可能性大。

待って、待って、あなたの実際の問題は、訪問者がアドレスバーに表示する URL を変更したいということですか?

もしそうなら、いいえ、それはフォワードでは不可能です。次に、反対側から問題を解決することをお勧めします。フォルダに「隠す」だけform.jspで、/WEB-INF常にサーブレットを使用してフォームを取得/投稿します。

擬似:

protected void doGet(request, response) {
    request.getRequestDispatcher("/WEB-INF/logged/form.jsp").forward(request, response);
}

protected void doPost(request, response) {
    doYourSubmitThingHere();
    request.getRequestDispatcher("/WEB-INF/logged/form.jsp").forward(request, response);
}

このサーブレットをurl-patternof/logged/formにマップし、 by を置き換えると、<form method="post" action="/servlet">by<form method="post" action="/logged/form">で使用/呼び出すことができますhttp://example.com/logged/form

また、ページ コントローラー パターンを採用しHttpServletRequest#getPathInfo()てリクエスト パス (および JSP ファイルのパス) を取得することで、さらに一歩進んで、JSP ごとに新しいサーブレットを作成する必要がないようにすることもできます。

于 2009-11-18T18:47:08.583 に答える