从缺失页面重定向到新页面

时间:2010-02-10 10:41:11

标签: java jsp tomcat redirect

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

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

在avi_redirect.jsp中我有:

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

但是因为我需要在许多页面上执行此操作,所以我需要知道旧的页面名称,即/site/oldpage.nsf?home。
知道我怎么能得到这个吗?响应&标题没有它。查询字符串有params而不是url。

3 个答案:

答案 0 :(得分:2)

而是使用过滤器,而不是JSP(否则你可能会冒IllegalStateException的风险)。另外,使用重定向而不是转发(否则旧网址将保留在地址栏中)。另外,使用301重定向而不是(默认)302(否则旧网址仍会被搜索机构索引)。

因此,您需要创建一个Filter来监听旧版url-pattern的{​​{1}}并实现它,基本如下:

*.nsf

您看到我已经重新构建了URL以包含查询字符串(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); } 之后的部分)。

理想情况下,如果新JSP文件的结构和命名方式与原始方式完全相同,但只能使用不同的扩展名。这样您就不需要映射,但只需在URL上替换字符串即可:

?

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

您需要采取的其他事项是关于url参数,如果它们相同或不相同。如果它们也不相同,那么你也需要为它们进行映射。