jQuery servlet 重定向后移动页面无法正确加载

jQuery mobile pages not loading correctly after servlet redirect

我的移动网络应用程序中有一些基于 jQuery Mobile 的页面需要在没有身份验证的情况下访问,有些页面只有在用户通过身份验证后才能访问。我的解决方案基于本教程:Java Servlet Filter Example Tutorial

我已经完成 @WebFilter 检查用户尝试访问哪个页面以及他是否未通过身份验证(会话 未创建或者 session 中没有属性 user) 他被重定向到 login.html页。

这是来自我的 login.html 页面的相关代码:

<form action="LoginServlet" method="post">
...
input elements for username and password
...
</form>

表单将其数据提交给 LoginServletLoginServlet 检查凭据是否正确,如果正确,则将其重定向回所需页面。目前我在会话中存储所需的页面 (it's better to store this in a hidden element inside the form, but I didn't know it when I was writing the code)

我使用这行代码从 LoginServlet 执行重定向:

response.sendRedirect(redirectToPage);

我项目中的所有页面都是简单的 *.html 页面 javascript, 我做了一个使用 jQuery Mobile 的移动网络应用程序。

重定向到所需页面后我的问题:

  1. 在地址栏中我看到了我的 servlet LoginServlet 的名称,而在 Chrome 的控制台中我没有看到我的页面内容,只有我的 servlet 的名称 LoginServlet 其内容为空白。但在浏览器中,我看到所有静态内容,它已正确呈现。
  2. 最重要的问题是加载页面中的所有动态内容都不起作用。动态内容我的意思是一些 ajax 函数应该在页面加载和呈现动态内容时调用:

    $(document).on('pagebeforeshow',function(){
                initPage();
    });
    

如果我重新加载页面,一切都会开始正常工作。

我做错了什么? 提前谢谢你。

这个问题实际上有两种解决方案。 第一个是在 javascript 中执行重定向,而不是在 servlet 中,我认为这是更好的解决方案,更多细节请看这里:How to manage a redirect request after a jQuery Ajax call 如果您需要在提交 <form/> 后从 servlet 执行此操作,则第二种解决方案是将 data-ajax="false" 添加到 <form/> 标记中: <form action="postthis" method="post" data-ajax="false">,此解决方案取自此处: