【问题标题】:Java EE servlet page redirection + sending data to the controller [duplicate]Java EE servlet页面重定向+向控制器发送数据[重复]
【发布时间】:2016-04-26 00:42:34
【问题描述】:

我正在尝试从 Servlet 进行页面重定向,但它不起作用我不知道为什么,如果有人可以帮助我将不胜感激,我花了 2 个小时搜索但我没有得到结果。

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

        });        

});

servlet 代码

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


    }

我也尝试过使用

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

};

已经完成了,谢谢大家。

【问题讨论】:

  • 如果你想使用 ajax 那么 javascript 必须处理重定向。如果您执行“正常”提交,浏览器只会处理重定向。
  • 您只是重定向 ajax 请求,而不是主请求。只需让 servlet 作为 JSON 响应返回所需的重定向 URL,然后让 JavaScript 重定向到它。
  • 如何通过重定向保持从 ajax 调用返回的日期?!因为我试过这个但是重定向后数据消失了?!

标签: javascript java ajax jsp servlets


【解决方案1】:

在 close() 之后你不能做任何事情来响应。

当涉及到标头时,您甚至无法在响应提交后编写它们。在你的情况下,如果你正在重定向,你甚至不应该写任何东西来响应。

这同样适用于 RequestDispatcher.forward()。在转发之前,您不应该在响应中写入任何内容。而且,永远不要关闭()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2012-11-17
    • 2018-05-19
    • 2014-07-23
    • 2012-12-30
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多