requestDispatcher.forward和response.redirect无法正常工作

时间:2012-08-31 02:29:10

标签: java jsp session servlets servlet-filters

我的网络应用目录结构

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中执行此代码,但都是徒劳的。 我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

这种方法似乎有点缺陷。您的转发工作无效,因为您使用AJAX发布数据。你需要使用javascript或者jquery来处理重定向。

检查你的jquery AJAX函数的回调方法是否正常工作。使用alert(responseText);

打印出responseText

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

答案 1 :(得分:0)

尝试从servlet中返回一些内容(在响应编写器中写入),将其作为ajax响应检索,具体取决于此,执行window.location.href ="YOUR URL";