响应sendRedirect不使用AJAX请求

时间:2013-11-28 13:51:30

标签: javascript ajax servlets extjs extjs3

我有一个带有java和EXT JS(3.4)的Web应用程序。 对于所有servlet,这就是我在doGet方法中所拥有的:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    try {
        response.sendRedirect("ErrorPage.jsp");
    } catch (Throwable t) {
        //do some logging
    }
}

我使用EXT JS模拟GET请求:

Ext.Ajax.request({
    method : 'GET',
    url : 'web'//web is the servlet name
});

页面不会重定向。这是firefox的tamperData插件的输出:

Tamper Data Output

如果您无法看到图像,则表示AJAX Get请求已响应状态302:表示重定向,并且有一个请求ErrorPage.jsp,其返回状态代码200:表示请求已成功完成。
如果我在ajax请求的回调中警告响应,它会警告ErrorPage.jsp的内容。我有很多这样的AJAX请求。是否有任何理由说明重定向无效。

我还添加了以下代码。但我总是得到200的状态。虽然我可以在firebug中看到,对于获取请求,第一个请求给出了状态302,而第二个请求给出了200.

Ext.Ajax.on('requestcomplete', function(conn, response, options) {
                alert('successful'+response.status)
            });
            Ext.Ajax.on('requestexception', function(conn, response, options) {
                alert('failed'+response.status)
            });

详细说明:

操作系统:Windows 7
服务器:Apache Tomcat 7.0.42
Servlet Api:使用servlet-api-3.0.jar

1 个答案:

答案 0 :(得分:2)

基于@ AnthonyGrist的帖子,这是我为EXT JS提出的解决方案。
 在控制器中,我将doGet更改为:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    try {
       response.setStatus(403);
    } catch (Throwable t) {
        //do something
    }
}

状态代码403在EXT JS中被识别为失败。所以在jsp页面中:

Ext.Ajax.on('requestexception', function(conn, response, options) {
           if(response.status=403){
                window.location.assign("ErrorPage.jsp");
 }
});