从post方法获取数据后如何重定向

Posted

技术标签:

【中文标题】从post方法获取数据后如何重定向【英文标题】:How to redirect after get data from post method 【发布时间】:2012-08-08 13:42:00 【问题描述】:

我有一个post method to servlet,所以servlet在将请求转发到另一个页面后返回一个网页getServletContext().getRequestDispatcher("/AnotherServlet").forward(request, response); 所以我不能直接重定向window.location ="/Anotherservlet" 我尝试了很多解决方案:通过链接传递参数并且它正在工作,但我会更好我尝试了var w = window.open(); w.document.write(data);,它正在工作,但页面仍然是我的主页,即使页面是从服务器下载的,页面仍在加载(所有带有就绪语句的功能都不起作用)所以当我单击带有 href="#" 的按钮时,它会将我重定向到主页,因为正如我之前所说URL=/ not =/anotherservlet我不喜欢执行此操作的 get 方法或 cookie 我搜索其他解决方案感谢您的帮助 这是我的 servlet:

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


    String name= request.getParameter("name");
    String pass=request.getParameter("pass");

     if (name.equals("a")&&pass.equals("0cc175b9c0f1b6a831c399e269772661"))
    
    getServletContext().getRequestDispatcher("/BookListServlet").forward(request, response);
    
    else 
    
     response.setContentType("text/plain");
        PrintWriter out = response.getWriter();
        out.print("error");
        out.flush();
        out.close();
    


这是我的 BookListServlet:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 

    books= new bookiml().get_books();   
    String name= request.getParameter("name");
    String ipAddress = request.getRemoteAddr();

request.setAttribute("books", books);
request.setAttribute("userip", ipAddress);
request.setAttribute("user", name);
request.setAttribute("title", "Book listing");

getServletContext().getRequestDispatcher("/META-INF/pages/book-list.jsp").forward(request, response);


/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    // TODO Auto-generated method stub
    doGet(request, response);

我不想在检查登录身份验证后从 servlet 获取页面,但如果没有像这样在链接中传递参数:`

$.ajax(
                    url: 'identification',
                    type: 'POST',
                    data:pass:$hash,name:$name,
                    timeout: 1000,
                    success: function(data)
                     var target = document.getElementById('spinner');
                                    spinner = new Spinner(opts).spin(target);
                                    $('#spinner').fadeIn();

                                    if (data=='error')
                                    
                                    $("#messages").html(" Check your username and password.");
                                    $('#name').css('border-color','#B94A48');
                                    $('#pass').css('border-color','#B94A48');
                                    $('#spinner').fadeOut();
                                    

                                    else 

                                        
                                        $("#messages").html("");


            $('#spinner').fadeOut();
                                    window.location ="/BookListServlet?name="+$name;
                                    


                
            );`

【问题讨论】:

对此我很抱歉,但我完全无法理解您的问题。您能否尝试重新编辑问题,用您想要实现的简短句子重构问题?请不要太冗长。如果您还添加代码,那就太好了。 【参考方案1】:

据我了解,您只想使用 servlet 重定向?

response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", "http://splinky.com/");

【讨论】:

这个 getServletContext().getRequestDispatcher("/META-INF/pages/book-list.jsp").forward(request, response); 我不能使用它,因为我不需要静态页面,转发请求后需要它 @Splinky 哦,我明白了。如果您需要将客户的请求转发到其他资源,您应该使用getServletContext().getRequestDispatcher(url).forwar‌​d(req, res); 很好的例子在这里:servletworld.com/examples/servlet-forward.html 这是我代码中的一些,没有 Jquery 一切正常,但是当我使用 jquery 时,我无法操纵来自服务器的响应【参考方案2】:

您可以将 url 放在要重定向的 ajax 响应中,以防成功:

示例 js 响应:

 status: 'ok', redirect: '/example' 

并在客户端用js重定向。

客户端代码:

$("form.ajaxForm").submit( function(e) 
        var form = $(this);
        form.ajaxSubmit(
            dataType: 'json',
            success: function(data) 
                if( data.redirect != "" ) 
                    window.location = data.redirect;
                
            
        );

        return false;
    );

您必须使用 jQuery 表单插件才能工作。见:http://jquery.malsup.com/form/#getting-started

【讨论】:

以上是关于从post方法获取数据后如何重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何在获取 post 调用后管理重定向请求

重定向,请求转发,get,post

如何在组件方法中的 nuxtjs 中进行重定向而不是获取方法?

Laravel 5.4 从请求对象重定向获取方法

Django表格,POST

如何在 Django 2 中的 POST 方法后重定向到成功