2016-04-26 104 views
-1

我試圖從Servlet進行頁面重定向,但它不起作用我不知道爲什麼,如果有人能幫助我會很感激,我花了2小時搜索,但我沒有得到結果。Java EE servlet頁面重定向+發送數據到控制器

JS代碼

$("#login_form_submit").click(function(){ 
var form = $('#login_form'); 
    $.ajax({ 
      type: "Post", 
      url: "AccountServlet", 
      data: form.serialize(), 
      dataType: "json", 

      //if received a response from the server 
      success: function(data, textStatus, jqXHR) { 
       if(data.success){ 
        $("#ajaxResponse").html(""); 
        console.log(data); 

        if (data.User.role == 1){ 
         main.user = data.User; 
         //window.location.href = "Student_home.jsp"; 
        } 
       } 
       //display error message 
       else { 
        $("#ajaxResponse").html("<div><b>Something goes wrong check your email or password</b></div>"); 

       } 
      }, 

      //If there was no response from the server 
      error: function(jqXHR, textStatus, errorThrown){ 
       $("#ajaxResponse").html("<div><b>Something goes wrong check your email or password</b></div>"); 
       $("#ajaxResponse").html(jqXHR.responseText); 
      }, 

      //capture the request before it was sent to server 
      beforeSend: function(jqXHR, settings){ 
       //disable the button until we get the response 
       $('#login_form_submit').attr("disabled", true); 
      }, 

      //this is called after the response or error functions are finsihed 
      //so that we can take some action 
      complete: function(jqXHR, textStatus){ 
       //enable the button 
       $('#login_form_submit').attr("disabled", false); 
      } 

     });   

}); 

代碼

@Override 
protected void doPost(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 

    PrintWriter out = response.getWriter(); 
    response.setContentType("text/html"); 
    response.setHeader("Cache-control", "no-cache, no-store"); 
    response.setHeader("Pragma", "no-cache"); 
    response.setHeader("Expires", "-1"); 

    response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setHeader("Access-Control-Allow-Methods", "POST"); 
    response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 
    response.setHeader("Access-Control-Max-Age", "86400"); 


    String userName = request.getParameter("userName"); 
    String password = request.getParameter("password"); 
    DatabaseWrapper context = new DatabaseWrapper(); 
    User user = context.Check_login(userName, password); 
    session.current_user = user; 
    Gson gson = new Gson(); 
    JsonObject myObj = new JsonObject(); 

    if (user == null){ 
     myObj.addProperty("success", false); 
     out.println(myObj.toString()); 
    }else if (user instanceof Student){ 
     JsonElement userObject = gson.toJsonTree((Student)user); 
     myObj.addProperty("success", true); 
     myObj.add("User", userObject); 
     out.println(myObj.toString()); 

     out.close(); 
     //response.setStatus(HttpServletResponse.SC_FOUND); 
     response.sendRedirect("Student_home.jsp"); 
     return; 


    } 

我也試過servlet來使用

RequestDispatcher dispatcher = request.getRequestDispatcher("/Student_home.jsp"); 
     dispatcher.forward(request, response); 

,但沒有成功,任何建議!

只有使用javascript才能正常工作,但我需要從servlet重定向!

我用這條線在JavaScript

window.location.href = "Student_home.jsp"; 

傢伙,我找到了答案,但由於某種原因,我不能在解決方案張貼?

問題是我重定向ajax調用,並且沒有辦法阻止它,這個想法是從jQuery成功的響應中我會使用另一個創建表單元素的調用重定向並以自然方式提交

我的解決方案:

function Redirect (servlet , method_type){ 
var form = $(document.createElement('form')); 
$(form).attr("action", servlet); 
$(form).attr("method", method_type); 
$(form).css("display", "none"); 
form.appendTo(document.body); 
$(form).submit(); 

};

它完成了,謝謝每一個。

+2

如果您想使用ajax,那麼javascript必須處理重定向。如果您進行「正常」提交,瀏覽器將只處理重定向。 – BevynQ

+0

你只是重定向ajax請求,而不是主要請求。只要讓servlet將所需的重定向URL作爲JSON響應返回,然後讓JavaScript重定向到它。 – BalusC

+0

如何使用重定向從ajax調用返回日期?!因爲我試過,但數據在重定向後消失了! –

回答

0

close()後無法做任何響應。

說到標題,在提交響應後你甚至不能寫出它們。就你而言,如果你正在重定向,你甚至不應該寫任何迴應。

同樣適用於RequestDispatcher.forward()。在轉發之前,您不應該向響應寫任何內容。並且,絕不關閉()。

相關問題