2017-06-13 2 views
0

この質問を投稿する前に、私はこのコミュニティおよび他のコミュニティのブログで前の質問を参照しましたが、私の問題は残ります。response.sendRedirect jQueryのポストコールで作成したときにサーブレットからjspに移動しない

問題

私は、サーブレット内のdoPost()メソッドから新しいJSPに私のサーブレットをリダイレクトすることはできませんよ。私はコードスニペットの下に示すようにjavascriptファイルからdoPostメソッドを呼び出しました。 コントロールはdoPost()メソッドに渡され、System.out.printlnステートメントでチェックされていますが、helloWorld.jspにはディスパッチされません。 eclipse /およびTomcat 9.0を使用しています。

私のサーブレットコード:

@WebServlet(
     name = "OpenSourceMapCtrl", 
     description = "Open Source Map Main Controller", 
     urlPatterns = {"/callMasterDateHandler"} 
    ) 
public class MainAppCtrl extends HttpServlet{ 


    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

      try { 
RequestDispatcher dispatcher =request.getRequestDispatcher("/helloWorld.jsp"); 
     dispatcher.forward(request, response); 
      } catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 
    } 

enter image description here helloWorldJs.js

$.post("callHelloWorldHandler", function(data) { 
       console.info('@#@ data = ',data); 
}); 

放火魔コンソールがページ "ハローworld.jsp" ためのOK 200を示しています。しかし、ページはレンダリングされません。

+0

@BalusCこんにちは、私はhttpsを渡って来ることができませんでした:// stackoverflowの。この質問を投稿する前に、このリンク先のcom/questions/4112686/how-to-use-servlets-and-ajaxを参照してください。私はリンクを詳しく調べましたが、それは問題の最も詳細な説明だと思います。この質問への回答としてリンクを付けるのはいいアイデアだろうか、それを正しい回答として選ぶことができます。 ajax/post/getコールバックから呼び出されたときにサーブレットがjspページにコールを転送/リダイレクトすることができないメカニズムは、私のための学習であり、私は答えとその後のリンクを介してその学習を保持しようとしました。 – dirai

答えて

0

response.sendRedirectは、2つの理由で機能しません。(1)POSTとしてリダイレクトできません。リダイレクトは常にGETです。 (2)WEB-INFのファイルにリダイレクトすることはできません。これは、ブラウザに直接アクセスすることができないためです。だからあなたは前向きに使う必要があります。

あなたはディスパッチャであることを指定する必要がありますので、JSPは、WEB-INFの下にある。最終的にはゼロに私を助けたこの投稿へrequest.getRequestDispatcher("/WEB-INF/helloWorld.jsp").forward(request, response);

+0

私は上記の変更を加えましたが、私のJSPページはまだレンダリングされません。以前のサンプルコードでは、getコールに変更し、まだ動作しなかったリダイレクトを試しました。私はこの場所のどこにでもいると思う。タンブルウィード。 – dirai

0

おかげ

How to redirect to a new page in jquery callback function

問題の根本原因を突き止める。

私のjavascriptファイルでは、jqueryコールバックからサーブレットを呼び出そうとしています。これは正確にajax呼び出しではありませんが、$ .getまたは$ .postはまだajax呼び出しとして動作します。つまり、コントロールが返さなければならないコールバックとしてさらに正確に言います。 だから、あなたがそうするとき
RequestDispatcherディスパッチャー= request.getRequestDispatcher( "helloWorld.jsp"); dispatcher.forward(request、response); または response.sendRedirect( "helloWorld.jsp"); サーブレットは "helloWorld.jsp"をレンダリングしますが、ブラウザには直接ではなく、呼び出されたjavascriptファイルの待機中の "コールバック"関数にレンダリングします。 jspの "action"イベントのフォーム送信アクションを実行した場合、サーブレットはブラウザに直接 "helloWorld.jsp"をレンダリングする可能性があります。

あなたは下のリンクで上記全体のユースケースと非常に詳細かつ技術的な説明を見つけることができます。

How to use Servlets and Ajax?

関連する問題