2016-04-26 6 views
-1

Ich versuche Seitenumleitung von Servlet zu machen, aber es funktioniert nicht Ich weiß nicht warum, wenn jemand helfen könnte ich werde dankbar sein, verbrachte ich 2 Stunden suchen, aber ich habe kein Ergebnis bekommen.Java EE Servlet Seitenumleitung + Senden von Daten an den Controller

der JS-Code

$("#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); 
      } 

     });   

}); 

der Servlet-Code

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


    } 

Ich habe auch versucht

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

zu verwenden, aber es nicht geschafft hat, jede Anregung!

nur mit Javascript funktioniert gut mit mir, aber ich muss vom Servlet umleiten!

benutzte ich diese Zeile in Javascript

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

Jungs, die ich die Antwort gefunden, aber aus irgendeinem Grund kann ich poste es nicht in Lösungen ?!

das Problem war, dass ich den Ajaxanruf umleitend und es gibt keine Weise, es zu verhindern, die Idee ist von der Antwort im jquery Erfolg, den ich unter Verwendung eines anderen Anrufs umschreibe, der Formelement herstelle und es auf natürliche Weise einreicht

meine Lösung:

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(); 

};

es ist getan, danke jeder.

+2

Wenn Sie Ajax verwenden möchten, muss das Javascript die Umleitung übernehmen. Der Browser wird die Weiterleitung nur dann behandeln, wenn Sie eine "normale" Übermittlung vornehmen. – BevynQ

+0

Sie leiten lediglich die Ajax-Anfrage um, nicht die Hauptanfrage. Lassen Sie das Servlet die gewünschte Weiterleitungs-URL als JSON-Antwort zurückgeben, und lassen Sie JavaScript dann zu ihm umleiten. – BalusC

+0

Wie man das Datum, das vom Ajaxanruf mit der Umleitung zurückgebracht wird, hält? weil ich das ausprobiert habe, aber die daten nach der Weiterleitung verschwunden sind?! –

Antwort

0

Sie können nichts tun, um nach close() zu antworten.

Wenn es um Header geht, können Sie nicht einmal schreiben, nachdem die Antwort festgeschrieben ist. In Ihrem Fall sollten Sie nicht einmal etwas zur Antwort schreiben, wenn Sie umleiten.

Das gleiche gilt für RequestDispatcher.forward(). Sie sollten vor der Weiterleitung nichts in die Antwort schreiben. Und, niemals schließen().

Verwandte Themen