【问题标题】:Redirect from missing page to new one从丢失的页面重定向到新页面
【发布时间】:2010-02-10 10:41:11
【问题描述】:

您好,我正在升级一个站点,从 Notes 迁移到 Java JSP,并且需要支持从旧 URL 到新 URL 的重定向。所以 /site/oldpage.nsf?home 需要重定向到 /site/newpage.jsp。

在 Tomcat 中,我设置了一个错误页面来重定向: 404 /avi_redirect.jsp

在 avi_redirect.jsp 我有:

pageContext.forward(  "/newpage.jsp" );

但由于我需要对许多页面执行此操作,因此我需要知道旧页面名称,即 /site/oldpage.nsf?home。
知道我怎么能得到这个吗?响应和标题没有它。查询字符串有参数,但没有 url。

【问题讨论】:

    标签: java jsp tomcat redirect


    【解决方案1】:

    为此使用过滤器,而不是 JSP(否则您可能会冒IllegalStateExceptions 的风险)。也宁愿使用 redirect 而不是转发(否则旧 URL 将保留在地址栏中)。也宁愿使用301 重定向而不是(默认)302(否则旧 URL 仍将被搜索机器人索引)。

    因此,您需要创建一个 Filter 来侦听旧扩展 *.nsfurl-pattern 并基本上如下实现:

    private static final Map<String, String> urlMapping = new HashMap<String, String>();
    
    static {
        urlMapping.put("/site/oldpage.nsf?home", "/site/newpage.jsp");
        // Put more here.
    }
    
    public doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException) {
        HttpServletRequest httpReq = (HttpServletRequest) request;
        String oldUrl = httpReq.getRequestURL().append("?").append(httpReq.getQueryString()).toString();
        String newUrl = urlMapping.get(oldUrl);
        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        response.setHeader("Location", newUrl);
    }
    

    您看到我已经重构了 URL 以包含查询字符串(? 之后的部分)。

    理想情况下,如果新 JSP 文件的结构和命名方式与最初完全相同,但扩展名不同。这样您就不需要映射,只需在 URL 上进行字符串替换就足够了:

    String newUrl = oldUrl.replace(".nsf", ".jsp");
    

    【讨论】:

    • 太棒了,谢谢。它看起来像要走的路。我需要解决 Tomcat 的一些问题,因为托管服务器是 Tomcat 4,并且根据 eclipse,看起来 Web.xml 更改仅在 5(或 5.5)上受支持。但它看起来像我想走的路。
    【解决方案2】:

    您应该考虑在您的 DD、web.xml 中执行此操作。并编写一个过滤器,将请求重定向到适当的页面。

    【讨论】:

    • 啊,过滤器映射?现在才知道它的信息
    • 正确,精彩。如果您需要进一步解释,请告诉我们。
    【解决方案3】:

    您需要维护旧页面 url 到新页面 url 的映射。您可以将此映射保存在属性文件、xml 或数据库中,avi_redirect.jsp 会查找此映射并重定向到新页面。

    您需要考虑的其他事情是关于 url 参数是否相同。如果它们也不相同,那么您也需要为它们映射。

    【讨论】:

    • 只有当我知道缺少哪个页面时,映射才有效。那是我找不到的。
    猜你喜欢
    • 2017-09-24
    • 2018-08-22
    • 1970-01-01
    • 2010-11-08
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多