【问题标题】:requestDispatcher.forward and response.redirect not workingrequestDispatcher.forward 和 response.redirect 不起作用
【发布时间】:2012-08-25 20:20:03
【问题描述】:

我的网络应用目录结构是

myApp
 -src
     - filtersPackage(all my filters lie in this package)
     - servletsPackage(all my controllers and models lie in this package)
 - web-content           
   - web
     - views(all my jsp files lie in this dir)
     - js(all my javascript files lie in this dir)

在 login.jsp 中,用户点击 FB 登录按钮,在 js/FBAUth.js 中我收集登录详细信息并使用 jquery ajax POST 方法将其发送到我的 auth.do servlet。

SessionFilter 允许请求转到 AuthServlet 的 doPost 方法。在 AuthServlet 如果凭据正确,则执行以下操作

url = "dashboard.jsp" 
request.getSession().setAttribute("uid", id);               
view = request.getRequestDispatcher(url);
view.forward(request, response);
return;

我在调试模式下看到这些行执行,但我的浏览器仍然卡在登录页面上。 view.requestURI -> /myApp/web/views/dashboard.jsp 和 view.servletPath -> /web/views/dashboardTmp.jsp。 我也尝试了 response.sendRedirect(url),但浏览器仍然卡在登录页面上。在这些行之后没有任何执行。

在web.xml中,我的auth servlet映射如下

<servlet>
    <servlet-name>Auth</servlet-name>
    <servlet-class>servletsPackage.AuthServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Auth</servlet-name>
    <url-pattern>/web/views/auth.do</url-pattern>
</servlet-mapping>

我也尝试在doPost中调用doGet,并在doGet中执行了这段代码,但都是徒劳的。 我在这里错过了什么?

【问题讨论】:

    标签: java jsp session servlets servlet-filters


    【解决方案1】:

    这种方法似乎有点缺陷。您的转发不起作用,因为您正在使用 AJAX 发布数据。您需要使用 javascript 或更确切地说是 jquery 来处理重定向。

    检查您的 jquery AJAX 函数的回调方法是否有效。使用alert(responseText);打印出responseText

    查看this 链接以获取有关您的问题的更多信息。并检查第一个答案。它为这个问题提供了一个解决方案。

    【讨论】:

    • 谢谢你的答案。我想改变我的设计,使servlet转发jsp。我只是想保存这种回调方法引起的往返。有没有其他办法?
    • 这根本不是一个复杂的方法。我希望您不会对每个页面都进行这样的页面导航,是吗?这仅用于登录目的,对吗?顺便说一句,使用这种方法,您可以发送重定向 url 作为响应,即您可以为此 web 应用程序动态更改登录主页。所以这种方法也有一个隐藏的优势。
    • 假设在登录和使用应用程序一段时间后,由于某种故意的原因会话无效,现在如果用户单击任何 jquery 加载按钮,我希望服务器重定向到登录而不是发送 url 作为响应。我遇到了这个问题,因为页面中有许多 jquery ajax 和 jquery 加载调用,必须使用您的方法进行修改。
    • 这不是我特别喜欢的方法,几乎​​所有的 AJAX webapps 都使用这种方法。你也不是第一个遇到这种困境的人。看看这个:stackoverflow.com/questions/2927044/… 或这个stackoverflow.com/questions/199099/…。告诉我这是否不能解决您的问题。
    【解决方案2】:

    尝试从您的 servlet 中返回一些内容(写入响应编写器),将其检索为 ajax 响应,根据该响应,执行 window.location.href ="YOUR URL";

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多