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

时间:2015-01-23 21:42:44

标签: servlets servlet-filters

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

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

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

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

表单将数据提交到 LoginServlet LoginServlet 检查凭据是否正确,如果它们正确,则将其重定向回所需的页面。目前,我在会话中存储了所需的页面(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();
    });
    
  3. 如果我重新加载页面,一切都开始正常工作。

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

1 个答案:

答案 0 :(得分:0)

这个问题实际上有两个解决方案。 第一个是在 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">,此解决方案取自此处:https://stackoverflow.com/a/8631895/947111