从 Web 应用程序中的 servlet 过滤器重定向到上一页

Posted

技术标签:

【中文标题】从 Web 应用程序中的 servlet 过滤器重定向到上一页【英文标题】:Redirect to previous page from servlet filter in web application 【发布时间】:2016-11-17 04:56:03 【问题描述】:

我已经通过几个链接来了解我们如何从过滤器重定向到上一页。

我要做什么

有一个A.jsp。单击提交后,它会转到一个过滤器来检查某些内容,如果有问题,它会将其发送回A.jsp

我尝试过的解决方案

    我不能使用request.getHeader("referrer"),因为我提交页面时 URL 发生了变化。所以它会第一次工作,但之后会失败。

    在每个 jsp 中添加隐藏输入,这些输入将作为请求参数发送,我们可以在过滤器中使用它来发送回它。这可以工作,但由于 jsps 的数量很大,它需要在每个 jsp 页面中进行更改。

我有什么遗漏的吗?

有什么标准的方法来处理这种情况?

【问题讨论】:

请添加 A.jsp 的代码和您的过滤器,谢谢 @jr593:你读过这个问题吗?您的评论似乎是一个轻率的下意识的评论,一个人可能会在没有代码块的情况下发布每个问题。我没有看到所请求的信息将如何帮助以当前形式回答问题。它只会给问题添加更多无关紧要的混乱,使其回答的吸引力降低。 【参考方案1】:

可能有更好的选择,但在没有其他答案的情况下,您可以使用 javascript 将隐藏的输入自动添加到每个表单中。如果您有任何 jsp-includes 用于在您的页面之间共享的内容,您可以添加一个带有如下功能的脚本标记:

window.onload = function()
    for (var i = 0; i < document.forms.length; i++)
    
        var form = document.forms[i];
        (function(form)
            form.addEventListener('submit', function(e)
                var element = document.createElement('input');
                element.setAttribute('type', 'hidden');
                element.setAttribute('name', 'returnpage');
                element.setAttribute('value', window.location);
                form.appendChild(element);
            );                        
        )(form);
    
;

【讨论】:

感谢您的回答,但这或多或少类似于使用依赖于 url 的 request.getHeader("referer")。

以上是关于从 Web 应用程序中的 servlet 过滤器重定向到上一页的主要内容,如果未能解决你的问题,请参考以下文章

Servlet过滤器重定向,url没有改变

Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;

Servlet过滤器

Servlet过滤器

从过滤器重定向到 JSP 时传递属性:会话与请求

哪些特定用例需要 Struts2 之外但在同一个 Web 应用程序中的 servlet 过滤器?