2017-06-13 72 views
0

在發佈這個問題之前,我交叉引用了關於此社區和其他社區博客的先前的問題,但是我的問題依然存在。response.sendRedirect從jQuery調用jQuery後不從jsp調用到jsp後調用

問題

我不能對我的servlet重定向到從該Servlet的doPost()方法一個新的JSP。我從JavaScript文件中調用了doPost方法,如下面的代碼片段所示。 控制來到我通過System.out.println語句檢查的doPost()方法,但它永遠不會調度到helloWorld.jsp 我正在使用eclipse /和Tomcat 9.0。

我的servlet代碼:

@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); 
}); 

Firebug控制檯顯示200 OK的頁面 「你好world.jsp」。但該頁面不呈現。

+0

@BalusC嗨,我不能遇到https://開頭計算器。 com/questions/4112686/how-to-use-servlets-and-ajax此鏈接之前必須發佈此問題。我仔細閱讀了鏈接,我想這是對問題最詳細的解釋。將鏈接作爲這個問題的答案是否是一個好主意,我可以選擇這個答案作爲正確的答案。當從ajax/post/get回調中調用時,servlet無法將調用轉發/重定向到jsp頁面的機制對我來說是一種學習,我試圖通過回答以及後續的鏈接來保持這種學習。 – dirai

回答

0

response.sendRedirect將不起作用的原因有兩個:(1)您不能重定向爲POST。重定向總是GET。 (2)您無法重定向到WEB-INF中的文件,因爲瀏覽器無法直接訪問它。所以你必須使用前進。

的JSP是在WEB-INF,所以你必須指定在調度員:request.getRequestDispatcher("/WEB-INF/helloWorld.jsp").forward(request, response);

+0

我做了上述更改,但我的jsp頁面仍然不呈現。在上面的示例代碼中,我更改爲get調用,並嘗試重定向它仍然不起作用。我想我在這一個地方是全部。 Tumbleweed公司。 – dirai

0

多虧了這個帖子

How to redirect to a new page in jquery callback function

這最終幫助我到零在問題的根源上下來。

在我的JavaScript文件中,我試圖從jquery回調調用servlet。雖然它不完全是ajax調用,但$ .get或$ .post仍然表現爲ajax調用,即更確切地說,是控件必須返回的回調。 因此,當你做一個
RequestDispatcher dispatcher = request.getRequestDispatcher(「helloWorld.jsp」); dispatcher.forward(request,response); 或 response.sendRedirect(「helloWorld.jsp」); servlet確實呈現「helloWorld.jsp」,但不是直接給瀏覽器,而是從我的javascript文件中調用它的等待「回調」函數。 如果我在jsp中通過表單「action」事件完成表單提交操作,那麼servlet可能直接將「helloWorld.jsp」呈現給瀏覽器。

您可以找到整個用例了非常詳細的技術說明上面下面這個鏈接:

How to use Servlets and Ajax?